VBA vlookup

Résolu/Fermé
Dmouha - 16 déc. 2010 à 15:29
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 23 déc. 2010 à 01:20
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

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
16 déc. 2010 à 18:03
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.
0
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?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
17 déc. 2010 à 09:51
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" & ")"
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 17/12/2010 à 12:54
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
0
J'ai enlevé toutes les infos confidentiels
http://www.cijoint.fr/cjlink.php?file=cj201012/cijRpEXWUA.xls

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

Merci de ton aide
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 20/12/2010 à 18:00
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
0
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
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 20/12/2010 à 18:27
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
0
Merci Franchement utile ce que j'ai appris je pense que je ne ferais plus cette erreur!
Encore merci!!
0
Dmouha Messages postés 4 Date d'inscription jeudi 19 août 2010 Statut Membre Dernière intervention 22 décembre 2010
22 déc. 2010 à 10:58
Merci Franchement utile ce que j'ai appris je pense que je ne ferais plus cette erreur!
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
23 déc. 2010 à 01:20
Bonnes Fêtes et au plaisir de te relire sur le forum
0