combinaison entre 2 tableaux

heparti

XLDnaute Occasionnel
Bonsoir,

Je vous expose mon problème. J'ai 2 tableaux (plusieurs milliers de lignes chacun). Je souhaite comparer le contenu de chaque cellule de la colonne C du tableau de base avec chaque cellule de la colonne C du tableau d'ajout.

Si une concordance est trouvée, il faut alors comparer la cellule de la colonne M de chaque tableau, et si elles sont différentes, créer une nouvelle colonne à la fin de celle existante dans le tableau de base en dupliquant le contenu de la cellule de la colonne M du tableau d'ajout.

Je souhaite également que tous les ajouts se retrouvent dans cette nouvelle colonne qui sera en colonne P.

Toujours dans la d'une première concordance, puis d'une deuxième concordance, rien de doit s'afficher dans la nouvelle colonne P.

Autre obligation, si le contenu de la cellule C du tableau d'ajout n'est pas présent dans la colonne C du tableau de base, il faut que la ligne entière du tableau d'ajout soit dupliquée à la fin du tableau de base (si possible d'une couleur différente - soit la police ou le fond).

Enfin, dernière obligation, si le contenu de la cellule de la colonne C du tableau de base ne se retrouve pas dans la colonne C du tableau d'ajout, il faut alors qu'un message apparaisse dans la colonne P nouvellement créée (par exemple : personne partie).

Je vous remercie pour votre aide.

Les tableaux en pièce jointe sont représentatifs des tableaux originaux que je ne peux pas joindre pour diverses raisons, et je pourrais adapter les propositions sur les vrais documents.
 

Pièces jointes

  • tab_de_base.xls
    22.5 KB · Affichages: 53
  • tab_d_ajout.xls
    23 KB · Affichages: 43

Bebere

XLDnaute Barbatruc
Re : combinaison entre 2 tableaux

