Problème avec HLookup (RechercheH)

Résolu
Marion16 -  
Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    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
  2. Marion16
     
    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
  3. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
     
    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
  4. Marion16
     
    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
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
       
      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