Recherche d'un mot dans une feuille Excel

Bonjour,

J'ai trouvé un code permettant de chercher sur une feuille excel un mot particulier, ici " à ". Puis, de copier la ligne entière à chaque fois qu'il trouve, et de la coller sur une autre feuille excel qui s'appelle date.

Je cherche à présent un moyen d'adapter ce code pour qu'il réalise des recherches pour plusieurs mot différents :

With Worksheets("Feuil1").Range("A1:A300")
    Set C = .Find("à", LookIn:=xlValues)
    If Not C Is Nothing Then
        firstAddress = C.Address
        Do
            Set C = .FindNext(C)
            C.EntireRow.Copy Destination:=Sheets("date").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        Loop While Not C Is Nothing And C.Address <> firstAddress
    End If
End With

Pouvez vous m'aider svp.

Bonjour,

Sans fichier, il faudra que vous l'adaptiez tout seul comme un grand

Néanmoins, je peux expliquer le code

With Worksheets("Feuil1").Range("A1:A300") 'ici, c'est la plage de recherche à adapter (la feuille = Worksheets, la plage = range)
    Set C = .Find("à", LookIn:=xlValues) 'ici, on recherche  le mot "à" et on affecte l'adresse à la variable C
    If Not C Is Nothing Then 'si C n'est pas vide --> donc trouvé le mot
        firstAddress = C.Address 'la variable firstaddress prend la valeur de l'addresse de la cellule où C a été trouvée 
        Do 'début boucle do
            Set C = .FindNext(C) 'on recherche le C suivant
            C.EntireRow.Copy Destination:=Sheets("date").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 'on copy la ligne entière pour la coller sur la première ligne vide 
            'de la colonne 1 (= colonne A) de la feuille date
        Loop While Not C Is Nothing And C.Address <> firstAddress 'on recommence tant que C n'est pas vide et que l'adresse de la cellule trouvée est difféerente de la firtaddress
    End If
End With

Pour trouver plusieurs mots différents (sans savoir lequels), vous pouvez utiliser une inputbox :

Rajoutez ce code avant le with...

Dim txt as string
txt = inputbox("Quel est le mot recherhé ?", "mot")

Et dans le with, remplacé le "à" par la variable txt ce qui donne

Set C = .Find(txt, LookIn:=xlValues)

Cordialement

Bonjour,

Si je souhaite réaliser une recherche du mot "à", "vendre" , "acheter" simultanément avec :

Toutes les phrases avec le mot "à" sont coller sur la feuille date

Toutes les phrases avec le mot "vendre" sont coller sur la feuille vendre

Toutes les phrases avec le mot "acheter" sont coller sur la feuille acheter

Comment dois-je adapter mon programme svp ?

Re,

est-ce que ce serai les seuls mots que vous pourriez rechercher ?

Re,

"à", "vendre" , "acheter" et "valider" , ce sont les 4 mots que je souhaite rechercher et reporter les lignes qu'il à trouvé sur 4 feuille Excel différents, comme ceci :

Toutes les phrases avec le mot "à" sont coller sur la feuille date

Toutes les phrases avec le mot "vendre" sont coller sur la feuille vendre

Toutes les phrases avec le mot "acheter" sont coller sur la feuille acheter

Toutes les phrases avec le mot "valider" sont coller sur la feuille valider

Re,

Sans tester :

Dim txt as string
dim ws as worksheet
txt = inputbox("Quel est le mot recherhé ?", "mot")
With Worksheets("Feuil1").Range("A1:A300")
    Set C = .Find(txt, LookIn:=xlValues)
    If Not C Is Nothing Then
        firstAddress = C.Address
        Do
            Set C = .FindNext(C)
            if c = "à" then
            set ws = sheets("date")
            else
            set ws = sheets(txt)
            end if
            C.EntireRow.Copy Destination:=ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        Loop While Not C Is Nothing And C.Address <> firstAddress
    End If
End With

Par contre, ça ne marchera que si le nom des feuille est identique au mot saisi (pour tous ceux différents de "à")

Dites moi si ça fonctionne

Cordialement

Re

Je ne veux pas utiliser un input box car je connais déjà les mots que je recherche.

Re,

dans ce cas la recherche est inutile,

il suffit de faire une boucle (code sans tester)