Heparti
ajout de 2 lignes qui formatent(à adapter)
ajouter ' ou une lettre devant les codes
With Sheets("base")
DerCb = .Range("A1").End(xlToRight).Column
.Cells(1, DerCb + 1) = "EtatAjout": .Cells(1, DerCb + 1).Interior.ColorIndex = 37 'bleu
.Range("D2:D" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Base = .Range("A1").CurrentRegion
End With

With Sheets("ajout")
DerC = .Range("A1").End(xlToRight).Column
.Cells(1, DerC + 1) = "ColX": .Cells(1, DerC + 2) = "ColF"
.Range("D2:D" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Ajout = .Range("A1").CurrentRegion
End With
 

Bebere

XLDnaute Barbatruc
Re : combinaison entre 2 tableaux

Heparti
ajouter une lettre ou ' devant le code

With Sheets("base")
DerCb = .Range("A1").End(xlToRight).Column
.Cells(1, DerCb + 1) = "EtatAjout": .Cells(1, DerCb + 1).Interior.ColorIndex = 37 'bleu
'ajout à adapter
.Range("D2:D" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Base = .Range("A1").CurrentRegion
End With

With Sheets("ajout")
DerC = .Range("A1").End(xlToRight).Column
.Cells(1, DerC + 1) = "ColX": .Cells(1, DerC + 2) = "ColF"
'ajout à adapter
.Range("D2:D" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Ajout = .Range("A1").CurrentRegion
End With
 

Bebere

XLDnaute Barbatruc
Re : combinaison entre 2 tableaux

Heparti c'est un extrait du code,le voiçi complet
Sub compareba() 'bebere
Dim Base As Variant, Ajout As Variant
Dim L As Long, La As Long, Lb As Long
Dim DerCb As Integer, DerC As Integer

Application.ScreenUpdating = True

With Sheets("base")
DerCb = .Range("A1").End(xlToRight).Column
.Cells(1, DerCb + 1) = "EtatAjout": .Cells(1, DerCb + 1).Interior.ColorIndex = 37 'bleu
.Range("D2:D" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Base = .Range("A1").CurrentRegion
End With

With Sheets("ajout")
DerC = .Range("A1").End(xlToRight).Column
.Cells(1, DerC + 1) = "ColX": .Cells(1, DerC + 2) = "ColF"
.Range("D2:D" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Ajout = .Range("A1").CurrentRegion
End With

For La = 2 To UBound(Ajout)
For Lb = 2 To UBound(Base)
If Ajout(La, DerC + 2) = "" Then 'colf
'colonne A à P correspond à 1 à 16
'pour base tu as 3 pour C tu changes en 4 pour D
'pour ajout, tu as 3 pour C tu changes en 12 pour L
If Base(Lb, 4) = Ajout(La, 3) Then 'compare droits
Base(Lb, DerCb + 1) = "x" 'colx
Ajout(La, DerC + 1) = "x": Ajout(La, DerC + 2) = "f" 'colf
If Base(Lb, 14) <> Ajout(La, 14) Then 'compare etat
Base(Lb, DerCb + 1) = Ajout(La, 14)
End If
End If
End If
Next Lb
Next La

With Sheets("base")
For Lb = 2 To UBound(Base)
If Base(Lb, DerCb + 1) <> "x" Then .Cells(Lb, DerCb + 1) = Base(Lb, DerCb + 1)
If Base(Lb, DerCb + 1) = "" Then .Cells(Lb, DerCb + 1) = "supprimé"
Next Lb
For La = 2 To UBound(Ajout)
If Ajout(La, DerC + 1) <> "x" Then
L = .Range("A65536").End(xlUp).Row + 1
For c = 1 To UBound(Ajout, 2) ' - 1
.Cells(L, c) = Ajout(La, c)
.Cells(L, c).Font.ColorIndex = 5 'bleu 3 rouge
Next c
End If
Next La
End With

With Sheets("ajout")
.Columns(DerC + 1).Clear
.Columns(DerC + 2).Clear
End With

Application.ScreenUpdating = True

End Sub
 

heparti

XLDnaute Occasionnel
Re : combinaison entre 2 tableaux

J'ai fait les test ce matin, et j'ai toujours le même problème dans la recopie du numéro de la colonne D.

Les numéros sur le premier tableau base sont par exemple ceux-ci :

000019900000000
000126400000000
000999700000000
001019700000000
010043600000000

Après l'exécution de la macro, c'est recopié ainsi :

2057700000000
5471100000000
10173100000000
10240100000000
21481000000000
52269900000000
60627700000000

Après la 2ème exécution de la macro pour un autre mois, j'obtiens dans la cellule D ceci :

36700000000
380700000000
1974200000000
11226500000000

avec un affichage pour les cellules :

36700000000
3,807E+11
1,9742E+12
1,12265E+13

De ce fait, la comparaison des cellules D du mois précédent génère l'affichage de message "supprimé" dans la dernière colonne pour le mois précédent car il y a divergence de cellule d'un mois sur l'autre.

Merci.
 

Bebere

XLDnaute Barbatruc
Re : combinaison entre 2 tableaux

bonjour Heparti
dans module2 tu trouves un code pour ajouter N devant un nombre
colonne à adapter actuellement "C"
à bientôt
 

Pièces jointes

  • tableau_bebere test.zip
    15.6 KB · Affichages: 21
  • tableau_bebere test.zip
    15.6 KB · Affichages: 18
  • tableau_bebere test.zip
    15.6 KB · Affichages: 16

heparti

XLDnaute Occasionnel
Re : combinaison entre 2 tableaux

Merci Bebere, tout fonctionne très bien. Je n'ai pas pu répondre avant car j'étais en déplacement cette fin de semaine.

Cependant, en présentant les résultats à mes collègues, plusieurs remarques sont remontées, ce qui modifie ma demande.

Je conserve cependant tes macros, mais voici ce que je souhaiterais que tu modifies dans la macro de ta réponse (post #19) :

Je souhaite que les ajouts de la feuille 'ajout' soient identifiables par l'ajout de la mention "nouveaux" dans une nouvelle colonne de la feuille 'ajout'.

Autre modification : les présents de la feuille 'base' mais absents de la feuille 'ajout' soient reportés dans la feuille 'ajout' en fin de tableau, d'une couleur différente.

De plus, je souhaite que lorsque quelqu'un est présent sur les feuilles 'ajout' et 'base', une comparaison de la cellule de la colonne 'E' intitulée "adresse" soit faite, et si l'adresse de la feuille 'ajout' est différente de l'adresse de la feuille 'base', un message 'déménagement' apparaisse dans une nouvelle colonne.

Merci pour ton aide précieuse.
 

Bebere

XLDnaute Barbatruc
Re : combinaison entre 2 tableaux

bonjour Heparti
le nouveau code est dans module3
à bientôt
 

Pièces jointes

  • tableauHepartiTestV1.zip
    19.3 KB · Affichages: 10
  • tableauHepartiTestV1.zip
    19.3 KB · Affichages: 13
  • tableauHepartiTestV1.zip
    19.3 KB · Affichages: 11

heparti

XLDnaute Occasionnel
Re : combinaison entre 2 tableaux

Merci Bebere, ça fonctionne sur le tableau de test, mais lorsque je fais un copier/coller de la macro sur le tableau définitif, ou lorsque j'insère les feuilles tu tableau définitif sur le tableau de test, ça ne fonctionne pas.

Je ne sais plus comment faire pour adapter la macro à mon tableau (quels numéros de colonne éventuellement modifier pour adapter lors de la comparaison pour affichage de 'nouveau' et de 'déménagement ?).
 

Bebere

XLDnaute Barbatruc
Re : combinaison entre 2 tableaux

bonjour Heparti
ajout de commentaires dans code
module2 code pour ajouter N devant le N°
module3 le nouveau code,bouton dans feuille ajout
à bientôt
 

Pièces jointes

  • tableauHepartiTestV1.zip
    21.3 KB · Affichages: 9
  • tableauHepartiTestV1.zip
    21.3 KB · Affichages: 10
  • tableauHepartiTestV1.zip
    21.3 KB · Affichages: 9

heparti

XLDnaute Occasionnel
Re : combinaison entre 2 tableaux

Merci Bebere, j'ai pu réaliser en partie effectuer ce que je souhaitais, mais je voudrais qu'une macro indépendante fasse le signalement d'un déménagement, en modifiant la macro ci-dessous, que j'utilise actuellement pour l'autre comparaison :

Sub compareba() 'bebere
Dim Base As Variant, Ajout As Variant
Dim L As Long, La As Long, Lb As Long
Dim DerCb As Integer, DerC As Integer

Application.ScreenUpdating = True

With Sheets("base")
DerCb = .Range("A1").End(xlToRight).Column
.Cells(1, DerCb + 1) = "EtatAjout": .Cells(1, DerCb + 1).Interior.ColorIndex = 37 'bleu
.Range("D2:D" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Base = .Range("A1").CurrentRegion
End With

With Sheets("ajout")
DerC = .Range("A1").End(xlToRight).Column
.Cells(1, DerC + 1) = "ColX": .Cells(1, DerC + 2) = "ColF"
.Range("D2:D" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Ajout = .Range("A1").CurrentRegion
End With

For La = 2 To UBound(Ajout)
For Lb = 2 To UBound(Base)
If Ajout(La, DerC + 2) = "" Then 'colf
'colonne A à P correspond à 1 à 16
'pour base tu as 3 pour C tu changes en 4 pour D
'pour ajout, tu as 3 pour C tu changes en 12 pour L
If Base(Lb, 4) = Ajout(La, 4) Then 'compare droits
Base(Lb, DerCb + 1) = "x" 'colx
Ajout(La, DerC + 1) = "x": Ajout(La, DerC + 2) = "f" 'colf
If Base(Lb, 12) <> Ajout(La, 12) Then 'compare etat
Base(Lb, DerCb + 1) = Ajout(La, 12)
End If
End If
End If
Next Lb
Next La

With Sheets("base")
For Lb = 2 To UBound(Base)
If Base(Lb, DerCb + 1) <> "x" Then .Cells(Lb, DerCb + 1) = Base(Lb, DerCb + 1)
If Base(Lb, DerCb + 1) = "" Then .Cells(Lb, DerCb + 1) = "nouveau"
Next Lb
For La = 2 To UBound(Ajout)
If Ajout(La, DerC + 1) <> "x" Then
L = .Range("A65536").End(xlUp).Row + 1
For C = 1 To UBound(Ajout, 2) ' - 1
.Cells(L, C) = Ajout(La, C)
.Cells(L, C).Font.ColorIndex = 5 'bleu 3 rouge
Next C
End If
Next La
End With

With Sheets("ajout")
.Columns(DerC + 1).Clear
.Columns(DerC + 2).Clear
End With

Application.ScreenUpdating = True

End Sub


La colonne de comparaison de déménagement est la colonne 'D', avec information du déménagement en colonne 'T' ou 'U'. J'ai essayé de supprimer une partie de la macro ci-dessus en modifiant la partie restante pour que la comparaison se fasse non plus sur la colonne 'L' mais sur la colonne 'E', en vain. J'ai des messages d'erreur ou aucun affichage.

Merci.
 

heparti

XLDnaute Occasionnel
Re : combinaison entre 2 tableaux

Déjà, merci pour tout ce que tu as réalisé Bebere, c'est fonctionnel et en place.

Peux-tu revoir la partie concernant la demande pour la comparaison des adresses.

En effet, je souhaite qu'après comparaison de la colonne D de chaque feuille, qui dans le cas de concordance, la comparaison de la cellule de la colonne E, si une divergence est détectée, soit affiché en colonne T ou U le contenu de la cellule de la colonne R "Secteur" de la feuille "base".

J'espère avoir été clair, si tel n'a pas été le cas, je complèterai ou reprendrai le détail de ma demande.

Merci encore ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 362
Messages
2 087 635
Membres
103 617
dernier inscrit
cisco1