Comparer 2 tableaux, en créer un 3ème avec particularités

neal

XLDnaute Junior
Bonjour
Novice en macro, je cherche à en créer une pour comparer 2 tableaux. Et j’ai atteint la limite de mes compétences. Je me tourne donc vers vous en espérant trouver une solution.
Voici mon problème :

Je me retrouve avec deux tableaux dont les en têtes de colonne sont équivalents. Il y a à peu près une cinquantaine de colonnes et entre 100000 et 200000 lignes dans chaque tableau (oui c’est énorme, mais je n’ai pas le choix).

Dans les deux cas, en colonne A j’ai créé un concatener qui me permet d’avoir un code unique.
Je cherche à faire une macro pour comparer ces deux tableaux, en créant un 3ème tableau dans la feuil3 (attention, il y a un décalage dans les colonnes pour avoir un « commentaire » dans la colonne A du tableau de la Feuil3).

Le but est d’obtenir un tableau récapitulatif dans lequel j’ai toutes les données sans doublons provenant des tableaux en feuil1 et feuil2. Sachant que le tableau en Feuil1 sert de base, c’est lui dont les données sont justes.

Pour être sûr de tout avoir, j’ai pensé à cette méthodologie :

D’abord on compare le tableau en Feuil1 avec celui en Feuil2 et on créé un tableau en Feuil3

1- vérifier que le code unique en Feuil1 existe en Feuil2.
2- S’il existe, on colle la ligne de la Feuil1 dans la Feuil3.
3- S’il n’existe pas on colle aussi la ligne entière de la Feuil1 dans la Feuil3 et on met le fond de la cellule en rouge (pour montrer qu’il n’existe que dans la Feuil1).
4- Si le code existe dans les 2 feuilles, alors on compare chaque donnée de chaque colonne. Dès qu’il y a une différence, on met le fond de la cellule en rouge.
5- On passe à la ligne suivante dans la Feuil1


Ensuite on compare le tableau en Feuil2 avec celui créé en Feuil3 :

1- Vérifier que le code unique en Feuil2 existe en Feuil3.
2- S’il existe, on ne fait rien (il a déjà été comparé avant).
3- S’il n’existe pas, alors on colle la ligne entière de la Feuil2 dans la Feuil3 et on met le fond de la cellule du code en rouge.
4- On passe à la ligne suivante dans la feuil2.

Pour terminer, j’ai mis dans le tableau de la feuil3 une colonne en plus qui mettra le résultat de la comparaison pour chaque ligne :

- Existe en Feuil1 et en Feuil2, données équivalentes.
- Existe en Feuil1 et en Feuil2, données différentes.
- Existe en Feuil1, n’existe pas en Feuil2.
- Existe en Feuil2, n’existe pas en Feuil1.


Je précise que le temps d'exécution de la macro n'est pas important (même si elle tourne 5 heures par exemple). La priorité est le résultat.
Je joins un fichier excel avec les tableaux (sans les données, confidentielles :/)
Et je joins aussi une petite image créée sur Paint pour expliquer plus clairement ce que je cherche à faire.

Je vous remercie d'avance pour votre aide :)
 

Pièces jointes

  • Sans titre.jpg
    Sans titre.jpg
    17.3 KB · Affichages: 468
  • Sans titre.jpg
    Sans titre.jpg
    17.3 KB · Affichages: 550
  • Sans titre.jpg
    Sans titre.jpg
    17.3 KB · Affichages: 533
  • Classeur1.xlsm
    10.2 KB · Affichages: 543
  • Classeur1.xlsm
    10.2 KB · Affichages: 549
  • Classeur1.xlsm
    10.2 KB · Affichages: 440

neal

XLDnaute Junior
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

MA - GNI - FI - QUE !
J'ai lancé la macro globale mardi à 19h, elle s'est terminée dans la nuit entre mercredi et jeudi
MAIS
j'ai le résultat souhaité :D

Merci beaucoup PierreJean pour ton temps et bravo pour ton expertise, tu m'as sorti d'une grosse galère !
 

matperso87

XLDnaute Nouveau
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonjour,

tout d'abord je dois dire que je suis impressionné par l'expertise de Pierrejean !

Ensuite, voici ma demande en espérant que quelqu'un pourra m'aider !


J'ai besoin de comparer dans un même fichier 2 tableaux :
le 1er dans feuil1, le 2eme dans feuil2.

les tableaux sont organiser de la même facon avec les même colonnes mais avec plus ou moins de lignes. les informations présentes dans ces colonnes sont du type :
colonne A : Num client, colonne B : Nom client, colonne C : adresse, etc.. sur un peu plus de 10 colonnes

mon tableau dans la feuil1 est mon tableau de référence et je dois savoir quel sont les clients absents du tableau de la feuil2 par rapport à la feuil1.