dim Cel as range
dim ws as sheets
For each Cel in Worksheets("Feuil1").Range("A1:A300")
    if Cel = "à" then
        set ws = sheets("date")
        Cel.EntireRow.Copy Destination:=ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        else
            if Cel = "vendre"
            set ws = sheets("vendre")
            Cel.EntireRow.Copy Destination:=ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
            else
                   if Cel = "acheter" then
                set ws = sheets("acheter")
                Cel.EntireRow.Copy Destination:=ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                else
                    set ws = sheets("valider")
                    Cel.EntireRow.Copy Destination:=ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                    end if
                end if
            end if
        end if
next cel

Cordialement

Re,

J'ai adapter votre code par rapport au mien, il y'avait quelque erreur.

Cepednant, ma macro compile mais n'effectue rien ...

         For Each Cel In Worksheets("Feuil1").Range("A1:A300")
            If Cel = "à" Then
                Set ws = Sheets("date")
                Cel.EntireRow.Copy Destination:=Worksheets("date").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                Else
                    If Cel = "vendre" Then
                    Set ws = Sheets("vendre")
                    Cel.EntireRow.Copy Destination:=Worksheets("vendre").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                    Else
                        If Cel = "acheter" Then
                        Set ws = Sheets("acheter")
                        Cel.EntireRow.Copy Destination:=Worksheets("acheter").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                        Else
                            If Cel = "valider" Then
                            Set ws = Sheets("valider")
                            Cel.EntireRow.Copy Destination:=Worksheets("valider").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                            End If
                        End If
                    End If
                End If
        Next Cel

Re,

For Each Cel In Worksheets("Feuil1").Range("A1:A300")
            If Cel.value = "à" Then
                Cel.EntireRow.Copy Destination:=Worksheets("date").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                Else
                    If Cel.value = "vendre" Then
                    Cel.EntireRow.Copy Destination:=Worksheets("vendre").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                    Else
                        If Cel.value = "acheter" Then
                        Cel.EntireRow.Copy Destination:=Worksheets("acheter").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                        Else
                            If Cel.value = "valider" Then
                            Cel.EntireRow.Copy Destination:=Worksheets("valider").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                            End If
                        End If
                    End If
                End If
        Next Cel

et comme ceci ?

Re,

Non plus.

La ligne d'instruction suivante :

Cel.Value = "à"

Il faut absolument que le mot à l'intérieur de la cellule soit uniquement le mot "à" ??

car mes lignes ce sont des phrases :

exemple : le Lundi 11 Septembre 2018 à 16:15:10

EDIT : je viens de faire le test, il recherche uniquement la cellule qui correspond au mot "à". Mais moi je veux qu'il sélectionne les lignes contenant le mot "à"

Re,

dans ce cas, s'il n'y a aps de message d'erreur, c'est qu'Excel ne trouve pas les noms.

Il faut vérifier que "à", "vendre", "acheter", et "valider" sont bien dans la colonne A de la feuil1 et que ces case sont rigoureusement identique aux valeur cherchées (la cellule ne contient que "vendre" par exemple)

si possible, joignez des captures d'écran car sans visuel c'est plus difficile à comprendre

Cordialement

EDIT : je viens de faire le test, il recherche uniquement la cellule qui correspond au mot "à". Mais moi je veux qu'il sélectionne les lignes contenant le mot "à"

re,

Pour contenant, il faut changer le code

Par exemple, pour "à", il faut remplacer

 If Cel.value = "à" Then

par le code

 If Cel.value like "*" & "à" & "*" Then

idem pour les autres

Cordialement

Re,

Merci ça fonctionne mais pas pour le mot "valider" car sur ma feuille excel j'ai par exemple :

valider par numéro 123123

non valider par 163546

Du coup, le programme ne sait pas lequel choisir.

Pour palier à ce problème, y'a t-il un moyen qu'il cherche le mot "consolider" mais qu'il me prenne uniquement la ligne d'en dessous ? Comme ça il me récupère la ligne qui m'intéresse qui se trouve juste après.

re,

bien sûr,

il suffit pour valider de

  • remplacer valider par consolider
  • remplacer le code en dessous par
Cel.offset(1,0).EntireRow.Copy Destination:=Worksheets("valider").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)

Cordialement

Re,

Finalement j'avais un problème depuis ma feuille excel valider, du coup je l'ai supprimé et crée un nouveau, maintenant ça fonctionne , merci beaucoup !

Rechercher des sujets similaires à "recherche mot feuille"