Arret d'une boucle sur une cellule precise

Bonjour,

Je souhaite créer une FAQ sur un document Excel avec un moteur de recherche pour chercher les mots clés. J'ai réussi à coder le moteur de recherche et à mettre en évidence les cellules contenant les mots clés mais j'aimerais rajouter une msgbox qui me renvoie le nombre de résultats trouvés. Pour mon moteur de recherche j'ai utilisé une boucle For qui tourne un certain nombre de fois. Ce n'est pas la manière la plus optimisée et je cherche donc un moyen pour que la boucle s'arrête quand elle revient sur des cellules déjà mises en évidences pour pouvoir ensuite afficher à l'aide d'une msgbox le nombre de résultats trouvés.

Je sais pas si j'ai été assez clair, mais si quelqu'un peut m'aider, ça ne serait pas de refus.

11test.xlsm (29.01 Ko)

Bonjour

Pourrais-tu expliqué ce que tu cherches à faire précisément ?

De ce que j'ai compris :

Tu veux parcourir un ensemble de cellule, si une ou plusieurs cellules contiennent un terme cherché alors tu veux les mètres en évidences et compter le nombre de cellule correspondantes ?

Bonjour Dorianbad, GGautier

En retour ton fichier modifié. J'ai changé la macro.

Voir aussi note rouge.

Bons tests, bonne continuation.

8testdorianbad.xlsm (27.49 Ko)

Salut,

Oui c'est exactement ça. Et ensuite je veux pouvoir indiquer à l'utilisateur combien de cellules contiennent sa recherche.

Merci X Cellus c'est exactement ce que je voulais

Ravi pour toi,

Si cela convient n'oublie pas...

Bonjour X Cellus, tu a été plus rapide, je poste mon code quand même ;)

Note : J'utilise la fonction like , si dans la barre de recherche tu tapes juste "tech", toutes les cellules contenant la suite de lettres "tech" seront misent en évidences.

Dim Plage As Range

Sub JeCherche()
Dim Cel As Object
Dim Crit As String
Dim Cpt As Integer

    Set Plage = ThisWorkbook.Worksheets("Feuil1").UsedRange
    Crit = InputBox("Quel est le critère de recherche ? :")
    Cpt = 0
    If Crit = "" Then Exit Sub
    For Each Cel In Plage
        If UCase(Cel) Like "*" & UCase(Crit) & "*" Then
            Cel.Interior.Color = RGB(255, 255, 0)
            Cpt = Cpt + 1
        Else
            Cel.Interior.Color = xlNone
        End If
    Next Cel
    MsgBox "La recherche a mis en évidence " & Cpt & " cellule(s).", vbInformation, "Fin de recherche"
End Sub

Sub Restart()
    Set Plage = ThisWorkbook.Worksheets("Feuil1").UsedRange
    Plage.Interior.Color = xlNone
End Sub

J'ai un autre problème.

Sur ton fichier test tout marche correctement et quand je copie ce code sur mon fichier, il ne trouve plus de correspondance alors que les mots sont bien présents et que la casse est respectée

C'est bon finalement j'ai pris le code de GGautier.

D'ailleurs merci

Merci à vous deux ;)

Pour que mon code soit plus "efficace" il est préférable de définir une plage de recherche fixe ;) (du type : Set Plage = ThisWorkbook.Worksheets("Feuil1").Range("A1:D100"))

Et si tu ne veux pas de recherche "intuitive" remplace le If UCase(Cel) Like "*" & UCase(Crit) & "*" Then par If UCase(Cel) = UCase(Crit) Then

Si tu veux prendre en compte une différenciation entre les minuscules et les majuscules retire les Ucase

A nouveau,

Suite à la bonne remarque de GGautier utilisant le Like.

Je te laisse le choix d'une recherche stricte ou partielle du mot à trouver.

Grâce à une case à cochée tu influences le résultat. Voir changement dans la macro feuille.

Bons tests, bonne continuation.

Merci

Avec tout ça le rendu est parfait

Rechercher des sujets similaires à "arret boucle precise"