Recopier dans une feuille une ligne dont au moins une cellule contient le mot choisi

  • Initiateur de la discussion Initiateur de la discussion nainfa
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

nainfa

XLDnaute Junior
Bonjour à tous, ou plutôt bonsoir.

Merci par avance de m'attarder sur mon "petit problème".

Version utilisée : excel 2003

Le fichier

Alors dans le fichier exemple ci-joint, j'ai initialement
Une feuille qui s'appelle "donnees", qui rassemble la base de données initiale.

Et je cherche à obtenir
Une seconde feuille, appelée "recherche".
Dans cette feuille, on observe en A2 un critère de tri.
J'aimerais avoir une formule / macro qui permet de recopier dans cette feuille "recherche" toutes les lignes dans lesquelles le critère de tri apparaît au moins une fois.

Exemple :
- Je cherche à extraire les infos de toutes mes usines certifiées "Gots".
- Je rentre donc "Gots" dans le critère de tri.
- J'exécute une éventuelle macro, ou je laisse faire les formules.
- Les lignes correspondant aux usines concernées sont recopiées dans ma feuille "recherche".


L'idée est d'en faire un outils un peu multi-tâches. En effet, ici j'ai spécifié "Gots" mais ça aurait pu être autre chose.
Je précise que le mot recherché peut être dans n'importe quelle cellule de la ligne.
De plus, la base de données est susceptible d'avoir plus de colonnes.


Cependant, le nombre de lignes ne devrait pas excéder 600 ou 700 grand maximum, ce qui est plutôt faible. Donc même une solution un peu "usine à gaz" ne me dérange pas du tout !

Voilà voilà

Si vous avez des questions pour des détails, n'hésitez pas.

Guillaume
 

Pièces jointes

Re : Recopier dans une feuille une ligne dont au moins une cellule contient le mot ch

Bonjour,

Je te propose comme ceci :
VB:
Private Sub CommandButton1_Click()
Dim c As Range, d As Range, e As Range, Rech As String
    Rech = Range("A2").Text
    Set c = Range("B2")
    Set d = Sheets("donnees").Range("A2")
     Application.ScreenUpdating = False
     Sheets("donnees").Select
      Do While d <> ""
        Set e = d.EntireRow.Find(what:=Rech, LookIn:=xlValues, lookat:=xlPart)
         If Not e Is Nothing Then
            d.Resize(1, 5).Copy c
            Set c = c(2, 1)
         End If
        Set d = d(2, 1)
      Loop
     Sheets("Recherche").Select
     Application.ScreenUpdating = True
End Sub
 

Pièces jointes

Re : Recopier dans une feuille une ligne dont au moins une cellule contient le mot ch

Merci beaucoup pour cette réponse rapide et efficace !

Par contre, je suis un novice complet dans ce genre de choses.

Peux-tu m'expliquer en gros le fonctionnement de ceci? Si tu en as le temps bien sûr.

Une autre question. Je remarque que cela fonctionne dans mon cas avec 5 colonnes, mais pas si j'en rajoute une 6ème.

Que dois-je modifier pour que cela fonctionne avec 6 colonnes? d.Resize(1, 5) en d.Resize(1, 6) ?

A quoi sert le "Set d = d(2, 1)" ?
Est-ce pour commencer la copie des lignes dans la colonne B de la feuille "recherche" ?

Encore merci

Guillaume
 
Re : Recopier dans une feuille une ligne dont au moins une cellule contient le mot ch

Re,

alors la même chose expliquée :

VB:
Private Sub CommandButton1_Click()
Dim c As Range, d As Range, e As Range, Rech As String 'Déclaration des variables
    Rech = Range("A2").Text 'Rech = ce qu'il faut chercher (en A2)
    Set c = Range("B2") 'c = cellule B2 (là où va être copiée la recherche)
    Set d = Sheets("donnees").Range("A2") 'd= cellule A2 de la feuille Donnees
     Application.ScreenUpdating = False 'Désactive l'affichage à l'écran
     Sheets("donnees").Select 'sélectionne la feuille Donnees
      Do While d <> "" 'Faire tant que d n'est pas vide ceci :
        Set e = d.EntireRow.Find(what:=Rech, LookIn:=xlValues, lookat:=xlPart) 'e = résultat de la recherche de Rech dans la ligne où se trouve d
         If Not e Is Nothing Then 'si e n'est pas vide (et donc que la recherche a abouti)
            d.Resize(1, 5).Copy c 'alors copie la zone de d à d+4colonnes dans c
            Set c = c(2, 1) 'c= devient la cellule en dessous de c
         End If
        Set d = d(2, 1) 'd devient la cellule en dessous de d
      Loop 'fait la boucle
     Sheets("Recherche").Select 'sélectionne la feuille Recherche
     Application.ScreenUpdating = True 'Affichage activé
End Sub
 
Re : Recopier dans une feuille une ligne dont au moins une cellule contient le mot ch

Bonjour,
Je viens d'essayé le fichier joint lorsque je clic sur go il marque comme message d'erreur "Erreur d'exécution '1004', la méthode Select de la classe worksheet a échoué"...

Avez vous la réponse à ce probleme?
 
Re : Recopier dans une feuille une ligne dont au moins une cellule contient le mot ch

Bonjour,

clique sur déboguage et vois quelle ligne est surlignée en jaune : c'est là que ça bloque chez toi... Mais à priori, mets la macro dans un module standard et appelle-la depuis la macro commandbutton1_click pour que ça fonctionne.. comme ceci :
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
582
Retour