J'ai besoin que les clients manquants soient affichés en feuil3 (pour impression) et que la ligne complète soit affichée.

j'ai bien essayé par moi même et/ou en cherchant des codes existants sur le net mais mon niveau en macro et VBA est tout simplement risible !

je remercie à l'avance le bon samaritain qui me consacrera un peu de temps !

cordialament

Mathieu
 

danielos

XLDnaute Nouveau
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonjour M. Pierrejean,

J'ai suivi avec attention ce fil par intérêt personnel ; ayant une situation proche à traiter.
Il s'agit de trouver rapidement les inscriptions nouvelles ainsi que les désinscriptions éventuelles.
Cependant lorsque j'applique la macro globale, j'ai dans le tableau créé des affichages incohérents.
Pour les lignes qui n'existaient pas c'est complètement ok de même pour celles qui sont équivalentes. Pour les lignes en données différentes, il n'y a pas de différence (du moins au premier regard car si la machine le dit...). Une ligne (la 57 dans la feuille Nouveaux) me surprend car elle est en rouge en indiquant données équivalentes.
Auriez-vous une piste sur l'origine de ces "bugs".
Voici au cas où mon fichier de travail. Les comparaisons se font sur les clés en BJ crées par concaténation des N° de licences et des épreuves où les personnes se sont inscrites (couple qui ne peut être qu'unique).

Vous en remerciant par avance,
 

Pièces jointes

  • Classeur2.xls
    189.5 KB · Affichages: 96
  • Classeur2.xls
    189.5 KB · Affichages: 85
  • Classeur2.xls
    189.5 KB · Affichages: 95

pierrejean

XLDnaute Barbatruc
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonjour danielos

Concernant la ligne 57:
Il s'agit probablement d'un résidu de la feuille Nouveaux
En effet après effacement complet de la feuille elle ne revient plus en rouge

Sheets("Nouveaux").Range("A2:BB" & Rows.Count).Clear
au lieu de
Sheets("Nouveaux").Range("A2:BB" & Rows.Count).Clearcontents

S'il y a d'autres bugs prière de me préciser ou ils se trouvent
 

Pièces jointes

  • Classeur2.xls
    183 KB · Affichages: 155
  • Classeur2.xls
    183 KB · Affichages: 113
  • Classeur2.xls
    183 KB · Affichages: 128

danielos

XLDnaute Nouveau
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonjour danielos

Concernant la ligne 57:
Il s'agit probablement d'un résidu de la feuille Nouveaux
En effet après effacement complet de la feuille elle ne revient plus en rouge

Sheets("Nouveaux").Range("A2:BB" & Rows.Count).Clear
au lieu de
Sheets("Nouveaux").Range("A2:BB" & Rows.Count).Clearcontents

S'il y a d'autres bugs prière de me préciser ou ils se trouvent

Merci Pierrejean pour cette correction sur le nettoyage de la feuille.
Pour les lignes indiquées "données différentes", où peuvent être les différences ?
Les lignes dans Liste_Origine sont un copier/coller de Liste avant importation de la nouvelle liste. Je ne vois donc pas qu'elles pourraient être ces différences. Le format des cellules pourrait-il jouer ?
C'est par pure curiosité car dans mon cas où il y a des nouvelles lignes, ou il en manque mais il ne peut y avoir entre les 2.

très cordialement,
Daniel
 

pierrejean

XLDnaute Barbatruc
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Re

Eh bien bravo !!
Il y avait bien un bug (ou plus précisément une erreur de programmation: remise à "" des témoins tot1 et tot2 )
Vérifie bien cette version
 

Pièces jointes

  • Classeur2.xls
    144 KB · Affichages: 109
  • Classeur2.xls
    144 KB · Affichages: 123
  • Classeur2.xls
    144 KB · Affichages: 126

danielos

XLDnaute Nouveau
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonjour Pierrejean,

Le bravo c'est moi qui vous l'adresse ! et même un très grand BRAVO.
Vous n'imaginez pas combien votre aide au travers de cette macro va m'être utile.
Merci beaucoup à vous M. Pierrejean, mais aussi à tous et à toutes qui répondez et nous aidez sur ce forum.

Au plaisir,
Daniel
 

JDU

XLDnaute Nouveau
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonjour à tous,

Je propose l'étape suivante. J'ai attaché un fichier excel qui doit subit également une comparaison.
Dans la feuille se trouve le genre de structure à comparer avec une identique en feuille 2 mais avec des insères ou des suppressions en plus.

Ce fichier reprèsente une arborescence de répertoire, j'ai besoin de comparer la nouvelle arborescence à l'ancienne en mettant en évidence les différences. Soit une même structure colorée (idéale) ou une autre idée originale mais lisible.

Attention la difficulté pour le code est de savoir le nombre d'élément dans la colonne ou dans la ligne. S'il est possible d'obtenir un temps exécution optimal se serait génial aussi.

En vous remerciant d'avance pour votre aide...
 

Pièces jointes

  • EssaiComparaison.xlsx
    9.4 KB · Affichages: 56

pierrejean

XLDnaute Barbatruc
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonjour JDU

et bienvenue sur XLD

Un essai
 

Pièces jointes

  • EssaiComparaison.xlsm
    25.8 KB · Affichages: 95
  • EssaiComparaison.xlsm
    25.8 KB · Affichages: 89
  • EssaiComparaison.xlsm
    25.8 KB · Affichages: 79

JDU

XLDnaute Nouveau
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonjour et merci pour la réponse rapide.

Une première ébauche prometteuse... Je vais repréciser un peu le petit projet et ce qui est possible.
Dans l'exemple que j'ai donné, il s'agit d'une arborescence de répertoires et fichiers (mais vous l'aurez compris) qui est créée en excel. Chaque colonne va représenter un niveau dans l'arbre et chaque ligne correspond à un fichier.

Ce qui va se passer c'est que je vais regénérer en page deux une arborescence (comme vous l'avez fait dans votre fichier) mais cette arborescence aura des caractéristiques:
- soit un fichier ou répertoire est supprimé (une/des ligne(s) disparaît en réalité) MAIS cela ne laissera pas de "trou" dans les lignes, tout l'ensemble sera remonté d'où la difficulté de savoir qu'il n'y a pas de différence à part l'élément supprimé.
- soit un fichier ou répertoire est ajouté ==> idem problème de la suppression
- soit un nom est modifié mais cela correspond à une suppresion pour moi.


Il me semble aussi que la boucle de réécriture en page 3 ne fonctionne pas bien, il manque un passage de ligne quelque part...

Merci d'avance si vous avez d'autres questions pour éclaircir...:cool:

PS: Supprimé en rouge et ajouté en vert
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Re

Pour ne pas trop bosser dans le vide ,peux-tu créer un petit fichier exemple avec 2 feuilles type et une 3eme avec le résultat attendu
D'autre part il serait intéressant de savoir précisément quelle ligne n'est pas passée
 

JDU

XLDnaute Nouveau
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonjour,

Voilà j'ai un petit exemple...

J'hésite à avoir la comparaison directement sur la feuille 2 (comme dans l'exemple attaché) ou bien sur une feuille 3 ou plus original sur un pop-up.

Sinon j'ai compris par après le "décalage" que j'avais remarqué c'est simplement le fait que tu mets dans la même case l'ancien et le nouveau nom. Ce n'est plus nécessaire suivant l'exemple.

Merci pour l'aide apportée, :cool:
 

Pièces jointes

  • EssaiComparaison.xlsm
    19 KB · Affichages: 63
  • EssaiComparaison.xlsm
    19 KB · Affichages: 74
  • EssaiComparaison.xlsm
    19 KB · Affichages: 75

aeryne

XLDnaute Junior
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

bonjour
je débute avec les macro et j'ai un projet très ressemblant à celui ci.
il s'agit de gestion d'emploi du temps.
sur un premier fichier j'ai mon projet de planning pour les employés, sur un second fichier qui lui est accessible aux employés, ils mettent leur demande de congés et repos.
chaque fichier contient 12 feuilles (une par mois).
j'ai uniquement réussi à créer une macro qui ouvre le fichier employé et qui copie et colle le tableau et referme le fichier employé. du coup je ne vois pas les modification qui sont effectuées. et ça ne marche que sur une seule feuille.
j'ai donc envisagé d'avoir une liste de comparaison entre les différences des 2 fichiers pour pouvoir voir si les demandes de congé sont acceptables avec le planning prévu et si je n'ai pas oublié de jours qui étaient désirés par les employés.
mon fichier contient des mises en forme automatique pour appliquer un code couleur pour les poste.
sinon le fichier contient simplement une liste de nom en une colonne et les dates en ligne.

je ne sais pas si c'est important de préciser que le fichier des employé est sur un serveur commun alors que mon fichier est uniquement sur mon ordinateur
 

Pièces jointes

  • Planning essai macro.xlsm
    84.1 KB · Affichages: 53
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : Comparer 2 tableaux, en créer un 3ème avec particularités

Bonsoir aeryne le forum
si tu veux que l'on t'aide, tu ouvres une nouvelle discussion, tu exposes ton problème avec un fichier joint ou un dossier joint en .zip si tu as plusieurs fichiers, et tu mets les explications dedans et je regarderai
bonne soirée
Papou:eek:
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 079
Membres
103 112
dernier inscrit
cuq-laet