VBA vlookup

Résolu
Dmouha -  
Patrice33740 Messages postés 8400 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

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
  2. 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
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

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

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

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