Macro permanente pour recopier une ligne dans une autre feuille

Résolu/Fermé
Phildemarseille Messages postés 17 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 29 avril 2014 - 30 mai 2013 à 17:16
Phildemarseille Messages postés 17 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 29 avril 2014 - 3 juin 2013 à 10:22
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 30/05/2013 à 18:40
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 jeudi 30 mai 2013 Statut Membre Dernière intervention 29 avril 2014 2
31 mai 2013 à 08:58
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 31/05/2013 à 09:50
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 31/05/2013 à 15:12
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 jeudi 30 mai 2013 Statut Membre Dernière intervention 29 avril 2014 2
31 mai 2013 à 14:55
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 jeudi 30 mai 2013 Statut Membre Dernière intervention 29 avril 2014 2
31 mai 2013 à 16:02
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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
31 mai 2013 à 17:06
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 jeudi 30 mai 2013 Statut Membre Dernière intervention 29 avril 2014 2
3 juin 2013 à 10:22
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