Recherche ou index

Bonjour,

Je suis à la recherche d'une formule me permettant de rechercher tous les mots dans une colonne (colonne G) avec le mot clef (dans mon cas le mot "sous") et d'afficher tous les mots contenant le mot "sous" dans une autre colonne (colonne J) à la suite.

Est-il possible de faire cela?

Cordialement

Bonjour,

Il doit être possible de faire ça via formule, mais je vois mal comment.

Dans le doute, tu trouvera ci-apres une macro qui fera ce que tu recherche. A copier coller dans un module standard, et a utiliser telle quelle!

Sub rechercheMot()

'Déclaration de variables
Dim tabdata() As Variant
Dim Lgdata As Long
Dim i As Long, j As Long
Dim tabsortie() As String

Dim motCible As String

'Choix du mot a rechercher
motCible = InputBox("Entrez le mot à rechercher : ", "Recherche")
If motCible = "" Then Exit Sub

'recupération des data => ici tu peux changer le nom de la feuille et la lettre de la colonne
'Nombre de data
Lgdata = ThisWorkbook.Sheets("Feuil1").Range("G65536").End(xlUp).Row
'data
tabdata = ThisWorkbook.Sheets("Feuil1").Range("G1:G" & Lgdata).Value

'on boucle sur chaque donnée afin de voir si le mot cible y est.
For i = Lgdata To 1 Step -1

    'Si le mot cible n'est pas trouvé on supprime la donnée
    If InStr(tabdata(i, 1), motCible) = 0 Then

        For j = i To Lgdata - 1
        tabdata(j, 1) = tabdata(j + 1, 1)
        Next j

        tabdata(Lgdata, 1) = ""
        Lgdata = Lgdata - 1
    End If

Next i

'On colle le resultat colonne J => ici encore, tu peux adapter la colonne et le nom de feuille

Application.ScreenUpdating = False

ThisWorkbook.Sheets("Feuil1").Range("J1:J" & Lgdata).Value = tabdata

Application.ScreenUpdating = True

End Sub

Dit moi si c'est bon pour toi!

Yann

Enfaite, ce n'est pas tout à fait ce que je recherche, mais c'est franchement cool de ta part de me proposer une solution (je la garde sous le coude).

Cependant, je recherche plutôt une fonction qui me permettrai de supprimer tous les mots d'une liste ne contenant pas le mot clef "sous" et de me les afficher à la suite sans cellule vide.

C'est ce que devrais faire la macro^^ Enfin, elle filtre les mots qui ont le mots que tu recherche, et elle te donne cette liste (supprime les mots qui n'ont pas le mot recherché donc) dans la colonne J.

Normalement il ne devrais pas y avoir de cellule vide.. :/

Joint moi une partie de ton fichier que je puisse voir ce qui se passe!

Yann

Effectivement sa fonctionne en faite x) je viens de tester sur un fichier landa donc je vais voir ce qui cloche sur mon ficher master ^^

Tu m'as fait peur!

Veille à ne pas avoir de cellule vide dans ta colonne G,ça peux peut-être venir de là!

Reviens vers moi si tu rencontre un problème! (dans ce cas joint ton fichier en PJ)

Sinon note le sujet comme résolu!

Yann

Bonjour,

Je ne suis peut-être pas bien éveillé, mais il me semble que dans le premier message, on cherche tous les mots contenant "sous", puis qu'on recherche les cellules qui ne le contiennent pas ??

On peut trouver une solution relativement simple, si on accepte d'utiliser une colonne supplémentaire, ou alors aussi par formule matricielle (à éviter sur de gros volumes de données.

Dans tous les cas, un fichier exemple serait le bienvenu!

Effectivement, je suis encore endormis Zzzz. Je voulais dire contenant le mots "sous", mes excuses.

Je teste mais sa bloque ici : "ThisWorkbook.Sheets("Récap manufacturing").Range("J1:J" & Lgdata).Value = tabdata"

Que te dit le message d'erreur Excel?

Joint moi ton fichier, sans ça, j'ai peur de ne pas pouvoir t'aider :/

Dans mon fichier excel il y a des données confidentielles donc je ne peux le transférer, il me dit "erreur 1004"

