Macro permanente pour recopier une ligne dans une autre feuille

Résolu
Phildemarseille Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
Phildemarseille Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
sur XP, avec Excel 2000

j'ai un tableau de compta avec deux feuilles.
Dans la première, je rentre toutes les factures qui m'arrivent.
Je voudrais que dans la deuxième, soient dupliquées automatiquement les lignes qui correspondent à un "Service concerné" (colonne M) portant le code 640.

J'ai bien trouvé une macro qui réalise cette opération mais je ne sais pas comment la rendre active en permanence, sans recopier toutes les lignes concernées chaque fois !?

Sub Transfert_lignes_sur_autre_feuille()
'
' Transfert_lignes_sur_autre_feuille Macro
' Macro enregistrée le 30/05/2013 par vdm
'
' Touche de raccourci du clavier: Ctrl+f
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets("Patrimoine").Activate

Col = "M"
NumLig = 3
With Sheets("Général")
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 4 To NbrLig
If .Cells(Lig, Col).Value = "640" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Sheets("Patrimoine").Cells(NumLig, 1).Insert Shift:=xlDown

End If
Next
End With

End Sub

Je dois ajouter que je ne touche pas du tout ma bille en VB, merci donc d'être très clair ... et très patient.

Au plaisir de vous lire.
Phil
A voir également:

6 réponses

eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

Si j'ai bien compris ton soucis, le plus simple serait que tu ajoutes une colonne ou la macro met un x lorsque la ligne a été copiée.
Au passage suivant tu testes cette colonne pour ne copier que les nouvelles lignes.
Tu peux masquer cette colonne.
Exemple sur N :
....
            If .Cells(Lig, Col).Value = "640" And .Cells(Lig, "N").Value = "" Then
                .Cells(Lig, "N") = "x"
                .Cells(Lig, Col).EntireRow.Copy
....

eric


Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
1
Phildemarseille Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonjour Eriiic,
j'ai intégré tes lignes dans la macro mais elle recopie toujours l'intégralité des lignes marquées 640, y compris celles comportant un "x" dans la colonne N (que j'ai rajouté) ??

Je n'ai peut être pas inséré au bon endroit ? :
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets("Patrimoine").Activate

Col = "M"
NumLig = 3
With Sheets("Général")
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 4 To NbrLig
If .Cells(Lig, Col).Value = "640" Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Sheets("Patrimoine").Cells(NumLig, 1).Insert Shift:=xlDown
If .Cells(Lig, Col).Value = "640" And .Cells(Lig, "N").Value = "" Then .Cells(Lig, "N") = "x"

End If
Next
End With

End Sub
1
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

dés que tu auras mis un petit fichier de tester on pourra regarder.
Déposer le fichier xls (réduit au nécessaire et anonymisé) sur cjoint.com et coller ici le lien fourni.

eric
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Re,

essaie avec :
        For Lig = 4 To NbrLig
            If .Cells(Lig, Col).Value = "640" And .Cells(Lig, "N") = "" Then
                .Cells(Lig, Col).EntireRow.Copy
                Sheets("Patrimoine").Cells(NumLig, 1).Insert Shift:=xlDown
                .Cells(Lig, "N") = "x"
                NumLig = NumLig + 1
            End If
        Next Lig

eric

PS: en début de macro ajoute :
application.screenupdating=false
ça fera plus joli et ça ira plus vite
Remettre avec application.screenupdating=true en fin de macro

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
1
Phildemarseille Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   2
 
Eriiic bonjour,

https://www.cjoint.com/?3EFo03GcIx1

Voilà le fichier en question.

Merci de ta patience !

Phil
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phildemarseille Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   2
 
Super, ça marche !
Seul hic, ça me colle les nouvelles lignes en haut du tableau, alors qu'elles devraient venir à la suite, les dates de la colonne "A" étant chronologiques ...

As-tu encore un peu de patience à me consacrer ?
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Elles sortent tel que tu l'as réalisé ;-)
Termine par tri à ce moment là :
[A2].CurrentRegion.Sort Key1:=Range("A3"), Order1:=xlDescending, Header:=xlYes
(ou xlAscending)

eric
0
Phildemarseille Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci beaucoup Eric !
Tout fonctionne parfaitement.

Il ne me reste plus qu'à créer un bouton à l'usage de mes collègues pour remplacer le "Ctrl + f" mais je ne vais pas t'embêter avec ça, je vais certainement trouver la formule au coin du net ...

Merci encore de ton aide précieuse.

Phil
0