XL 2013 Aide pour macro

débutantplus

XLDnaute Junior
Bonjour à tous,
J'ai un soucis sur une macro, cette macro a pour but de recopier des lignes d'une feuille à l'autre si elles possèdent le bon critère.
La macro fonctionne, le seul problème est qu'à chaque fois que je l'utilise elle recopie les lignes à la suite de celles qui avaient déjà été recopiés.
Je souhaiterai qu'elle envoi les données à recopier toujours en partant de la même cellule.
Sub Copie_Non_Livre()
Application.ScreenUpdating = False
Dim CMD As Worksheet, TDB As Worksheet, DerligSrc&, DerligDst&, i&, NB&

Set CMD = Worksheets("COMMANDES")
Set TDB = Worksheets("Tableau de bord")

With CMD
DerligSrc = .Range("B" & Rows.Count).End(xlUp).Row
DerligDst = TDB.Range("A" & Rows.Count).End(xlUp).Row + 1
[A8] = 1: .Range("A8:A" & DerligSrc).DataSeries
.Range("A8:O" & DerligSrc).Sort Key1:=.Range("O8:O" & DerligSrc), Order1:=2, Header:=xlNo
NB = WorksheetFunction.CountIf(.Range("O8:O65500"), "Non livré") - 1
TDB.Range("B" & DerligDst - n & ":M" & DerligDst + NB) = .Range("D8:O" & 8 + NB).Value
TDB.Range("A" & DerligDst - n & ":A" & DerligDst + NB) = .Range("B8:B" & 8 + NB).Value
.Range("A8:O" & DerligSrc).Sort Key1:=.Range("A8:A" & DerligSrc), Order1:=1, Header:=xlNo
.Range("A8:A" & DerligSrc).ClearContents
End With
Set CMD = Nothing: Set TDB = Nothing
End Sub

Private Sub CommandButton1_Click()
Copie_Non_Livre
End Sub
Merci pour votre aide
 

Pièces jointes

  • Classeur13 - Copie.xlsm
    692.6 KB · Affichages: 10
Solution
Bonjour @débutantplus , @patty58

Quelques remarques :

1) Mettre des tableaux structurés les uns en dessous des autres est un réel risque de perte de données.

2)Ton problème vient du fait que tu as justement un tableau structuré donc tu peux mettre des données :

==> A) Soit à la suite des précédentes dans ton tableau
==> B) Soit on vide le tableau et on remet des nouvelles valeurs à la place des précédentes

Si j'ai compris (mais tu n'es pas très clair) tu veux l'option B

3) J'ai incorporé la colonne disponibilité au tableau

1648121508885.png


==>La version de @patty58 risque de te poser un problème car il n'efface pas les données du tableau

*Merci de ton retour

@Phil69970

patty58

XLDnaute Occasionnel
Bonjour
Non mais je pense que "DerligDst " doit être égal à la ligne à partir de laquelle tu veux insérer tes données, donc pas la dernière ligne.
Je dois dire que je n'ai pas vu plus loin mais vu ce que tu dis que c'est toujours à la suite cela ne m'étonne pas
A +
 

débutantplus

XLDnaute Junior
Bonjour Patty58,
Le problème étant que même si supprime les données du tableau et que je relance la macro il va m'insérer les données à la suite des anciennes alors que j'ai supprimé les données du tableau comme si il gardait en mémoire l'emplacement de la dernière ligne vide.
Avez vous une solution pour palier à ce problème ?
Cordialement
 

patty58

XLDnaute Occasionnel
Bonjour Debutant
Tu n'es pas du tout clair dans ta demande et si j'ai bien compris ce que tu souhaites, tu aurais déjà pu corriger tout seul avec ce que je t'ai dit
Si tu veux toujours partir du début de ton tableau , alors mets cela :
Code:
Sub Copie_Non_Livre()
Application.ScreenUpdating = False
Dim CMD As Worksheet, TDB As Worksheet, DerligSrc&, DerligDst&, i&, NB&

