Excel VBA fonction Find erreur '9' [Résolu/Fermé]

Signaler
Messages postés
2
Date d'inscription
jeudi 24 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
-
Messages postés
2
Date d'inscription
jeudi 24 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012
-
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


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
Messages postés
2
Date d'inscription
jeudi 24 mai 2012
Statut
Membre
Dernière intervention
24 mai 2012

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