Probléme de syntaxe sur vlookup

Résolu
renoncule62 Messages postés 94 Statut Membre -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je me permet de vous soumettre mon soucis de syntaxe sur un vlookup dans lequel la donnée cherchée est le texte d'un textbox dans un userform et dont la matrice se trouve dans un autre classeur ouvert . Voici la syntaxe qui ne fonctionne pas et me renvoie "erreur d'exécution 9, l'indice n'appartient pas à la sélection". j'ai fait des recherches sur les moteurs de recherche mais en vain.

1.If Application.VLookup(Userform1.TextBox1.Value, Workbooks("C:\mon dossier\mon sous dossier\mon fichier.xls" ).Sheets("Feuil1" ).Range("b1:d131" ), 3, False) = "NOK" Then
2.MsgBox "Pas bon"
3.Else
4.MsgBox "bon"
5.End If


merci de votre aide

6 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Ce n'est pas un problème de syntaxe mais un problème d'utilisation de Vlookup :
    Le fichier source doit être ouvert (et dans ce cas le nom ne comprend pas le chemin d'accès)
    0
  2. renoncule62 Messages postés 94 Statut Membre 2
     
    Merci pour ton intervention Patrice33740, effectivement ça marche maintenant parc contre je ne parviens pas à finaliser mon code pour que ça marche. Voila ce que je veux faire:
    j'ai 2 fichiers ouverts:
    monfichier1ouvert depuis lequel j'apelle la macro via l'userform1
    et monfichier2ouvert ou s'execute la rechercheV (vlokup)
    If Application.VLookup(userform1.TextBox2.Value, Workbooks("monfichier2ouvert.xls").Sheets("Feuil1").Range("b1:g131"), 5, False) <> Workbooks("monfichier2ouvert.xls").Sheets("Feuil1").Cells(4, 9).Value Then
    validation.Show
    

    jusqu' à là ça va.
    dans l'userform "validation" 2 bouton : non= unload me et oui ou je souhaite rendre égales les valeurs de Range("b1:g131"), 5, False et Cells(4, 9).
    je veux modifier la valeur en ("b1:g131"), 5 en y copiant la valeur de Cells(4, 9).

    voici ce que j'ai essayé mais qui ne fonctionne pas et me renvoie:"N°1004 Erreur définie par l'application ou par l'objet"

    quand clic sur bouton oui
    Private Sub boutonoui_Click()
    Application.VLookup(userform1.TextBox2.Value, Workbooks("monfichier2ouvert.xls").Sheets("Feuil1").Range("b1:g131"), 5, False) = Workbooks("monfichier2ouvert.xls").Sheets("Feuil1").Cells(4, 9).Value
    Unload Me
    End Sub
    

    Encore une fois, je ne suis pas expert en vba (peut-être complétement à côté de la bonne syntaxe), merci encore pour votre aide.
    0
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Vlookup renvoi une valeur située dans une matrice, pas son emplacement !

    Tu peux utiliser Find.
    Par exemple :
    Private Sub boutonoui_Click()
    Dim rng As Range
    Dim cel As Range
    
      'définir la plage de recherche
      Set rng = Workbooks("monfichier2ouvert.xls").Sheets("Feuil1").Range("b1:b131")
      'Rechercher l'information dans la colonne
      Set cel = rng.Find(userform1.TextBox2.Value, lookat:=xlWhole)
      'Modifier la valeur de la 5ème colonne
      cel.Offset(0, 4).Value = Workbooks("monfichier2ouvert.xls").Sheets("Feuil1").Cells(4, 9).Value
    
      Unload Me
    
    End Sub
    
    0
  4. renoncule62 Messages postés 94 Statut Membre 2
     
    Merci beaucoup Patrice33740 pour ce retour efficasse avec les explicatifs,
    ça marche nickel, même si je ne connais pas les fontionnalités de Dim rng As Range et Dim cel As Range mais je chercherais à comprendre.
    puis-je mettre une ligne de code pour ouvrir un msg box au cas ou la valeur de "userform1.TextBox2.Value" ne serait pas trouvée stp?

    Merci encore...
    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 783
     
    Avec le test :
    Private Sub boutonoui_Click()
    Dim rng As Range
    Dim cel As Range
    
      'définir la plage de recherche
      Set rng = Workbooks("monfichier2ouvert.xls").Sheets("Feuil1").Range("b1:b131")
      'Rechercher l'information dans la colonne
      Set cel = rng.Find(userform1.TextBox2.Value, lookat:=xlWhole)
      'Si la valeur n'est pas trouvée ...
      If cel Is Nothing Then
        '... afficher un message d'erreur et rendre la main
        MsgBox "la valeur cherchée : " & vbCr & _
               userform1.TextBox2.Value & vbCr & _
               "n'a pas été trouvée", vbCritical
        Exit Sub
      End If
      'Modifier la valeur de la 5ème colonne
      cel.Offset(0, 4).Value = Workbooks("monfichier2ouvert.xls").Sheets("Feuil1").Cells(4, 9).Value
    
      Unload Me
    
    End Sub
    
    0
  7. renoncule62 Messages postés 94 Statut Membre 2
     
    Bonjour,
    Merci pour tout, c'est exactement ce que je cherchais à faire,
    c'est sympa...
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      De rien, au plaisir de te relire sur le Forum
      0