Couper, coller des lignes suivant une condition

glm

XLDnaute Occasionnel
Bonjour à tous

je cherche à copier des lignes suivant une valeur "F" dans la colonne C de la feuil1
vers la feuil 2 tout en respectant la structure du fichier.
Je vous joint un exemple de mon fichier pour faciliter ma demande.
Sur cet excellent forum, je trouve des macros pour supprimer des lignes par rapport à une conddition
par contre je suis perdu dès qu'il faut jongler avec les deux (copier et supprimer)
Merci pour votre aide précieuse
 

Pièces jointes

  • Classeur1.xlsm
    21.9 KB · Affichages: 37
  • Classeur1.xlsm
    21.9 KB · Affichages: 47
  • Classeur1.xlsm
    21.9 KB · Affichages: 44

Paf

XLDnaute Barbatruc
Re : Couper, coller des lignes suivant une condition

Bonjour

ci dessous un code qui copie l'ensemble des données de la feuille Feuil1 vers une autre feuille (ici Feuil4), puis supprime les lignes différentes où colonne C différente de F (et de # pour garder les lignes de titres)
Code:
Private Sub CommandButton2_Click()
 Dim DerLig As Long

 Dim WS1 As Worksheet, WS2 As Worksheet
 Dim i

 Set WS1 = Worksheets("Feuil1") 'Feuille origine . à adapter
 Set WS2 = Worksheets("Feuil4") 'Feuille destination. à adapter

 DerLig = WS1.Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne de données

 'copie des données en feuille destination
 WS1.Range("A10:I" & DerLig).Copy WS2.Range("A10")

 'suppression des lignes <> F et <> #
 For i = DerLig To 11 Step -1    ' on arrete à ligne 11 puisqu'après on n'est plus dans les données
    If WS2.Cells(i, 3) <> "F" And WS2.Cells(i, 3) <> "#" Then WS2.Rows(i).Delete shift:=xlUp
 Next
End Sub

A+
 

glm

XLDnaute Occasionnel
Re : Couper, coller des lignes suivant une condition

Bonsoir
Merci pour votre aide
de ce que je comprends du code
vous copier la feuil1 dans la feuil4
et vous supprimer dans la feuil4 tout sauf "F" et "#"
Ce n'est pas tout a fait ça, désolé. Pour moi, ce n'est pas si facile à poser ;)
je me réexplique
dans l'exemple
dans la feuil1 transférer toutes les lignes qui contiennent "F" (dans le colonne C) vers la feuil2
et les classer à la suite des autres lignes existantes
ex: les lignes12, 14,15,16,17 doivent être transférer dans la feuil2 entre les lignes 18 et 19
idem pour la ligne 21de la feuil1 vers la feuil2 entre les lignes 20 et 21
idem pour la ligne 24 de la feuil1 vers la feuil2 entre les lignes 22 et 23
etc...
la feuil 1 à la fin ne doit plus avoir de lignes "F" (valeur de la colonne C) elles sont toutes dans la feuil2
Merci de votre aide
 

Paf

XLDnaute Barbatruc
Re : Couper, coller des lignes suivant une condition

re bonjour,

effectivement je m'étais arrêté à
je cherche à copier des lignes suivant une valeur "F" dans la colonne C de la feuil1
vers la feuil 2 tout en respectant la structure du fichier.

sans voir qu' il y avait déjà des données autres que celles copiées, en feuille Feuil2.

Je vais réviser ma copie

A+
 

Paf

XLDnaute Barbatruc
Re : Couper, coller des lignes suivant une condition

Re

ça semble mieux coller au besoin:
Code:
Sub glm()
Dim i, j, c1, c2, NumLigne
Dim Liste, DerLig1, Limite1(5)
Dim DerLig2, Limite2(5)
Dim WS1 As Worksheet, WS2 As Worksheet

Set WS1 = Worksheets("Feuil1")
Set WS2 = Worksheets("Feuil2")

DerLig1 = WS1.Range("A" & Rows.Count).End(xlUp).Row + 1
DerLig2 = WS2.Range("A" & Rows.Count).End(xlUp).Row + 1
Liste = Array("NEP", "PROCESS", "ECRE / FLOTT", "DMC")

'' cherche fin de plage de chaque job
For i = 1 To 3
    Set c1 = WS1.Range("E11:E" & DerLig1).Find(Liste(i), LookIn:=xlValues)
    Limite1(i) = c1.Row
    Set c2 = WS2.Range("E11:E" & DerLig2).Find(Liste(i), LookIn:=xlValues)
    Limite2(i) = c2.Row
Next
Limite1(0) = 11
Limite1(4) = DerLig1
Limite2(0) = 11
Limite2(4) = DerLig2

'pour chaque plage recherche F en F1 et copie en F2
For i = 4 To 1 Step -1
NumLigne = Limite2(i)
    For j = Limite1(i) - 1 To Limite1(i - 1) + 1 Step -1
        If WS1.Cells(j, 3) = "F" Then
            WS1.Rows(j).Copy
            WS2.Rows(NumLigne).Insert Shift:=xlDown
            WS1.Rows(j).Delete Shift:=xlUp
            NumLigne = NumLigne + 1
        End If
    Next
Next
End Sub

A+
 

glm

XLDnaute Occasionnel
Re : Couper, coller des lignes suivant une condition

Bonjour
merci pour votre travail
Désolé pour la réponse tardive, je suis en cours d'adapter votre code à mon fichier
Pour l'instant cela fonctionne, j'ai encore quelques bugs que je dois regarder
Par contre, quand je lance la macro: il mets plusieurs minutes à s'executer
le fichier contient environ 300 lignes sur la feuil1 et 2500 lignes sur la feuil2
Gilles
 

Paf

XLDnaute Barbatruc
Re : Couper, coller des lignes suivant une condition

Bonjour,

Pour accélérer le traitement (a priori sensiblement), il faut désactiver le rafraichissement écran avant le traitement pour le réactiver à la fin.

Rajouter :
en début de code :Application.ScreenUpdating = False
en fin de code :Application.ScreenUpdating = True

Bonne suite
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T