Rechercher un mot et copier la ligne

Bonjour les exceliste!

Je suis sur un petit projet où j'ai déjà fait une macro VBA ("OK") qui copie la ligne sur laquelle j'ai le curseur, dans une autre feuille.

Alors elle est peut être pas parfaite ni pertinente mais bon...on fait ce qu'on peut :D

Bref je voudrais aller un peu plus loin si c'est possible, et là je bloque.

Ce que j'aimerais faire c'est que la macro cherche un mot en particulier (par exemple "Chambre 2") dans la colonne B de chaque feuille (sauf dans la feuille "GENERAL" puisque c'est la qu'on copie les données) et que si elle trouve ce mot elle copie la ligne dans la feuille "GENERAL" à la suite.

Bref je sais pas si c'est très clair mais bon quand vous verrez le classeur ça vous parleras peut être.

Le voila :

16estimation.xlsm (46.05 Ko)

J'ai fouillé un peu et trouver des commandes comme CellsSearch, mais j'arrive pas à les mettre en œuvre.

Merci beaucoup!

Bonjour

Ci joint ma solution

59estimation.xlsm (47.85 Ko)

A+ François

Bonjour,

et Merci beaucoup pour votre réponse très rapide!

Cela semble fonctionner, encore merci.

Mais je me demande bien quelle sorcellerie vous avez utilisé pour parvenir à cette merveille... ^^'
Est ce que vous pourriez m'expliquer un peu ce que vous avez fait?

Je vais essayer de traduire avec mes mots :

Private Sub Worksheet_Change(ByVal Target As Range)  '}
  If Target.Address <> "$A$2" Then Exit Sub          '}
  If Target.Value = "" Then Exit Sub                 '} Si je modifie A2 et quelle n'est pas vide, on exécute cette procedure
  Dim lig As Long, sh As Worksheet, c As Range
  For Each sh In ActiveWorkbook.Sheets                '}
    If sh.Name <> "GENERAL" Then                      '}On prend toute les feuilles autres que "GENERAL"
      With sh.Columns(2)                              '}Dans la colonne 2
        Set c = .Find(Target.Value)                   '}on cherche la valeur qui est dans A2
        If Not c Is Nothing Then                      '}? hum je crois comprendre que si on trouve "c" on copie, mais j'ai du mal à le lire
          lig = Sheets("GENERAL").Range("A" & Rows.Count).End(xlUp).Row + 1        '}
          c.EntireRow.Copy Destination:=Sheets("GENERAL").Range("A" & lig)         '}endroit où on copie (ça semble mieux que ce que j'avais fait!)
        End If
      End With
    End If
  Next
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)  '}macro
  If Target.Address <> "$A$2" Then Exit Sub          '}si la cellule qui est changée n'est pas A2 => on quitte
  If Target.Value = "" Then Exit Sub                 '} Si A2 est vide => on quitte
  Dim lig As Long, sh As Worksheet, c As Range
  For Each sh In ActiveWorkbook.Sheets                '} Boucle sur les feuilles
    If sh.Name <> "GENERAL" Then                      '}si feuille <> "GENERAL"
      With sh.Columns(2)                              '}Avec la colonne 2
        Set c = .Find(Target.Value)                   '}on cherche la valeur qui est dans A2
        If Not c Is Nothing Then                      '}? si on trouve
          lig = Sheets("GENERAL").Range("A" & Rows.Count).End(xlUp).Row + 1        '} derniere ligne +1 de la feuille GENERAL
          c.EntireRow.Copy Destination:=Sheets("GENERAL").Range("A" & lig)         '} on copie la colonne entière
        End If
      End With
    End If
  Next
End Sub

A+ François

Ok merci pour ces explications.

Par contre il y a quand même un problème lorsque le terme recherché apparait sur plusieurs lignes dans la même feuille.

Par exemple dans la feuille "LOT04 MENUISERIE" le terme "Chambre 1" apparait 3 fois (Une fois dans Menuiserie extérieure, une fois dans volets et une fois dans menuiserie intérieures) or la macro ne copie que la première ligne.

La macro ne prend que la première itération du terme, dans chaque feuille, et ne copie pas les itérations suivantes.

Bonjour,

Une autre solution, utilisant Power Query (en natif depuis Excel 2016, donc pas de soucis pour ta version)

Dans le fichier joint, je fais une requête "externe", c'est à dire qu'il faut que l'enregistrement des données ait lieu avant de faire ta recherche.
Vérifie bien que le nom du fichier, et surtout le chemin, est correct dans la cellule B1 (jaune)

Dans la cellule A2, tu mets ton critère (majuscule, minuscule, ..), peu importe. Tu peux mettre ce que tu veux (mezzanine, mezza, poutre, chambre, chambre 3...)

Puis tu cliques sur "Actualiser tout" du ruban "Données" (ou un clic droit dans une cellule de la requête/Actualiser)

Tu peux rajouter autant d'onglets que tu veux, il faut juste que l'onglet Principal soit nommé "GENERAL". Dans tous les onglets, je ne travaille que sur les 4 premières colonnes.

Regarde si le principe te sied.

Bonne apm

Edit, version mise à jour, si aucun critère, tous les travaux sont retournés

Edit 2: Fichier supprimé, voir fil suivant

Merci pour cette autre solution, j'ai corrigé le chemin d’accès car dans la case B2 c’était le bon mais lorsque je faisait actualiser les données, la requete demandais votre chemin d’accès.

Cela à l'air de marché un peu mieux, mais j'ai encore un petit soucis qui est que si la colonne A est vide il ne copie pas la ligne, même si la colonne B contient le critère recherché.

Typiquement sur mon fichier, si je recherche "Chambre 1" il ne me copiera pas la ligne 24 de la feuille "LOT02 SABLAGE" car il n'y a rien dans la colonne A.
J'ai essayé de corrigé les formules dans la requêtes mais en vain.

Re-,

Oupss, désolé pour ces 2 beugs...

Effectivement, je filtrais sur les Lots, j'ai modifié, je filtre sur les Travaux (lignes non vides uniquement)

Et pour le chemin d'accès, j'avais "presque" tout fait, manquait juste de modifier la source dans la requête, et de prendre en référence la cellule B1, nommée "Fichier"..

Encore désolé

6pq-cameco-v2.xlsx (39.43 Ko)

Problème corrigé (Salut CousinHub)

57estimation.xlsm (48.38 Ko)

A+ François

Au top! ça marche aux petits oignons!

Merci beaucoup à vous deux!

Rechercher des sujets similaires à "rechercher mot copier ligne"