Set CMD = Worksheets("COMMANDES")
Set TDB = Worksheets("Tableau de bord")

With CMD
    DerligSrc = .Range("B" & Rows.Count).End(xlUp).Row
    DerligDst = 48
    [A8] = 1: .Range("A8:A" & DerligSrc).DataSeries
    .Range("A8:O" & DerligSrc).Sort Key1:=.Range("O8:O" & DerligSrc), Order1:=2, Header:=xlNo
    NB = WorksheetFunction.CountIf(.Range("O8:O65500"), "Non livré") - 1
    TDB.Range("B" & DerligDst - n & ":M" & DerligDst + NB) = .Range("D8:O" & 8 + NB).Value
    TDB.Range("A" & DerligDst - n & ":A" & DerligDst + NB) = .Range("B8:B" & 8 + NB).Value
    .Range("A8:O" & DerligSrc).Sort Key1:=.Range("A8:A" & DerligSrc), Order1:=1, Header:=xlNo
    .Range("A8:A" & DerligSrc).ClearContents
End With
Set CMD = Nothing: Set TDB = Nothing
End Sub
DerligDst = 48
D'ailleurs dans ce cas elle ne devrait plus s'appeler dernière ligne , mais première ligne.
Si ce n'est pas ce que tu veux, alors je n'ai rien compris : soit plus explicite, car je suis stupide

Bonne journée
 

Phil69970

XLDnaute Barbatruc
Bonjour @débutantplus , @patty58

Quelques remarques :

1) Mettre des tableaux structurés les uns en dessous des autres est un réel risque de perte de données.

2)Ton problème vient du fait que tu as justement un tableau structuré donc tu peux mettre des données :

==> A) Soit à la suite des précédentes dans ton tableau
==> B) Soit on vide le tableau et on remet des nouvelles valeurs à la place des précédentes

Si j'ai compris (mais tu n'es pas très clair) tu veux l'option B

3) J'ai incorporé la colonne disponibilité au tableau

1648121508885.png


==>La version de @patty58 risque de te poser un problème car il n'efface pas les données du tableau

*Merci de ton retour

@Phil69970
 

Pièces jointes

  • Copie tbl V1.xlsm
    713.6 KB · Affichages: 2

débutantplus

XLDnaute Junior
Bonjour @débutantplus , @patty58

Quelques remarques :

1) Mettre des tableaux structurés les uns en dessous des autres est un réel risque de perte de données.

2)Ton problème vient du fait que tu as justement un tableau structuré donc tu peux mettre des données :

==> A) Soit à la suite des précédentes dans ton tableau
==> B) Soit on vide le tableau et on remet des nouvelles valeurs à la place des précédentes

Si j'ai compris (mais tu n'es pas très clair) tu veux l'option B

3) J'ai incorporé la colonne disponibilité au tableau

Regarde la pièce jointe 1134687

==>La version de @patty58 risque de te poser un problème car il n'efface pas les données du tableau

*Merci de ton retour

@Phil69970
Bonjour Phil69970,
Merci pour votre réponse, c'était bien l'option B que je souhaitais.
J'ai remarqué que sur votre fichier les dates de la feuille "Commande" avait été classé de la plus récente à la plus lointaine et non l'inverse.
Avait vous réalisé une manipulation spécifique ?
 

débutantplus

XLDnaute Junior
Pas exactement ...
Ce serait parfait comme ceci : Dans cette colonne ce sont les dates de livraison et il faudrait qu'elle soit classé dans un ordre chronologique de plus récent au plus éloigné ( en haut 15/03/2022 et en bas 27/06/2022)
1648132549255.png

Un autre question qui va s'en doute vous paraitre bête mais lorsque la macro s'effectue les données de cette colonne perdent leurs formats et deviennent des chiffres standards savez vous pourquoi ?
 

Statistiques des forums

Discussions
312 112
Messages
2 085 415
Membres
102 885
dernier inscrit
AISSOU