Fonction recherchev vba erreur indice

Fonction recherchev vba erreur indice - VB/VBA/VBS - Programmation

Marsh Posté le 06-11-2018 à 21:17:45    

Bonjour à tous,
 
Je suis un novice en vba mais j'essaye de faire au mieux dans mes macros. Je me suis beaucoup aider de ce forum mais la je bloque sur ma fonction qui me dit qu'il n'y a pas d'indice.
 
Est-ce que quelqu'un pourrait m'aider svp ? Merci
 
Mon erreur est sur cette ligne :
                .Range("P" & destinationRow1).Value = Application.WorksheetFunction.VLookup(Sheets("C21" ).Value, WBK.Sheets("Cédule" ).Range("A20:L330" ), 8, False)
 
Ci-dessous la fonction :
 

Code :
  1. Private Function Importer2(Cédule As String, xlsx As String) As Variant()
  2. Dim objShell As Object, objFolder As Object
  3. Dim Temp(), i As Long
  4. Dim fldr As FileDialog
  5. Dim folderPath As String
  6. Dim Chemin As String, fichier As String
  7.    
  8.     Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
  9.     With fldr
  10.         .Title = "Choisir un dossier"
  11.         .AllowMultiSelect = False
  12.         .InitialFileName = "mon lien"
  13.         .Show
  14.        
  15.         folderPath = .SelectedItems(1)
  16.     End With
  17.    
  18.     Dim XL As Excel.Application
  19.     Dim WBK As Excel.Workbook
  20.    
  21.     Dim destinationRow1 As Integer
  22.     Dim formulaRef As String
  23.     Dim refValue As String
  24.     destinationRow1 = 24
  25.     fichier = Dir(folderPath & "\*." & xlsx)
  26.     Set XL = CreateObject("Excel.Application" )
  27.     Do While Len(fichier) > 0
  28.         ' Open file with excel to read value
  29.         Set WBK = XL.Workbooks.Open(folderPath & "\" & fichier)
  30.        
  31.         ' refValue = WBK.Sheets("Cédule" ).Range("A1" ).value
  32.    
  33.         If fichier <> ThisWorkbook.Name Then
  34.             With Feuil4
  35.                 .Range("P" & destinationRow1).Value = Application.WorksheetFunction.VLookup(Sheets("C21" ).Value, WBK.Sheets("Cédule" ).Range("A20:L330" ), 8, False)
  36.             End With
  37.             fichier = Dir()
  38.             destinationRow1 = destinationRow1 + 3
  39.         End If
  40.         WBK.Close (False)
  41.         Set WBK = Nothing
  42.     Loop
  43.     XL.Quit
  44.     Set XL = Nothing
  45.         Importer2 = Temp
  46.     ' End If
  47. End Function


 
Merci.


Message édité par ulrig le 07-11-2018 à 14:49:07
Reply

Marsh Posté le 06-11-2018 à 21:17:45   

Reply

Marsh Posté le 09-11-2018 à 15:12:35    

Petit up personne ne voit le problème d'indice dans ma fonction svp ?

Reply

Marsh Posté le 09-11-2018 à 18:11:38    

Bonjour,

 

Je ne comprends pas ce passage :

Code :
  1. With Feuil4
  2.             .Range("P" & destinationRow1).Value = Application.WorksheetFunction.VLookup(Sheets("C21" ).Value, WBK.Sheets("Cédule" ).Range("A20:L330" ), 8, False)
  3. End With
 

D'où sort le Feuil4 ? C'est une variable ?
De même qu'est-ce que le Sheets("C21" ) ? Parce que pour moi, là tu essayes de travailler sur une feuille qui s'appelle C21 et je ne vois alors pas à quoi correspond la propriété Value dans ce cas de figure.

Message cité 1 fois
Message édité par MaybeEijOrNot le 09-11-2018 à 18:12:11

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 12-11-2018 à 16:44:44    

MaybeEijOrNot a écrit :

Bonjour,
 
Je ne comprends pas ce passage :

Code :
  1. With Feuil4
  2.             .Range("P" & destinationRow1).Value = Application.WorksheetFunction.VLookup(Sheets("C21" ).Value, WBK.Sheets("Cédule" ).Range("A20:L330" ), 8, False)
  3. End With


 
D'où sort le Feuil4 ? C'est une variable ?
De même qu'est-ce que le Sheets("C21" ) ? Parce que pour moi, là tu essayes de travailler sur une feuille qui s'appelle C21 et je ne vois alors pas à quoi correspond la propriété Value dans ce cas de figure.


 
Merci MaybeEijOrNot d'avoir répondu, désolé je n'avais pas de connexion internet pendant le week end pour te répondre.  
Pour moi Feuil4 signifie la feuille dans laquelle je veux avoir ma réponse à la recherchev.  
Dans ma compréhension je pensais que le premier critère soit sheets("C21" ).value était la valeur recherché. Car dans ma"feuil4" dans la cellule C21 c'est la que j'ai mon critère.  
Si cela peu aider.  
 
Merci bien en tout cas d'avoir pris le temps de répondre

Reply

Marsh Posté le 12-11-2018 à 19:07:37    

Pour "Feuil4" je ne savais pas qu'on pouvait faire ça comme ça, personnellement j'éviterai. Mieux vaut rester sur la syntaxe classique :

Code :
  1. With Workbooks("Classeur1" ).Sheets("Feuil1" )


 
Le premier critère est surement la valeur recherché (à vérifier) mais ce que je ne comprends pas c'est le Sheets("C21" ) qui signifie la feuille nommée "C21" et non la cellule C21.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 12-11-2018 à 19:08:18    

ulrig a écrit :


 
Merci MaybeEijOrNot d'avoir répondu, désolé je n'avais pas de connexion internet pendant le week end pour te répondre.  
Pour moi Feuil4 signifie la feuille dans laquelle je veux avoir ma réponse à la recherchev.  
Dans ma compréhension je pensais que le premier critère soit sheets("C21" ).value était la valeur recherché. Car dans ma"feuil4" dans la cellule C21 c'est la que j'ai mon critère.  
Si cela peu aider.  
 
Merci bien en tout cas d'avoir pris le temps de répondre


 
En me faisant par que Sheets("C21" ) n'était pas bon j'ai réussi à faire sortir mon premier critère voulu en modifiant comme ceci :
 

Code :
  1. .Range("P" & destinationRow1).Value = Application.WorksheetFunction.VLookup(Sheets("WebAdi 2" ).Range("C21" ).Value, WBK.Sheets("Cédule" ).Range("A20:L330" ), 8, False)


 
Donc maintenant j'avais à faire exécuter mon premier critère de la formule vlookup en regardant mon espion. Sauf que la je bloque sur ma partie :

Code :
  1. WBK.Sheets("Cédule" ).Range("A20:L330" )


 
Pour moi WBK correspond au fichier que la macro va ouvrir pour aller chercher les données colonnes pour la recherchev soit :

Set WBK = XL.Workbooks.Open(folderPath & "\" & fichier)


 
Je pense que je dois avoir faire une erreur de syntaxe sur ma 2e partir de formule mais je ne vois pas laquelle. J'ai le message suivant : Impossible de lire la propriété VLookup de la classe WorksheetFunction.
 
Merci
 
 
 
 

Reply

Marsh Posté le 12-11-2018 à 19:20:01    

Normalement, si tu as bien un classeur qui s'ouvre c'est que ça doit être bon au niveau de la syntaxe.
 
Essaye en remplaçant :

Code :
  1. WBK.Sheets("Cédule" ).Range("A20:L330" )


Par une plage se trouvant dans le même classeur (tu n'as qu'à importer ta feuille dans ton premier classeur le temps de faire le test) car je ne sais pas si tu peux aller chercher dans un autre classeur comme ça. Si le problème vient de là alors il faudra ruser mais j'ai déjà une idée simple en tête.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 12-11-2018 à 19:45:26    

MaybeEijOrNot a écrit :

Normalement, si tu as bien un classeur qui s'ouvre c'est que ça doit être bon au niveau de la syntaxe.
 
Essaye en remplaçant :

Code :
  1. WBK.Sheets("Cédule" ).Range("A20:L330" )


Par une plage se trouvant dans le même classeur (tu n'as qu'à importer ta feuille dans ton premier classeur le temps de faire le test) car je ne sais pas si tu peux aller chercher dans un autre classeur comme ça. Si le problème vient de là alors il faudra ruser mais j'ai déjà une idée simple en tête.


 
Encore merci MaybeEijOrNot.
 
Je viens d'importer ma feuille "Cédule" dans le fichier ou se trouve la macro. et j'ai changé la formule pour cela :
 

Code :
  1. .Range("P" & destinationRow1).Value = Application.WorksheetFunction.VLookup(Sheets("WebAdi 2" ).Range("C21" ).Value, Sheets("Cédule" ).Range("A20:L330" ), 8, False)


 
Pour moi j'avais juste à enlever le WBK.
Mais quand je lance la macro j'ai toujours une erreur d'exécution '1004' : Impossible de lire la propriété VLookup de la classe WorksheetFunction.
Et le débogage me renvoi toujours sur la même ligne que dessus.

Reply

Marsh Posté le 12-11-2018 à 20:56:02    

Peux-tu faire un nouveau classeur et mettre cette macro :

 
Code :
  1. Sub test()
  2.     With ActiveWorkbook
  3.         .Sheets("Feuil2" ).Cells(1, 2).Value = Application.WorksheetFunction.VLookup(.Sheets("Feuil2" ).Cells(1, 1).Value, .Sheets("Feuil1" ).Range("A1:A5" ), 1, False)
  4.     End With
  5. End Sub


Dans "Feuil1" du classeur tu tapes de 1 à 5 dans les cellules allant de A1 à A5.
Tu ajoutes une nouvelle feuille (automatiquement nommée "Feuil2" normalement).
Tu tapes 3 en A1 dans cette nouvelle feuille, tu lances la macro.

 

Tu obtiens 3 dans la cellule A2 de la Feuil2 ou une erreur ?

Message cité 1 fois
Message édité par MaybeEijOrNot le 12-11-2018 à 20:56:10

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 12-11-2018 à 21:14:43    

MaybeEijOrNot a écrit :

Peux-tu faire un nouveau classeur et mettre cette macro :
 

Code :
  1. Sub test()
  2.     With ActiveWorkbook
  3.         .Sheets("Feuil2" ).Cells(1, 2).Value = Application.WorksheetFunction.VLookup(.Sheets("Feuil2" ).Cells(1, 1).Value, .Sheets("Feuil1" ).Range("A1:A5" ), 1, False)
  4.     End With
  5. End Sub


Dans "Feuil1" du classeur tu tapes de 1 à 5 dans les cellules allant de A1 à A5.
Tu ajoutes une nouvelle feuille (automatiquement nommée "Feuil2" normalement).
Tu tapes 3 en A1 dans cette nouvelle feuille, tu lances la macro.
 
Tu obtiens 3 dans la cellule A2 de la Feuil2 ou une erreur ?


 
Je viens de le faire et j'obtiens 3 dans la cellule B1 de la Feuil 2

Reply

Marsh Posté le 12-11-2018 à 21:14:43   

Reply

Marsh Posté le 12-11-2018 à 21:35:13    

Par rapport à mon problème je viens de recréer un fichier excel avec juste mon onglet Webadi 2.
La macro a fonctionné. Je n'ai rien changé d'autres que ce que tu m'as fais corrigé. Sauf que la macro après avoir passer une trentaine de fichier se met en erreur  
"une erreur d'exécution '1004' : Impossible de lire la propriété VLookup de la classe WorksheetFunction. "
 
Je ne comprend pas du tout pourquoi alors que le fichier suivant à la même trame.

Reply

Marsh Posté le 12-11-2018 à 21:54:15    

Et en essayant manuellement la fonction dans Excel avec le fichier pour lequel ça se met à déconner ça donne quoi ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 13-11-2018 à 20:32:40    

Allo Maybe,
 
Je viens d'essayer et cela fonctionne. Je pense que j'ai compris d'où vient le problème. Il y a un fichier sur le réseau qui s'appel pareil sauf que c'est une v2 et on dirait qu'il ne veut pas fonctionner car je prend un critère dedans qui à le même nom. Je vais insérer une formule avec si erreur continue.  
Merci en tout cas pour l'instant je peux continuer mais tu m'as bien aider sur ma formule vlookup :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed