combinaison entre 2 tableaux

  • Initiateur de la discussion Initiateur de la discussion heparti
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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😀" & .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😀" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Ajout = .Range("A1").CurrentRegion
End With
 
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😀" & .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😀" & .Range("D65536").End(xlUp).Row).NumberFormat = "00000000"
Ajout = .Range("A1").CurrentRegion
End With
 
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😀" & .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😀" & .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
 
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.
 
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.
 
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 ?).
 
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

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😀" & .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😀" & .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.
 
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 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
82
Réponses
5
Affichages
211
Réponses
5
Affichages
401
Retour