Excel VBA fonction Find erreur '9'

Résolu
omduvfca Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
omduvfca Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je débute dans la programmation VBA, je ne trouve pas la solution à un problème de recherche de valeur dans une ligne ou une colonne d'un tableau. La macro que j'ai écrite me renvoie le message d'erreur '9' : l'indice n'appartient pas à la sélection.

D'abord, je voudrais récupérer le numéro de la ligne où se trouve mon identifiant, et ensuite le numéro de la colonne où ajouter mes valeurs par la suite. Pour la recherche de la ligne, c'est OK. Mais pas pour la recherche de la colonne, j'ai un message d'erreur "L'indice n'appartient pas à la sélection" et je ne comprends pas pourquoi.

Voici une partie de ma macro

Dim CelluleCourante As Range
Dim nuance As String, id As String
Dim reponse As Range

Sheets("Feuil2").Select
Set CelluleCourante = ActiveSheet.Range("A1").End(xlDown)
CelluleCourante.Select

Do While Not IsEmpty(CelluleCourante) = True
CelluleCourante.Select
id = CelluleCourante.Value
nuance = CelluleCourante.Offset(0, 3).Value
.....

Sheets("Matrice").Select
Set reponse = ActiveSheet.Range("A1").CurrentRegion.Find(id, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
If Not reponse Is Nothing Then
ligne = reponse.Row
End If
Set reponse = ActiveSheet.Range("A1").CurrentRegion.Find(nuance, LookIn:=xlValue, LookAt:=xlWhole, SearchOrder:=xlByColumns)
If Not reponse Is Nothing Then
colonne = reponse.Column
End If

....

Sheets("Feuil2").Select
Set CelluleCourante = CelluleCourante.Offset(1, 0)
Loop

Le message d'erreur ("L'indice n'appartient pas à la sélection") pointe sur la ligne ci-dessous

Set reponse = ActiveSheet.Range("A1").CurrentRegion.Find(nuance, LookIn:=xlValue, LookAt:=xlWhole, SearchOrder:=xlByColumns)

Je suis coincé depuis plusieurs heures sans trouver de réponses sur les forums adaptées à mon cas.

Merci par avance de votre aide

Cdlt

2 réponses

  1. Utilisateur anonyme
     
    Bonjour,

    Je n'ai pas tout compris mais as-tu essayé comme ceci :

        Do While Not IsEmpty(CelluleCourante) = True
            CelluleCourante.Select
            Adresse = CelluleCourante.Address
            id = CelluleCourante.Value
            nuance = CelluleCourante.Offset(0, 3).Value
            '.....
            Sheets("Matrice").Select
            Cells.Select
            Set reponse = Selection.Find(id, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
            If Not reponse Is Nothing Then
                Ligne = reponse.Row
                Colonne = reponse.Column
            End If
            '....
            MsgBox Ligne & vbCrLf & Colonne
            
            Sheets("Feuil2").Select
            Set CelluleCourante = CelluleCourante.Offset(1, 0)
        Loop
    


    l'instruction :
    Set CelluleCourante = ActiveSheet.Range("A1").End(xlDown)

    prend la dernière cellule remplie, donc à la fin de la boucle :

    Sheets("Feuil2").Select
    Set CelluleCourante = CelluleCourante.Offset(1, 0)

    incrémenter la CelluleCourante, revient à attérir dans une cellule vide,
    donc la boucle ne s'effectue qu'une seule fois.

    Cdt

    Lupin
    0
  2. omduvfca Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
     
    Bonjour Lupin et merci pour ta réponse. Je ne suis pas certain d'avoir compris cependant.

    Désolé si mon message est un peu confus. Je vais essayer de clarifier mon problème. Je voudrais d'une part retrouver la ligne du tableau correspondant à mon id et, d'autre part la colonne dans le tableau qui correspond à mon paramètre 'nuance'. Ensuite je colle les valeurs souhaitées dans la cellule idoine du tableau.

    En relisant mon post, je pense que le bug vient des paramètres de Find. Il manque un s à xlValue dans LookIn:=xlValue.

    Avec cette correction, le code fonctionne bien

    Merci beaucoup pour l'astuce
    0