Gérer des résultats multiples lors d'une recherche
Bonjour à tous et heureux de rejoindre ce forum de passionnés,
Voila mon problème, j'aimerai créer une macro de recherche.
Pour mieux comprendre et simplifier :
Imaginons une dizaine de feuille. Toutes, sauf la première, possèdent le nom d'un fruit dans la case A1, et je souhaite me rendre à la page qui contient "Raisin" en A1.
Je crée une macro qui fonctionne avec For / Next, je tape le nom du fruit que je recherche dans la case prévue à cet effet situé sur la première feuille, et la macro m’emmène bien à la page désirée. Tout fonctionne parfaitement.
Le problème arrive lorsque plusieurs pages contiennent le mot "Raisin". J'ignore concrètement comment la macro interprète ce résultat mais il semblerait qu'elle m’emmène directement à la dernière page qui possède le mot "Raisin".
J'aimerais donc avoir la possibilité de "manipuler" ces multiples résultats, lorsqu'ils interviennent, en proposant par exemple à l'utilisateur de se rendre à la page souhaitée parmi celles qui comprendrait le mot "Raisin". Je suppose pour ça qu'il faut passer par une boite de dialogue proposant les différentes pages en tant que boutons, mais j'ignore comment m'y prendre.
Je vous remercie d'avance pour votre aide.
Bonjour,
Une piste à adapter :
Sub ActiverFeuille()
Dim Fe As Worksheet
Dim Noms As String
Dim Liste As String
Dim Fruit As String
Dim I As Integer
Dim Choix
'le nom du fruit recherché est en A1 de la feuille "Feuil1"
Fruit = Worksheets("Feuil1").Range("A1").Value
For Each Fe In Worksheets
'évite la feuille qui contient le fruit recherché
If Fe.Name <> "Feuil1" Then
'concatène les noms des feuilles
If Fe.Range("A1").Value = Fruit Then Noms = Noms & Fe.Name & ";"
End If
Next Fe
'si pas trouvé, fin...
If Noms = "" Then Exit Sub
'suppression du point virgule de fin
Noms = Left(Noms, Len(Noms) - 1)
'si plus d'une feuille...
If UBound(Split(Noms, ";")) > 1 Then
'prépare pour le message
For I = 0 To UBound(Split(Noms, ";"))
Liste = Liste & Split(Noms, ";")(I) & " (Index n° " & I + 1 & ")" & vbCrLf
Next I
'demande quel index correspondant dans la liste pour l'activation de la feuille
Choix = InputBox("Il y a " & UBound(Split(Noms, ";")) + 1 & " feuilles qui possèdent le fruit '" & Fruit & "' !" & _
vbCrLf & _
Liste & _
vbCrLf & _
"Veuillez indiquer son index !", "Choix de feuille")
'si aucun choix (champ vide ou annuler) ou un choix ou un choix hors bornes, fin...
If Choix = "" Then Exit Sub
If CInt(Choix) < 1 Or CInt(Choix) > UBound(Split(Noms, ";")) + 1 Then Exit Sub
'activation de la feuille voulue
Worksheets(Split(Noms, ";")(Choix - 1)).Activate
Else
'si une seule feuille
Worksheets(Split(Noms, ";")(0)).Activate
End If
End SubJe viens de tester, tout à l'air de fonctionner. Il ne me reste plus qu'à essayer de l'adapter.
Merci énormément.