XL 2019 Copier des lignes non contigue

netparty

XLDnaute Occasionnel
Bonjour à tous

Je recherche de l'aide pour réaliser une macro.

Voici ce que cette macro doit faire :

Dans mon classeur j'ai 2 feuilles "Données 1" et "Données 2" et j'aimerai copier toutes les lignes qui contiennent un mot spécifique dans la colonne J (Mot à rechercher : INT58, Sanitaire, Divers-95, 01 Elec, TR.TRAVAUX) ensuite il faut coller les lignes trouvées dans la feuille "Rapport" en-dessous de la dernière ligne non vide.

Dans le fichier exemple les lignes à copier sont entres les lignes surlignée en jaune.

Merci d'avance

Bonne journée à tous
 

Pièces jointes

  • Copie de ligne.xlsm
    15.6 KB · Affichages: 8
Dernière édition:

job75

XLDnaute Barbatruc
Voyez le fichier joint et le code de la feuille "Rapport" :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A1] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim w As Worksheet
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Cells.Delete 'RAZ
For Each w In Sheets(Array("Données 1", "Données 2"))
    With w.UsedRange
        .AutoFilter 10, "*"
        .Copy Range("A" & Range("J" & Rows.Count).End(xlUp).Row + 1)
        .AutoFilter
    End With
Next
Rows(1).Delete 'supprime la 1ère ligne car elle est vide
Rows(1).Font.Bold = True 'gras
'UsedRange.RemoveDuplicates [COLUMNS(A:AI)], Header:=xlNo 'supprime les lignes en doublon
UsedRange.RemoveDuplicates Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, _
    22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35), Header:=xlNo 'supprime les lignes en doublon
Columns.AutoFit 'ajuste les largeurs
Application.EnableEvents = True 'réactive les évènements
End Sub
La feuille est mise à jour quand on modifie ou valide une cellule quelconque ou quand on l'active.

Bien noter que les lignes en doublon sont supprimées.

Edit : [COLUMNS(A:AI)] ne va pas, j'ai corrigé.
 

Pièces jointes

  • Copie de ligne(1).xlsm
    28 KB · Affichages: 4
Dernière édition:

netparty

XLDnaute Occasionnel
Voyez le fichier joint et le code de la feuille "Rapport" :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A1] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim w As Worksheet
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Cells.Delete 'RAZ
For Each w In Sheets(Array("Données 1", "Données 2"))
    With w.UsedRange
        .AutoFilter 10, "*"
        .Copy Range("A" & Range("J" & Rows.Count).End(xlUp).Row + 1)
        .AutoFilter
    End With
Next
Rows(1).Delete 'supprime la 1ère ligne car elle est vide
Rows(1).Font.Bold = True 'gras
UsedRange.RemoveDuplicates [COLUMNS(A:AI)], Header:=xlNo 'supprime les lignes en doublon
Columns.AutoFit 'ajuste les largeurs
Application.EnableEvents = True 'réactive les évènements
End Sub
La feuille est mise à jour quand on modifie ou valide une cellule quelconque ou quand on l'active.

Bien noter que les lignes en doublon sont supprimées.
Bonjour job75

Merci pour ton fichier, j'ai testé il fonctionne très bien mais j'ai quelques remarques.

Les doublon ne doivent pas être supprimés, il faut retranscrire les 2 feuilles dans rapport.
Si j'ai plus que 2 feuille de données y a t-il un moyen facile de les ajouter ?
Et est-il possible de commencer la copie a partir de la ligne 10?

Merci bonne journée
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour netparty, le forum,

Voyez ce fichier (2) :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A1] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ligdeb&, w As Worksheet, P As Range
ligdeb = 9 '1ère ligne à copier
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Cells.Delete 'RAZ
For Each w In Sheets(Array("Données 1", "Données 2", "Feuil4")) 'liste à adapter
    If w.Cells(ligdeb, 10) <> "" Then w.Rows(ligdeb).Copy Rows(1)
    Set P = Intersect(w.Rows(ligdeb & ":" & w.Rows.Count), w.UsedRange)
    If Not P Is Nothing Then
        P.AutoFilter 10, "*"
        With Range("A" & Range("J" & Rows.Count).End(xlUp).Row + 1) '1ère ligne vide
            P.Copy .Cells
            .EntireRow.Delete
        End With
        P.AutoFilter
    End If
Next
Rows(1).Font.Bold = True 'gras
UsedRange.Sort Columns(10), xlAscending, Columns(4), , xlAscending, Columns(12), xlAscending, Header:=True 'tri sur 3 colonnes
Columns.AutoFit 'ajuste les largeurs
Application.EnableEvents = True 'réactive les évènements
End Sub
Je vois qu'il n'y a pas de lignes en doublon et donc que la macro de mon post #4 est incorrecte.

C'est [COLUMNS(A:AI)] qui ne va pas, je vais corriger.

A+
 

Pièces jointes

  • Copie de ligne(2).xlsm
    29.8 KB · Affichages: 5
Dernière édition:

netparty

XLDnaute Occasionnel
Bonjour netparty, le forum,

Voyez ce fichier (2) :
VB:
Private Sub Worksheet_Activate()
Worksheet_Change [A1] 'lance la macro
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ligdeb&, w As Worksheet, P As Range
ligdeb = 9 '1ère ligne à copier
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Cells.Delete 'RAZ
For Each w In Sheets(Array("Données 1", "Données 2", "Feuil4")) 'liste à adapter
    If w.Cells(ligdeb, 10) <> "" Then w.Rows(ligdeb).Copy Rows(1)
    Set P = Intersect(w.Rows(ligdeb + 1 & ":" & w.Rows.Count), w.UsedRange)
    If Not P Is Nothing Then
        P.AutoFilter 10, "*"
        P.Copy Range("A" & Range("J" & Rows.Count).End(xlUp).Row + 1)
        P.AutoFilter
    End If
Next
Rows(1).Font.Bold = True 'gras
UsedRange.Sort Columns(10), xlAscending, Columns(4), , xlAscending, Columns(12), xlAscending, Header:=True 'tri sur 3 colonnes
Columns.AutoFit 'ajuste les largeurs
Application.EnableEvents = True 'réactive les évènements
End Sub
Je vois qu'il n'y a pas de lignes en doublon et donc que la macro de mon post #4 est incorrecte.

C'est [COLUMNS(A:AI)] qui ne va pas, je vais corriger.

A+
Re job75

Top le fichier

Une dernière demande, est-il possible de ne pas trier les données exportée.

Merci
 

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83