Copier lignes contenant un mot dans une cellule dans un nouvel onglet

SurfingJoe

XLDnaute Nouveau
Bonsoir à tous,

Voilà j'ai en colonne A des noms "Country" "CementSpace" etc., je voudrai copier toutes les lignes contenant "Country" dans la colonne A, dans l'onglet Country et toutes les lignes contenant "CementSpace" dans l'onglet CementSpace, etc..


Merci à tous
 

Pièces jointes

  • Séparation.xls
    21 KB · Affichages: 140
  • Séparation.xls
    21 KB · Affichages: 149
  • Séparation.xls
    21 KB · Affichages: 151

ROGER2327

XLDnaute Barbatruc
Re : Copier lignes contenant un mot dans une cellule dans un nouvel onglet

Bonjour SurfingJoe
Un essai dans le classeur joint. (Le code est dans le module de la feuille Tous.)​
ROGER2327
#4944


Lundi 16 Gueules 138 (Saint Münchhausen, baron, SQ)
22 Pluviôse An CCXIX
2011-W06-4T02:19:06Z
 

Pièces jointes

  • 157918-copier-lignes.xls
    26 KB · Affichages: 295
  • 157918-copier-lignes.xls
    26 KB · Affichages: 284
  • 157918-copier-lignes.xls
    26 KB · Affichages: 280

Gorfael

XLDnaute Barbatruc
Re : Copier lignes contenant un mot dans une cellule dans un nouvel onglet

Salut SurfingJoe, ROGER2327 et le forum
Une autre proposition :
Code:
Sub Test()
'Déclarations ===================================
Dim F As Worksheet, F_D As Worksheet
Dim Plage As Range
Dim Tab_V() As String, X As Long, Y As Long, Flag As Boolean
'MEI ============================================
Set F_D = Sheets("Tous")
'suppression filtrage ---------------------------

With F_D
    If .FilterMode Then .ShowAllData
    'Création ligne de titre ------------------------
    If .[A1] <> "A" Then
        .Rows(1).Insert
        .[A1] = "A"
    End If
    'Définition de la plage -------------------------
    Set Plage = .[A1].CurrentRegion
    'Recherche des noms d'onglets ===================
    'définition des noms ----------------------------
    .Columns(1).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
    X = .UsedRange.Rows.Count + 10
    Plage.Copy .Cells(X, "A")
    ReDim Tab_V(1 To .Cells(Rows.Count, "A").End(xlUp).Row - X)
    For Y = 1 To UBound(Tab_V)
        Tab_V(Y) = .Cells(X + Y, "A")
    Next Y
    'RAZ --------------------------------------------
    .Range(.Rows(X), .Rows(X + Y)).Delete
End With
'Copie des valeurs ==============================
For X = 1 To UBound(Tab_V)
'pour chaque valeur de Tab_V
    Flag = True
    For Each F In ThisWorkbook.Sheets
        If F.Name Like Tab_V(X) Then
            Flag = False
            Exit For
        End If
    Next F
    'Création d'une nouvelle feuille -----------
    If Flag Then
        ThisWorkbook.Sheets.Add after:=Sheets(ThisWorkbook.Worksheets.Count)
        ActiveSheet.Name = Tab_V(X)
        Set F = Sheets(Tab_V(X))
    End If
    'Copie des valeurs -------------------------
    If F_D.FilterMode Then F_D.ShowAllData
    Y = F.Cells(Rows.Count, "A").End(xlUp).Row
    If Range("A" & Y) = "" Then Y = Y + 1
    Plage.AutoFilter field:=1, Criteria1:=Tab_V(X)
    Plage.Copy F.Range("A" & Y)
    'nettoyage valeurs ajoutées ----------------
    If F.Range("A" & Y) = "" Then F.Rows(Y).Delete
    If F.Range("A" & Y) = "A" Then F.Rows(Y).Delete
Next X
End Sub
A+
 

ROGER2327

XLDnaute Barbatruc
Re : Copier lignes contenant un mot dans une cellule dans un nouvel onglet

