Doublon avec condition entre 2 feuilles Excel

Résolu/Fermé
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 - Modifié le 4 sept. 2018 à 08:16
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 - 5 sept. 2018 à 14:57
Bonjour,

Je souhaite traiter des doublons sur la colonne A (Nº de commande) et cela entre 2 feuilles mais sur une condition qui se trouve être « le statut » de la commande.

Je m’explique,

La feuille 1 comporte toute les commandes à imprimer de la veille. Tous les matins je réalise un export dans la feuilles 2 pour récupérer les nouvelles commandes à imprimer ainsi que l’état de toutes les autres, anciennes commandes qui ont put êtres imprimées la veille ou jusqu’à deux mois d’historique.

Je sais traiter les doublons sur le Nº de commande
mais comment faire pour que dans ma feuille 1, seule les commandes à imprimer soient conservées ?

Un exemple :

Aujourd’hui sur la feuille 1, j’ai la commande Nº200 à imprimer
Demain, quand je collerais mon export en feuille 2, j’aurais aussi la commande Nº200 mais cette fois avec le statut (imprimée) ou bien peut être encore le statut à imprimer.

Je souhaiterai donc que la feuille 1 supprime cette commande si elle a le statut « imprimée », mais que si dans ma feuille 2 j’ai encore un statut (a imprimer) la feuille 1 conserve cette commande.

Le but est de ne conserver en feuille 1, de l’export collé en feuille 2, seulement les nouvelles commandes et de purger les commandes déjà imprimée de la feuille 1, le statut imprimée vient de l’export et non de la feuille 1.

J'ai réalisés plusieurs tuto sur les doublons mais je n'arrive pas à les adapter à ce que je souhaite faire.

Si toute fois quelqu’un a un début d’aide un grand merci.

Mon fichier Excel comporte 2 feuilles avec les mêmes colonnes de A à P.
Les N° de commande sont en colonne A et le statut en colonne M.

Mon fichier : https://cjoint.com/c/HIegoU5lUhQ
A voir également:

1 réponse

M-12 Messages postés 1333 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 8 avril 2023 299
4 sept. 2018 à 09:46
Bonjour,

Teste avec une double boucle qui compare les deux valeurs de la colonne A et qui supprime en feuil 1 si la colonne M est notée "Imprimée"
Sub extract()
Dim Ws As Worksheet
Dim Wd As Worksheet
Dim i%, j%, DlWs%, DlWd%

Set Ws = Sheets("Feuil1")
Set Wd = Sheets("Feuil2")
DlWs = Ws.Range("A" & Rows.Count).End(xlUp).Row
DlWd = Wd.Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To DlWs
For j = 2 To DlWd
If Ws.Cells(i, 1) = Wd.Cells(j, 1) And Wd.Cells(j, 13).Value = "Imprimée" Then
Ws.Rows(i).Delete shift:=xlUp
End If
Next j
Next i
End Sub
0
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019
4 sept. 2018 à 10:07
Bonjour M-12 et grand merci,

C'est exactement ce que je cherchais à réaliser à un détail prés,
que les nouvelles commandes de la feuille 2 soient également collées dans la feuille 1 ainsi que la date du jour de l'export en colonne Q et cela pour chaque nouvelle commande seulement et non pour celles déjà présentes en feuille 1.
0
M-12 Messages postés 1333 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 8 avril 2023 299
4 sept. 2018 à 10:44
Re,

Teste ceci en lancant la macro depuis la feuille 2
Sub extract()
Dim Ws As Worksheet
Dim Wd As Worksheet
Dim i%, j%, DlWs%, DlWd%

Set Ws = Sheets("Feuil1")
Set Wd = Sheets("Feuil2")
DlWs = Ws.Range("A" & Rows.Count).End(xlUp).Row
DlWd = Wd.Range("A" & Rows.Count).End(xlUp).Row
i = 2
For j = 2 To DlWd
If Ws.Cells(i, 1) = Wd.Cells(j, 1) And Wd.Cells(j, 13).Value = "Imprimée" Then
Ws.Rows(i).Delete shift:=xlUp
End If
If Wd.Cells(j, 13).Value = "Imprimée" Then
i = i + 1
Else
Wd.Range(Cells(j, 1), Cells(j, 16)).Copy Ws.Cells(i, 1)
Ws.Cells(i, 17).Value = CDate(Date)
i = i + 1
End If
Next j
End Sub
0
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 > M-12 Messages postés 1333 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 8 avril 2023
Modifié le 4 sept. 2018 à 11:12
C'est super ! vraiment merci,

un dernier détail, je retrouve dans la feuille 1 une commande à imprimer en double et je pense que cela vient de la date qui se colle en colonne Q.

Je m'explique, chaque jour en collant l'export dans la feuille 2, suite à ton code la date du jour se colle pour chaque nouvelle commande dans la feuille 1 sauf que une commande qui serait restée à imprimer de la veille dans la feuille 1 à du coup déjà une date suite à l'export de la veille, donc en faite il ne faudrait pas coller de date en colonne Q de la feuille 1 si il y a déjà une date, commande déjà exportée la veille mais qui n'a pas encore été imprimée.

Tout cela est du au faite que les exports ne possèdent pas de date de commande passée donc obligé à chaque nouvelle commande d'y agrémenter une date du jour mais uniquement pour les nouvelles commandes et non celle déjà présentes dans la feuille 1 qui ont reçues leur date lors de l'export de la veille.
0
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019 > AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019
Modifié le 4 sept. 2018 à 17:29
Mince, j'ai été un peu vite, en faite les nouvelles commandes de la feuille 2 écrasent des commandes à imprimer de la feuilles 1 quand le code les colles, je pense que c'est par ce que le code ne cherche pas la dernière ligne vide de la feuille 1.
0
AstraLife Messages postés 98 Date d'inscription lundi 2 octobre 2017 Statut Membre Dernière intervention 1 juillet 2019
Modifié le 5 sept. 2018 à 10:36
Bonjour,

Je reviens sur le code proposé par M-12 qui fonctionne très bien,

J'ai un seul problème au niveau du collage de la date en fin de procédure,

Je souhaite coller la date en colonne Q de la feuille 1 mais uniquement pour les nouvelles commandes trouvées en feuil 2 et qui ne sont pas encore en feuille 1.

Pour l'instant la procédure agrémente bien la date pour les nouvelles commandes issues de la feuille 2 mais change aussi les dates des commandes à imprimées déjà présente sur la feuille 1 de la veille.

Sub extract()
 Dim Ws As Worksheet
 Dim Wd As Worksheet
 Dim i%, j%, DlWs%, DlWd%

 Set Ws = Sheets("Feuil1")
 Set Wd = Sheets("Feuil2")
 DlWs = Ws.Range("A" & Rows.Count).End(xlUp).Row
 DlWd = Wd.Range("A" & Rows.Count).End(xlUp).Row
 i = 2
 For j = 2 To DlWd
 If Ws.Cells(i, 1) = Wd.Cells(j, 1) And Wd.Cells(j, 13).Value = "Imprimée" Then
 Ws.Rows(i).Delete shift:=xlUp
 End If
 If Wd.Cells(j, 13).Value = "Imprimée" Then
 i = i + 1
 Else
 Wd.Range(Cells(j, 1), Cells(j, 16)).Copy Ws.Cells(i, 1)
 Ws.Cells(i, 17).Value = CDate(Date)
 i = i + 1
 End If
 Next j
End Sub
0