Problème avec HLookup (RechercheH)

Résolu/Fermé
Marion16 - 15 sept. 2010 à 15:46
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 - 17 sept. 2010 à 16:00
Bonjour,

Voilà quelques jours que je galère sur un code et notamment la fonction HLookup.
Je n'arrive pas à voir le problème.


Pour le contexte : sur l'onglet LISTE(2) je récupère la valeur que je dois rechercher dans un tableau (B8:G10) dans un autre onglet.
La valeur récupère est ensuite mis dans une cellule dans l'onglet LISTE (2).


Le bug arrive sur la ligne :
Indice = Application.WorksheetFunction.HLookup(Critere, Range("Plage"), 3)



For Each Cellule In Selection
numero = Cellule.Value
ligne = Cellule.Row

Dim Plage As Range
Dim Indice As Variant


Worksheets("LISTE (2)").Select
Critere = Range("D" & ligne).Value


Worksheets(numero).Select
Set Plage = Range(Cells(8, 2), Cells(10, 7))


Indice = Application.WorksheetFunction.HLookup(Critere, Range("Plage"), 3)

Worksheets("LISTE (2)").Select
Range("E" & ligne).Value = Indice

4 réponses

Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
Modifié par Le Pingou le 15/09/2010 à 21:29
Bonjour,
Pouvez-vous préciser le message d'erreur ?
Si possible, le fichier sur https://www.cjoint.com/ se sera plus facile pour vous venir en aide!
Salutations.
Le Pingou
0
Bonjour Le Pingou

Le message précis de l'erreur est
"Erreur d'exécution '1004'
Impossible de lire la propriété HLookup de la classe WorksheetFUnction.


Comme demandé, je vous joint le lien du fichier https://www.cjoint.com/?jqjj5a30XM
Le module qui a un bug est le module 5 !
Le but est de remplir les colonnes C à F de LISTE(2) à l'aide des autres onglets (à partir de l'onglet 1000).
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
16 sept. 2010 à 15:20
Bonjour,
Je vous propose de modifier votre code comme suit :
    Dim Plage As Variant 'Range remplacer par Variant
    Dim Indice As Variant
             
'    Worksheets("LISTE (2)").Select  (A supprimer)
Critere = Worksheets("LISTE (2)").Range("D" & ligne).Value    
'    Worksheets(numero).Select  (A supprimer)
Plage = Worksheets(numero).Range(Cells(8, 2), Cells(10, 7)).Value    
    MsgBox Critere
    'MsgBox Plage.Address        
Indice = Application.WorksheetFunction.HLookup(Critere, Plage, 3) 

0
Bonjour,

je vous remercie de votre réponse et de vous être attaché au problème.

malheureusement le code ne passe pas. Le problème se situe sur la ligne
Plage = Worksheets(numero).Range(Cells(8,2),Cells(10,7).Value
Il dit ne pas reconnaître l'objet.

Néanmoins, j'ai réussi à résoudre mon problème avec une autre façon de faire.
En effet, une partie mon code avant ce problème me permettait de récupérer la colonne voulue. Je n'avais plus qu'à indiquer la ligne correspondant.

Je mets mon code complet pour cette macro puisqu'il peut être une alternative à Hlookup en cas de problème.

Encore merci de vous être penché sur mon problème.




Sub formule_recherche()

Dim numero As String

' Selection de la colonne contenant les numéros des fiches
Worksheets("LISTE (2)").Select
Range("A3").Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select

'Boucle pour passer en revue toutes les cellules sélectionnées auparavant
'Mets en mémoire le numéro de la fiche et de la ligne
For Each Cellule In Selection
numero = Cellule.Value
ligne = Cellule.Row


'Remplir la colonne C en indiquant l'entreprise qui fournit la fiche produit

Dim Entreprise
Worksheets(numero).Select
Entreprise = Range("B4").Value
Worksheets("LISTE (2)").Select
Range("C" & ligne).Value = Entreprise


'Remplir la colonne D avec la date la plus récente
'Remplir la colonne E avec l'indice correspondant
'Remplir la colonne F avec le résultat correspondant
'Trouve la cellule vide dans la plage B8:G8 pour connaître la dernière date de réponse
'Code pouvant remplacer la fonction HLookup

Dim i
Worksheets(numero).Select
For i = 2 To 8 Step 1
If Cells(8, i).Value = "" Then
MaDate = Cells(8, i - 1).Value
MsgBox (MaDate)
Indice = Cells(10, i - 1).Value
MsgBox (Indice)
Resultat = Cells(9, i - 1).Value
MsgBox (Resultat)
Worksheets("LISTE (2)").Select
Range("D" & ligne).Value = MaDate
Range("E" & ligne).Value = Indice
Range("F" & ligne).Value = Resultat
Exit For
End If
Next
Next
End Sub
0
Le Pingou Messages postés 12048 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
17 sept. 2010 à 16:00
Bonjour,
Merci pour l'information.
Au passage , c'est étonnant se problème de code, car je l'ai testé chez moi et c'est parfait.
Salutations.
Le Pingou
0