Bonjour U.Milité!

Ok, tu ne peux pas falsifier les données? Tu laisse que 20 lignes avec la colonne G (Garde le nom de la feuille intact par contre! )

Sinon j'ai deux pistes :

  • Le nom de la feuille n'est pas identique à celui qu'il y a dans la macro.(D'ailleur, il est préférable d'éviter les espaces et les accents)
  • Lgdata est en négatif (pour vérifier ce point ajoute la ligne
msgbox lgdata

juste avant la ligne qui bug)

Re-bonjour,

Un fichier "basique" avec les deux solutions évoquées précédemment. Je laisse à L-Yann le soin d'y implémenter sa solution

Bon il n'est pas négatif, et sa marche mais la limite reste que si on ne tape exactement le même format (majuscule/minuscule) du mots rechercher et bien cela plante.

J'avoue que je ne comprend pas.. Peut être égal à 0 alors? Tiens, dans le doute je t'ai modifié le code pour prendre en compte ce cas là. Et pour prendre en compte indifféremment les majuscules et les minuscules.

Sub rechercheMot()

'Déclaration de variables
Dim tabdata() As Variant
Dim Lgdata As Long
Dim i As Long, j As Long
Dim tabsortie() As String

Dim motCible As String

'Choix du mot a rechercher
motCible = InputBox("Entrez le mot à rechercher : ", "Recherche")
If motCible = "" Then Exit Sub

'recupération des data => ici tu peux changer le nom de la feuille et la lettre de la colonne
'Nombre de data
Lgdata = ThisWorkbook.Sheets("Récap manufacturing").Range("G65536").End(xlUp).Row
'data
tabdata = ThisWorkbook.Sheets("Récap manufacturing").Range("G1:G" & Lgdata).Value

'on boucle sur chaque donnée afin de voir si le mot cible y est.
For i = Lgdata To 1 Step -1

    'Si le mot cible n'est pas trouvé on supprime la donnée
   If InStr(UCase(tabdata(i, 1)), UCase(motCible)) = 0 Then

        For j = i To Lgdata - 1
        tabdata(j, 1) = tabdata(j + 1, 1)
        Next j

        tabdata(Lgdata, 1) = ""
        Lgdata = Lgdata - 1
    End If

Next i

'On colle le resultat colonne J => ici encore, tu peux adapter la colonne et le nom de feuille

If Lgdata <= 0 Then
    MsgBox "Aucune occurence trouvée pour la recherche : " & motCible, vbInformation, "Aucun résultat"
Else
    Application.ScreenUpdating = False
    ThisWorkbook.Sheets("Récap manufacturing").Range("J1:J" & Lgdata).Value = tabdata
    Application.ScreenUpdating = True
End If

End Sub

Voilà, teste dans les même conditions que tout à l'heure, ça devrait fonctionner correctement maintenant!

Super sa marche niquel ! enfaite il était égale à zero donc je pense que c'est sa le bug ^^ tu m'a dit négatif donc bon bref en tous cas super merci génial ^^

Oui, il essayait de te coller le tableau de sortie sur la ligne 0 qui n'existe pas! J'y ai pensé qu’après avoir lu ton message!

Bon, content de savoir quec'est bon de ton coté!

N'oublie pas de mettre ton sujet en résolu!

pS: U.Milité, je ne savais pas qu'on pouvais faire des choses comme ça avec des formules Excel!

Comment on clos le sujet? ^^

Tu as une encoche a droite d'éditer sur ton dernier message. "Accepter cette reponse". Je pense que c'est ça!

Est-il possible avec le code que tu m'a proposé de supprimer les anciennes valeurs de la colonne ? car si je fais plusieurs recherche d'affiler cela garde en mémoire l'ancienne recherche.

Oups, j'ai peut-être validé le sujet trop vite ^^

max39 a écrit :

Oups, j'ai peut-être validé le sujet trop vite ^^

Accessoirement, pourrais-tu aussi jeter un œil aux autres propositions? Sinon ça donne un peu l'impression d'être transparent, ce qui n'est guère agréable

Rechercher des sujets similaires à "recherche index"