Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2956 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Fonction recherchev vba erreur indice

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction recherchev vba erreur indice

n°2323716
ulrig
Posté le 06-11-2018 à 21:17:45  profilanswer
 

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
mood
Publicité
Posté le 06-11-2018 à 21:17:45  profilanswer
 

n°2323871
ulrig
Posté le 09-11-2018 à 15:12:35  profilanswer
 

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

n°2323897
MaybeEijOr​Not
but someone at least
Posté le 09-11-2018 à 18:11:38  profilanswer
 

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.
n°2323998
ulrig
Posté le 12-11-2018 à 16:44:44  profilanswer
 

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

n°2324009
MaybeEijOr​Not
but someone at least
Posté le 12-11-2018 à 19:07:37  profilanswer
 

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.
n°2324010
ulrig
Posté le 12-11-2018 à 19:08:18  profilanswer
 

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
 
 
 
 

n°2324012
MaybeEijOr​Not
but someone at least
Posté le 12-11-2018 à 19:20:01  profilanswer
 

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.
n°2324013
ulrig
Posté le 12-11-2018 à 19:45:26  profilanswer
 

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.

n°2324019
MaybeEijOr​Not
but someone at least
Posté le 12-11-2018 à 20:56:02  profilanswer
 

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.
n°2324020
ulrig
Posté le 12-11-2018 à 21:14:43  profilanswer
 

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

mood
Publicité
Posté le 12-11-2018 à 21:14:43  profilanswer
 

n°2324022
ulrig
Posté le 12-11-2018 à 21:35:13  profilanswer
 

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.

n°2324023
MaybeEijOr​Not
but someone at least
Posté le 12-11-2018 à 21:54:15  profilanswer
 

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.
n°2324089
ulrig
Posté le 13-11-2018 à 20:32:40  profilanswer
 

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 :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Fonction recherchev vba erreur indice

 

Sujets relatifs
[Java] Aide débutant JavaArret fonction VBA
Besoin d'aide pour améliorer ma signature mail svp.Aide sur expression régulière
aide à la compilationfonction pour gerer les erreurs d'exception
incrémentation auto vba excel en fonction de plusieurs cellulesAide VBA userforme
Aide sur une evaluation de l'ecole 42aide OpenOffice.org utiliser la fonction "RECHERCHEV"
Plus de sujets relatifs à : Fonction recherchev vba erreur indice


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR