EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

airsage

XLDnaute Junior
Bonjour à tous,

Dans le fichier excel ci joint, je voudrais faire 2 types de comparaisons sur 2 feuilles différentes :

Exemple 1 : J'ai une feuille "NEW" et une feuille "OLD". Je voudrais faire la comparaison entre les colonnes "Date de modification". Si les 2 dates sont identiques alors copier la ligne entière du ticket dans le feuille "DIFF"

Exemple 2 : J'ai une feuille "NEW" et une feuille "OLD". Je voudrais ajouter tous les tickets de la feuille "NEW" qui ne sont pas dans le feuille "OLD" et copier la ligne entière dans le feuille "AJOUT"

BONUS : dans ma macro, je note le début et la fin de la macro dans une msgbox mais je voudrais aussi que la date de fin apparaisse dans le feuille "DATE" en A1.

debuttrait = Now

<MA MACRO>

fintrait = Now

MsgBox "L'ensemble des traitements sont terminés." & vbCr & _
"Début : " & debuttrait & vbCr & _
"fin : " & fintrait

Merci par avance pour votre contribution
 

Pièces jointes

  • EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference).xlsx
    11 KB · Affichages: 75

Staple1600

XLDnaute Barbatruc
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Bonsoir à tous

airsage
La présence d'un *.xlsx nous indique qu'on ne trouvera aucun de tes essais de macros à l'intérieur.
Devons-nous donc comprendre que tu nous demandes de créer le code VBA de A à Z ?
Et que ton implication dans la résolution de ta question de résumera à : vouloir ?
je voudrais faire
Je voudrais ajouter
mais je voudrais aussi

mais comme disait Gabriel Meurier
"Qui veut ce qu'il désire, des efforts il doit fournir."

NB: As-tu consulté les archives du forum traitant de questions plus ou moins proches de ta question ?
As-tu fait des essais avec l'enregistreur de macros ?
 

airsage

XLDnaute Junior
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Bonjour Staple1600,

Mon fichier xlsb fait 6Mo avec des données "professionnelles", le fichier que j'ai envoyé et une copie de ce qui reste a faire pour finaliser le projet.

Il est vrai que la demande est un peu directive et très peu documentée.

Merci quand même pour avoir répondu a mon post.

Cordialement.
 

Staple1600

XLDnaute Barbatruc
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Re

airsage
Prends alors le temps de faire un fichier exemple anonymisé un peu plus étoffé avec la trace de tes essais VBA.
Cela tombe bien nous sommes en week-end prolongé pour la plupart ;)... donc ...tu as donc tout ton temps pour :

1) nous mitonner un fichier exemple un peu plus abouti
2) et pour ce faire les archives du forum pour t'aider dans cette tâche.

Une fois cela réalisé, on pourra te filer un coup de main si des difficultés persistent.
 

airsage

XLDnaute Junior
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Voici le code que j'ai pour l'exemple 2, ça me permet de trouver les nouveaux tickets, mais je ne trouve pas pour recuperer la ligne en entier :

Sub Add_New_Tickets()

Sheets("NEW").Select
Range("A1:A65000").Select
Selection.Copy
Sheets("AJOUT").Select
Range("A1:A65001").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Sheets("OLD").Select
Range("a1:A65000").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("AJOUT").Select
Range("B1:B65001").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

For i = 2 To Range("a" & Rows.Count).End(xlUp).Row
If Application.CountIf(Range("b:b"), Cells(i, "a")) = 0 Then
Range("c" & Rows.Count).End(xlUp)(2) = Cells(i, "a")
End If
Next i

End Sub
 

Staple1600

XLDnaute Barbatruc
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Re


J'ai un peu simplifié ton code
Qu'en penses-tu ?
Code:
Sub Add_New_Tickets()
Dim i&
With Sheets("NEW")
    .Range(.Cells(1, 1), .Cells(Rows.Count, "A").End(3)).Copy
    Sheets("AJOUT").Range("A1").PasteSpecial xlValues
End With
With Sheets("OLD")
    .Range(.Cells(1, 1), .Cells(Rows.Count, "A").End(3)).Copy
    Sheets("AJOUT").Range("B1").PasteSpecial xlValues
End With

With Sheets("AJOUT")
    For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
    If Application.CountIf(.Range("B:B"), .Cells(i, "A")) = 0 Then
    .Range("C" & Rows.Count).End(xlUp)(2) = .Cells(i, "A")
    End If
    Next i
End With
End Sub
 

airsage

XLDnaute Junior
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Bonjour Staple1600,

Merci pour l'amélioration du code, j'ai bien les nouveaux tickets cependant je bloque toujours sur la récupération de la ligne entière du ticket.

Cordialement
 

Staple1600

XLDnaute Barbatruc
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Bonjour à tous

airsage
Et comme ceci?
Code:
Sub Add_New_TicketsBis()
Dim c As Range
Application.ScreenUpdating = False
With Sheets("OLD")
  .Range(.Cells(2, 1), .Cells(Rows.Count, "A").End(3)).Resize(, 3).Name = "DOLD"
End With
Sheets("AJOUT").Range("A1:C1") = Array("Ticket", "Date ouverture", "Date modification")
With Sheets("NEW")
    For Each c In .Range(.Cells(2, 1), .Cells(Rows.Count, "A").End(3))
    If IsError(Application.VLookup(c, [DOLD], 1, 0)) Then
    c.Resize(, 3).Copy Sheets("AJOUT").Cells(Rows.Count, 1).End(3)(2)
    End If
    Next
End With
Sheets("AJOUT").Range("A1").CurrentRegion.Interior.Pattern = xlNone
Application.ScreenUpdating = True
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Re

airsage
De rien.
Mais tu n'as aucune question?
Cela veut donc dire que tu as compris les lignes de mon code VBA de M à T en passant par Z sans bifurquer par U ;) ?
 

airsage

XLDnaute Junior
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Staple1600,

Je suis novice en VBA, je suis pour le moment capable d'adapter du code existant pour l'adapter a mon besoin, mais pas encore créer du code de bout en bout ... d’où les différents "Je voudrais" ... ;-)

Il ne me reste qu'a trouver le bon code pour l'exemple 1.

Merci encore.
 

Staple1600

XLDnaute Barbatruc
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Re

Si j'ai bien compris en suivant cette directive à la lettre
Exemple 1 : J'ai une feuille "NEW" et une feuille "OLD". Je voudrais faire la comparaison entre les colonnes "Date de modification". Si les 2 dates sont identiques alors copier la ligne entière du ticket dans le feuille "DIFF"

Essaie avec ce code pour l'exemple 1
Code:
Sub Add_DIFF()
Dim a As Worksheet, b As Worksheet, i&, dm As Range
Set a = Sheets("NEW")
Set b = Sheets("OLD")
Set dm = b.Range(b.Cells(2, 3), b.Cells(Rows.Count, 3).End(3))
Sheets("DIFF").Range("A1:C1") = Array("Ticket", "Date ouverture", "Date modification")
For i = 2 To a.Cells(Rows.Count, 3).End(3).Row
If IsNumeric(Application.Match(a.Cells(i, 3), [dm], 0)) Then
Sheets("DIFF").Cells(Rows.Count, 1).End(3)(2).Resize(, 3).Value = a.Cells(i, 1).Resize(, 3).Value
End If
Next
End Sub
NB: Mon précédent message c'était juste une façon, justement parce tu es novice , à t'inviter à me poser moults questions sur mes lignes de codes pour que tu comprennes comment elles fonctionnent ;)
 
Dernière édition:

airsage

XLDnaute Junior
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Staple1600,

Le code pour exemple 1 fonctionne a une différence prêt.
Si je comprends le code il fait une comparaison dans la colonne 3 ("C") entre a ("NEW") et b ("OLD") et si c'est identique (If IsNumeric(Application.Match(a.Cells(i, 3), [dm], 0))), il copie la ligne (les 3 premiers colonnes) dans "DIFF".

Par contre il copie aussi les lignes des tickets qui sont manquants dans les feuilles "NEW" et "OLD"

Comment c'est possible puisque on compare 2 valeurs ?


Cordialement.
 

Staple1600

XLDnaute Barbatruc
Re : EXCEL - VBA - Comparaison entre 2 feuilles (ajout et difference)

Re

La macro fait ce que j'ai compris dans les explications de ton exemple 1
Exemple 1 : J'ai une feuille "NEW" et une feuille "OLD". Je voudrais faire la comparaison entre les colonnes "Date de modification". Si les 2 dates sont identiques alors copier la ligne entière du ticket dans le feuille "DIFF"
Donc si toutes les dates déjà présentes sur la feuille OLD sont identifiées sur la feuille NEW alors les cellules (Ax:Cx) sont sont copiées sur la feuille DIFF
Le souci avec ce code c'est qu'il y a des doublons sur la feuille OLD.

Joint un exemple avec le résultat que tu souhaites obtenu manuellement sur la feuille DIFF.
J'adapterai la macro en conséquence.
 

Discussions similaires

Réponses
2
Affichages
113

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 009
dernier inscrit
dede972