VBA vlookup

Résolu
Dmouha -  
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   -
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 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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
Dmouha
 
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 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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
Dmouha
 
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 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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
Dmouha
 
J'ai enlevé toutes les infos confidentiels
http://www.cijoint.fr/cjlink.php?file=cj201012/cijRpEXWUA.xls

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

Merci de ton aide
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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
Dmouha
 
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 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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
Dmouha
 
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   Statut Membre Dernière intervention  
 
Merci Franchement utile ce que j'ai appris je pense que je ne ferais plus cette erreur!
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonnes Fêtes et au plaisir de te relire sur le forum
0