demande de correction d'une macro visual basic exel 2000
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

demande de correction d'une macro visual basic exel 2000



  1. #1
    maisteack

    demande de correction d'une macro visual basic exel 2000


    ------

    Bonjour
    je desire scruter 4 colonnes A B C D et comparer les chiffres incrits dans ces colonnes par rapport a 1 chiffre incrit dans une cellule F3 comment modifier cette macro sachant que telle qu'ellle est ecrite , elle ne scrute que la colonne A ; Je joins la redaction de la macro ci dessous

    Code:
    Sub Recherche()
        Range("F3").Select
        Question$ = ActiveCell.Value
        Range("A3").Select                             le probleme doit se situer sur cette ligne
        While (Not (IsEmpty(ActiveCell)))
            If ActiveCell.Value = Question$ Then
                Selection.Interior.ColorIndex = 4
            Else
            End If
            ActiveCell.Offset(1, 0).Range("A1").Select
        Wend
       End Sub
    Par avance merci

    -----
    Dernière modification par JPL ; 12/06/2012 à 14h08. Motif: Utilisation de la balise Code (#) pour garder l'indentation

  2. #2
    invite58a3c88f

    Re : demande de correction d'une macro visual basic exel 2000

    Bonjour maisteack,

    Je ne vais pas écrire la macro à ta place. Je te donne une direction de recherche.
    Apprendre par soi-même est plus instructif que de recevoir la réponse toute faite.

    Le comportement de cette macro se limite à la colonne A (4° ligne de ton code) et lit les cellules tant qu'elle ne trouve pas de cellule vide (5° ligne de ton code).

    Mais alors que la progression de cellule en cellule est commandée (10° ligne de ton code), il n'y a pas de boucle qui lui dit, après avoir trouvé une cellule vide dans une colonne - et donc être sorti de la boucle "while ... wend" qu'elle doit aller à la colonne suivante.
    Donc, vois comment lui demander d'aller voir dans la colonne suivante.

    Plusieurs solutions sont possibles.

    Tiens-nous au courant de ta progression.

    A+

  3. #3
    maisteack

    Re : demande de correction d'une macro visual basic exel 2000

    Bonjour et merci pour ton conseil
    j'ai donc modifié le code en ajoutant la recherche pour chaque colonne
    ça fonctionne mais comme tu le dis il y a certainement d'autres façons de faire
    mais là je ne suis qu'un debutant !
    A+

    Code:
    Sub Recherche()
        Range("F3").Select
        Question$ = ActiveCell.Value
        Range("A3").Select
        While (Not (IsEmpty(ActiveCell)))
            If ActiveCell.Value = Question$ Then
                Selection.Interior.ColorIndex = 4
            Else
            End If
            ActiveCell.Offset(1, 0).Range("A1").Select
        Wend
       Range("F3").Select
        Question$ = ActiveCell.Value
        Range("B3").Select
        While (Not (IsEmpty(ActiveCell)))
            If ActiveCell.Value = Question$ Then
                Selection.Interior.ColorIndex = 4
            Else
            End If
            ActiveCell.Offset(1, 0).Range("A1").Select
        Wend
        Range("F3").Select
        Question$ = ActiveCell.Value
        Range("C3").Select
        While (Not (IsEmpty(ActiveCell)))
            If ActiveCell.Value = Question$ Then
                Selection.Interior.ColorIndex = 4
            Else
            End If
            ActiveCell.Offset(1, 0).Range("A1").Select
        Wend
        Range("F3").Select
        Question$ = ActiveCell.Value
        Range("D3").Select
        While (Not (IsEmpty(ActiveCell)))
            If ActiveCell.Value = Question$ Then
                Selection.Interior.ColorIndex = 4
            Else
            End If
            ActiveCell.Offset(1, 0).Range("A1").Select
        Wend
    end sub
    Dernière modification par JPL ; 12/06/2012 à 14h09. Motif: Utilisation de la balise Code (#) pour garder l'indentation

  4. #4
    invite58a3c88f

    Re : demande de correction d'une macro visual basic exel 2000

    Oui, en effet, ce n'est pas très "élégant".
    En informatique, il n'y a jamais LA solution mais UNE solution pour résoudre un problème.

    Dans ton cas, il est également possible de créer 2 boucles "for" imbriquées l'une dans l'autre qui feront ces contrôles et opérations au lieu de ces boucles "while ... wend" à répétition.
    Pour te donner une direction de recherche :
    Une première boucle "for" permet de passer d'une colonne à l'autre autant de fois que désiré (ici 4 fois) en partant d'une colonne bien précise (ici, la colonne A). Tu devras utiliser une autre méthode de définition de l'adresse d'une cellule où tu as accès aux deux variables séparément "cell(ligne, colonne)".
    La seconde boucle "for" auscultera toutes les cellules jusqu'à ce qu'elle tombe sur une cellule vide.

    Un petit détail me titille dans ton code, ton exercice : il faut absolument être certain que toutes les cellules contiennent une valeur.
    Et si l'une d'elles est vide, toutes les autres en-dessous d'elle ne seront pas lues.
    Et son corollaire : si je remplace la valeur contenue dans une cellule par un 0, par exemple ou par un espace ou encore simplement j'efface une valeur. Que se passe-t-il avec les cellules situées en-dessous d'elle ?
    Et si par le plus pur des hasards, il n'y a rien dans la première cellule d'une colonne ?

    Tu positionnes une couleur d'arrière-plan à ColorIndex=0 si une valeur est trouvée. Mais alors, si une valeur a été modifiée et qu'elle ne répond plus au critère de modification de la couleur, que devient la couleur d'arrière-plan qui a été modifiée ?

    Voilà quelques pistes et questions qu'il faudrait tu poser lors de la rédaction du code.

    Oui. Bon. Je sais. Je chipote . Mais quand on écrit du code informatique, il faut s'habituer à envisager toutes (ou du moins le plus possible) les possibilités que l'on peut rencontrer. Et c'est bien souvent cela qui donne le plus de travail.

    A+

  5. A voir en vidéo sur Futura
  6. #5
    maisteack

    Re : demande de correction d'une macro visual basic exel 2000

    Oh! la la ça devient compliqué mais je vais essayer !
    A+

  7. #6
    maisteack

    Re : demande de correction d'une macro visual basic exel 2000

    Bonjour
    Je crois que je vais rester comme ça , j'ai beau modifier de maniere a faire des boucles , je n'arrive pas a trouver la bonne syntaxe. je ne pratique pas assez le vba
    A+

  8. #7
    maisteack

    Re : demande de correction d'une macro visual basic exel 2000

    Bonjour Papy Octet

    Alors je peux compter sur vous pour la solution ?

    cordialement

  9. #8
    invite58a3c88f

    Re : demande de correction d'une macro visual basic exel 2000

    Bonjour,

    Je ne peu, malheureusement pas te donner le code exact car je ne suis pas sous Windows depuis bien longtemps déjà (Linux Ubuntu 1210) et je travaille avec LibreOffice.org où le langage Basic est différent de celui de Excel.
    Toutefois, je peux te donner une piste :

    Code:
    Sub Recherche()
    
    dim Col as integer  'Pour se déplacer dans les colonnes
    dim Li as integer     'Pour visiter les cellules de la colonne
    
    Col = 1  'Toujours initialiser une variable !
    Li = 1     'idem
    
    for (Col=1 to 4 )                           'On va lire les 4 premières colonnes de la feuille
        Range("F3").Select
        Question$ = ActiveCell.Value
        Cell(Col,Li).Select                       'Selection d'une cellule
        While (Not (IsEmpty(ActiveCell)))    'Ta boucle de vérification
            If ActiveCell.Value = Question$ Then
                Selection.Interior.ColorIndex = 4
            End If
            Cell(Col, Li + 1).Select        'On passe à la cellule suivante
        Wend
       End Sub
    next Col                                    'On passe a la colonne suivante.
    C'est une piste. Je n'ai pas vérifié puisque je n'ai pas le même logiciel que toi.
    A+

  10. #9
    maisteack

    Re : demande de correction d'une macro visual basic exel 2000

    Bonjour et merci pour ta contribution
    j'ai essayé le code mais ca ne tourne pas
    je continue de chercher une solution
    cordialement

  11. #10
    maisteack

    Re : demande de correction d'une macro visual basic exel 2000

    Rebonjour
    Merci de m'avoir mis sur une piste
    j'ai un peu recherché et modifié et maintenant ça tourne !
    je te joins le code
    Cordialement

    Code:
      Sub Recherche()
    
    Dim Col As Integer  'Pour se déplacer dans les colonnes
    Dim Li As Integer     'Pour visiter les cellules de la colonne
    
    Row = 1  'Toujours initialiser une variable !
    Li = 1     'idem
    
    For Li = 1 To 4                          'On va lire les 4 premières colonnes de la feuille
        Range("F3").Select
        Question$ = ActiveCell.Value
        Range("A1").Select
        ActiveCell(Row, Li).Select                    'Selection d'une cellule
        While (Not (IsEmpty(ActiveCell)))    'Ta boucle de vérification
            If ActiveCell.Value = Question$ Then
                Selection.Interior.ColorIndex = 4
            End If
            ActiveCell(Row + 1).Select    'On passe à la cellule suivante
        Wend
    
    Next Li                                    'On passe a la colonne suivante.
        
    'tempo
        Application.Wait (Now + TimeValue("00:00:03"))
        
        Range("F3").Select
        
    End Sub

Discussions similaires

  1. macro visual basic
    Par inviteec17cc1e dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 24/03/2011, 06h10
  2. gestion d'une base de données excel (Visual basic)
    Par invitebfca8e2e dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 17/03/2009, 08h54
  3. macro exel
    Par gwendoline dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 24/09/2008, 18h12
  4. Visual Basic
    Par invited280a227 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 17/09/2007, 12h45
  5. Visual Basic 3-->6
    Par invite8ebda540 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 29/04/2003, 08h35