VBA vlookup

Résolu
Bonjour,

J'ai un pb en excel est je ne comprends pas d'ou il vien dans toutes mes cellules j'ai N/A voici mon code:
Merci

Sub filer_name_collect()

arret = Sheets("vtest").Range("E3") - 1

For snap = Sheets("vtest").Range("F4") - Sheets("vtest").Range("D4") To Sheets("vtest").Range("F4") - 1

Sheets("VQS").Range("G" & snap).Formula = "=vlookup(" & LTrim(Str(snap)) & "," & "$A$8:$G$10" & ",7" & ")"

Next

End Sub

12 réponses

  1. Bonjour,

    Ce code fonctionne parfaitement, bien qu'il me semble très bizarre :selon les valeurs de F4 et D4, il pourrait générer des référence circulaires !
    Comme on n'a aucune information sur ces valeurs, je considère que tu as pris toutes les précautions pour que cela ne se produise pas.

    Les #NA sont normaux, ils signifient simplement que l'information cherchée ne se situe pas dans la plage $A$8:$A$10 (ou que la plage n'est triée dans l'ordre).

    Un exemple sur http://cijoint.fr permettrait de mieux comprendre ce que tu veux faire.
    1. OK le le problème c est que les données ne sont pas triées existe - il un équivalent pour les données non triées?
      1. Bonjour

        La formule que tu utilise recherche une valeur approchée dans une liste triée, Excel n'offre pas de fonction de recherche d'une valeur approchée dans une liste non triée
        Par contre il peut rechercher une valeur exacte dans une liste non triée avec la même fonction et une syntaxe plus complète :

        Sheets("VQS").Range("G" & snap).Formula = "=vlookup(" & LTrim(Str(snap)) & "," & "$A$8:$G$10" & ",7, FALSE" & ")"
        

        Pour ma part je préfère utiliser la syntaxe locale (le français) équivalente :

        Sheets("VQS").Range("G" & snap).FormulaLocal = "=RECHERCHEV(" & LTrim(Str(snap)) & ";" & "$A$8:$G$10" & ";7; FAUX" & ")"
        1. Bonjour,

          Mon gros problème c est que j'ai aucune valeur numérique. Mon but c est de rechercher deux valeurs litérales si elle sont égales je prends la valeur de 7 case a côté et sa marche pour une petite plage et quand la plage s'aggrandit sa ne marche plus
          1. Re,

            Au risque de me répéter, met ton fichier (expurgé des renseignement confidentiels) sur http://cijoint.fr. et met le lien dans ton prochain post.
            Cela nous permettra de mieux comprendre ce que tu veux faire.

            Cordialement
            Patrice
            1. J'ai enlevé toutes les infos confidentiels
              http://www.cijoint.fr/cjlink.php?file=cj201012/cijRpEXWUA.xls

              Merci de ton aide
              1. http://www.cijoint.fr/cjlink.php?file=cj201012/cijRpEXWUA.xls

                Merci de ton aide
                1. Re,

                  Essaie de remplacer ton code par celui-ci :
                  Sub filer_name_collect()  
                  
                      ' Cette fonction permet de remplir automatiquement  
                      ' le noom des filers dans le tableau qtrees  
                      ' Il utilise le tableau volume pour se reperer  
                      ' (=RECHERCHEV(A19;$A$7:$M$14;7:FAUX) est la formule utilisée)  
                      '  
                         
                       ' Quand le trableau de volumes ne deborde pas  
                        
                      Application.EnableEvents = False  
                        
                      If Sheets("vtest").Range("D3").Value <= 7 Then  
                          For snap = Sheets("vtest").Range("E4") - Sheets("vtest").Range("D4") To Sheets("vtest").Range("E4") - 1  
                              Sheets("VQS").Range("G" & snap).FormulaLocal = "=RECHERCHEV(A" + CStr(snap) + ";$A$8:$G$14;7;FAUX)"  
                          Next  
                      Else  
                          arret = Sheets("vtest").Range("E3") - 1  
                          For snap = Sheets("vtest").Range("F4") - Sheets("vtest").Range("D4") To Sheets("vtest").Range("F4") - 1  
                              Sheets("VQS").Range("G" & snap).FormulaLocal = "=RECHERCHEV(A" + CStr(snap) + ";$A$8:$G$" + CStr(arret) + ";7;FAUX)"  
                          Next  
                      End If  
                        
                      Application.EnableEvents = True
                        
                  End Sub


                  Cordialement
                  Patrice
                  1. Sa marche impecable peux tu m'expliquer quel était le problème. Comme ça je ne j'aurais appris une chose! aujourd'hui et Vraiment merci
                    1. Bonjour,

                      La formule à utiliser est du type :
                      =RECHERCHEV(A55;$A$8:$G$50;7;FAUX)

                      Dans ton exemple il y avait :
                      =RECHERCHEV(A55;A8:G50;7)

                      Il est indispensable d'utiliser ;FAUX dans la formule pour trouver la correspondance exacte de la valeur cherchée dans une zone où les valeurs ne sont pas triées.
                      Quand on omet cet argument, les valeurs de la première colonne de la zone de recherche doivent être classées en ordre croissant, sinon, il se peut que RECHERCHEV ne renvoie pas la bonne valeur.

                      Il est préférable d'utiliser $A$8:$G$50 au lieu de A8:G50, cela fixe la zone de recherche dans le cas ou tu devrais étendre la formule manuellement.

                      D'autre part, pour éviter que cette procédure interfère avec Worksheet_Change, il vaut mieux désactiver les évènements pendant son exécution en mettant :
                      Application.EnableEvents = False
                      au début de la procédure et en terminant par :
                      Application.EnableEvents = True

                      ATTENTION : cette dernière ligne est érronée dans mon code, il faut mettre = True au lieu de = False

                      Cordialement
                      Patrice
                      1. Merci Franchement utile ce que j'ai appris je pense que je ne ferais plus cette erreur!
                        Encore merci!!
                    2. Merci Franchement utile ce que j'ai appris je pense que je ne ferais plus cette erreur!