Bonjour Gorfael
Je vois que vous avez su interpréter le très-précis etc. final du message de notre ami.
Il peut signifier qu'il ne s'agit pas seulement de ventiler les données dans les onglets existants, mais aussi de créer d'autres onglets. Il se pourrait aussi qu'il faille ajouter des données aux onglets existants. Mais ils se pourrait tout aussi bien qu'il convienne de remplacer les données des onglets existants.
"La précision et la qualité d'une réponse sont directement proportionnelles à celles de la question." dites-vous, et je ne saurais qu'approuver vos propos.
En attendant, voici une version essayant de donner du contenu à etc.
ROGER2327
#4945


Lundi 16 Gueules 138 (Saint Münchhausen, baron, SQ)
22 Pluviôse An CCXIX
2011-W06-4T17:38:16Z
 

Pièces jointes

  • 157918-copier-lignes.xls
    30.5 KB · Affichages: 191
  • 157918-copier-lignes.xls
    30.5 KB · Affichages: 187
  • 157918-copier-lignes.xls
    30.5 KB · Affichages: 183

job75

XLDnaute Barbatruc
Re : Copier lignes contenant un mot dans une cellule dans un nouvel onglet

Bonsoir SurfingJoe, Roger, Gorfael,

Perso j'ai compris qu'il fallait créer les feuilles nécessaires si elles n'existaient pas...

La macro dans la feuille "Tous" :

Code:
Private Sub CommandButton1_Click()
Dim plage As Range, tablo, txt, w As Worksheet
Application.ScreenUpdating = False
Rows(1).Insert 'il n'y a pas de ligne de titre
Set plage = Range("A1", [A65536].End(xlUp))
'---création des feuilles---
tablo = plage 'pour aller plus vite
On Error Resume Next
For Each txt In tablo
  If txt <> "" Then
    If IsError(Sheets(txt).Name) Then
      Sheets.Add After:=Sheets(Sheets.Count)
      Sheets(Sheets.Count).Name = txt
    End If
  End If
Next
On Error GoTo 0
'---filtrage des données et copie---
For Each w In Worksheets
  If w.Name <> "Tous" And Application.CountIf([A:A], w.Name) Then
    Me.AutoFilterMode = False
    [A:C].Copy w.[A1] 'pour les formats de colonnes
    w.[A:C].Clear
    plage.Resize(, 3).AutoFilter Field:=1, Criteria1:=w.Name
    plage.Resize(, 3).SpecialCells(xlCellTypeVisible).Copy w.[A1]
    w.[A1:C1].Delete xlUp
  End If
Next
Me.AutoFilterMode = False
Rows(1).Delete
Me.Activate
End Sub

Comme on le voit, on utilise le filtre automatique.

A+
 

Pièces jointes

  • Séparation(1).xls
    40.5 KB · Affichages: 149

job75

XLDnaute Barbatruc
Re : Copier lignes contenant un mot dans une cellule dans un nouvel onglet

Re,

Juste un détail, si l'on veut supprimer les feuilles qui ne concernent plus la séparation.

Ajouter dans le dernier test :

Code:
ElseIf w.Name <> "Tous" Then
  Application.DisplayAlerts = False
  w.Delete

A+
 

Pièces jointes

  • Séparation(2).zip
    15.9 KB · Affichages: 102

mathieu13950

XLDnaute Nouveau
Re : Copier lignes contenant un mot dans une cellule dans un nouvel onglet

Bonjour à tous,

Bonjour job75,

Job75 dans votre commentaire, Vous dites à la fin que si on veut effacer les onglets inutiles il faut rajouter ce morceau de texte.

Et si on veut effacer les onglets inutiles et en garder 2 (onglet 1 : "QUADRA" et onglet 2 : "REPORT")
Que dois-je rajouter ?

Merci

Bonne journée
 

job75

XLDnaute Barbatruc
Re : Copier lignes contenant un mot dans une cellule dans un nouvel onglet

Bonjour mathieu13950,

Vous pouvez tester sur le dernier fichier :

Code:
ElseIf w.Name <> "Tous" And w.Name <> "QUADRA" And w.Name <> "REPORT" Then
  Application.DisplayAlerts = False
  w.Delete
Edit : un test plus "condensé" :

Code:
ElseIf InStr("µTousµQUADRAµREPORTµ", "µ" & w.Name & "µ") = 0 Then
Je m'excuse d'avance pour nos amis grecs :)

A+
 
Dernière édition:

Discussions similaires

Réponses
13
Affichages
186

Statistiques des forums

Discussions
312 485
Messages
2 088 805
Membres
103 971
dernier inscrit
abdazee