Sélection et copie ligne d'un onglet à un autre

  • Initiateur de la discussion Initiateur de la discussion Luc MOUNY
  • 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 !

Luc MOUNY

XLDnaute Junior
Bonsoir à tous,

Me revoilà, j'ai réussi à bidouiller une macro, en partant d'articles de divers sites. Cette macro ne me donne pas entière satisfaction, la recherche s'établit sur l'ensemble des cellules de l'onglet "Recap".
Dans l'état actuel des choses, si le nom de la personne recherchée figure également dans un nom de rue ou de ville, toutes les lignes sont sélectionnées et collées dans l'onglet "Relai".
Voir l'exemple avec le nom ROY

Vous trouverez de plus amples renseignements, sur mon problème dans le fichier joint.

Je remercie par avance les forts en VBA qui voudrons bien m'aider.
 

Pièces jointes

Bonjour Luc,

Voici une possibilité de code qui va bien
VB:
Sub Cherche_Copie_Ligne()
  Dim strSearch
  Dim DLig As Long, Lig As Long
  ' Désactiver l'affichage écran
  Application.ScreenUpdating = False
  ' Nom à chercher
  strSearch = Application.InputBox("Nom de l'adhérent")
  ' Avec la feuille
  With Sheets("Recap")
    ' DErnière ligne du tableau
    DLig = .Range("C" & Rows.Count).End(xlUp).Row
    ' On boucle sur chaque ligne de l'onglet
    For Lig = 1 To DLig
      ' Est-que le nom est contenu dans la cellule
      If .Range("C" & Lig) Like "*" & strSearch & "*" Then
        .Rows(Lig).Copy Sheets("Relai").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
      End If
    Next Lig
  End With
  ' Réactiver l'affichage écran
  Application.ScreenUpdating = True
End Sub

A+
 
Bonjour Luc MOUNY, Bruno,

Avec un tableau VBA c'est plus rapide :
VB:
Sub Cherche_Copie_Ligne()
Dim strSearch$, colsearch%, ncol%, tablo, n&, i&, j%
strSearch = LCase(Application.InputBox("Nom de l'adhérent"))
If strSearch = "" Then Exit Sub
With Sheets("Recap").[A1].CurrentRegion 'à adapter
    colsearch = 3 'colonne de recherche, à adapter
    ncol = .Columns.Count
    If ncol < colsearch Then ncol = colsearch
    If ncol = 1 Then ncol = 2
    tablo = .Resize(, ncol) 'matrice, plus rapide
End With
n = 1
For i = 2 To UBound(tablo)
    If InStr(LCase(tablo(i, colsearch)), strSearch) Then
        n = n + 1
        For j = 1 To ncol
            tablo(n, j) = tablo(i, j)
        Next
    End If
Next
'---restitution---
Application.ScreenUpdating = False
With Sheets("Relai")
    If .FilterMode Then .ShowAllData 'si la feulle est filtrée
    .[A1].CurrentRegion.ClearContents 'RAZ
    .[A1].Resize(n, ncol) = tablo
    .Columns(1).Resize(, ncol).AutoFit 'ajustement largeur
    With .UsedRange: End With 'actualise les barres de défilement
    .Activate 'facultatif
End With
End Sub
Bonne journée.
 

Pièces jointes

Bonjour Bruno, bonjour Job75 Bonjour à tout le forum.
Merci à tous les deux, de vous être manifesté aussi rapidement, vos deux solutions fonctionnent, avec un léger avantage à la macro de Job75, qui permet la saisie en majuscules ou minuscules, la macro de Bruno, elle ne fonctionne qu'en majuscules, ceci est un détail.
Il me reste à tester sur mon gros fichier.
Mon fichier totalise maintenant une trentaine de macros, jusqu'ici, j'arrivais à m'en sortir, mais j'avais vraiment des difficulté avec les noms composés.

Messieurs, je vous tire mon chapeau...

Vous avez résolu mon problème et ce, très rapidement. Je ne pensais pas que les réponses pouvaient être aussi rapides sur le forum. Ce n'est pas étonnant que Excel-Download.com soit autant sollicité.

Merci encore à tous.
 
- 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
Retour