comparaison de tableaux excel à 2 dimensions (matrices)

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 !

lelfedesboa

XLDnaute Nouveau
Bonjour à tous,

J'espère poster au bon endroit 🙂
Voilà mon problème. Je dois faire une comparaison de 2 fichiers excel en vba. jusque là rien de très compliqué.
Ces 2 fichiers représentent une version ancienne et nouvelle de matrices de compatibilité entre des formules et des options.
Chaque fichier est constitué d'intitulés classés par ordre alphabétique sur la colonne A et sur la ligne 1.
A chaque nouvelle version, il peut y avoir des lignes et/ou des colonnes en + ou en -.
A l'intersection de chaque ligne/colonne, se trouve (ou pas) uniquement des X indiquant la compatibilité (ou non) des formules/options.
Je veux générer un fichier final dans lequel seraient contenues les différences rencontrées lors de l'analyse des fichiers, et (si possible) inserer des colonnes vides dans mon nouveau fichier à l'endroit ou certaines auront été supprimées afin que mes croix coincident avec les colonnes d'origine.
Je sais pas si je suis assez claire sur mon problème, mais j'avoue que je ne sais pas trop par ou m'y prendre pour comparer tout ça.
Je poste ici pour faire un brainstorming, et éveiller quelques idées pour commencer 😉
merci d'avance pour vos réponses !
 
Dernière édition:
Re : comparaison de tableaux excel à 2 dimensions (matrices)

Bonjour job75, tout le monde,

J'ai un petit souci avec la comparaison, car certains entêtes ne sont différenciés que par des majuscules (offert/Offert), et les croix ne sont donc pas replacées correctement (je pense que la comparaison ne tient pas compte de la casse).

Je vous joins des nouveaux fichiers de test avec cette contrainte, que je ne peux malheureusement pas contourner car ce sont les noms utilisés, et qu'ils ne sont différenciés (malheureusement) que de cette façon.

J'ai rajouté la sélection des fichiers d'entrée, afin de ne pas avoir un nom fixé dans le code, et qu'il ne soit pas nécessaire de les ouvrir avant d'exécuter la macro.
Code:
MsgBox "Choisir ancien fichier matrice"
ancien = Application.GetOpenFilename
ancien = Split(ancien, "\")(UBound(Split(ancien, "\")))
Set F1 = Workbooks(ancien).Sheets(1)

MsgBox "Choisir nouveau fichier matrice"
nouveau = Application.GetOpenFilename
nouveau = Split(nouveau, "\")(UBound(Split(nouveau, "\")))
Set F2 = Workbooks(nouveau).Sheets(1)

Merci pour votre aide !
 

Pièces jointes

Re : comparaison de tableaux excel à 2 dimensions (matrices)

Bonsoir lelfedesboa,

Voyez le fichier joint.

Deux choses à bien comprendre :

- GetOpenFilename n'ouvre pas le fichier, il faut l'ouvrir ensuite par Workbooks.Open

- la recherche par Application.Match ne différencie pas majuscules et minuscules.

Je l'ai donc remplacée par la méthode Find avec l'argument MatchCase:=True.

A+
 

Pièces jointes

Re : comparaison de tableaux excel à 2 dimensions (matrices)

Bonjour job75,

En effet getOpenFileName ne permet que de récupérer le nom du fichier choisi, je n'avais pas vu cette subtilité puisque lorsque j'exécutais la macro mes fichiers de tests étaient ouverts à coté pour comparaison. Merci pour cette précision !

Avec la méthode Find ça marche impeccable, il n'y a plus de confusion entre 2 options uniquement différenciées par une majuscule.

Merci également pour le fichier avec bordures, le rendu est plus "propre" et plus "fini".

Dernière petite question, j'avais remarqué après coup que les intitulés n'étaient pas forcément en ordre alphabétique (ils le sont en majorité). Pensez-vous qu'il soit possible de garder l'ordre d'origine de ces intitulés ?

Cordialement,
lelfedesboa
 
Dernière édition:
Re : comparaison de tableaux excel à 2 dimensions (matrices)

Re,

Je propose tout simplement de ne pas trier les en-têtes de lignes et colonnes.

Il faut alors commencer par étudier celles du nouveau fichier.

Les en-têtes manquantes sont rejetées en fin de listes.

Fichier joint.

A+
 

Pièces jointes

Re : comparaison de tableaux excel à 2 dimensions (matrices)

Super !! Merci pour votre travail, je pense que c'est exactement l'outil qu'il nous fallait, surtout losque l'on doit comparer de gros fichiers. Mes tests sont concluants, je fais tester à l'équipe qui travaille avec moi afin de voir si rien ne m'a échappé.

Encore merci à vous, pour le temps que vous m'avez accordé et votre savoir faire ! (je pense qu'il m'aurait fallu plus de temps pour développer l'équivalent, vu que je ne pratique le vba qu'à petite dose !)
 
Re : comparaison de tableaux excel à 2 dimensions (matrices)

Bonjour job75, le forum,

J'ai oublié un "détail", les fichiers peuvent comporter plusieurs onglets... Je vous ai fait un nouveau jeu de test, de mon coté j'essaye de rajouter quelquechose comme ça :
Code:
Dim sh As Worksheet

Set F1 = ancien.Sheets(sh)
Set F2 = nouveau.Sheets(sh)
For Each sh In Sheets
  sh.Select
--votre code--
  Next sh
mais j'ai une incompatibilité de type sur
Code:
Set F1 = ancien.Sheets(sh)
Je pense qu'utiliser un "Worksheet" dans un autre "Worksheet" est la cause, mais je ne sais pas trop comment déclarer les différents objets pour pouvoir boucler sur chaque feuille.
Merci d'avance pour votre réponse !
lelfedesboa
 

Pièces jointes

Re : comparaison de tableaux excel à 2 dimensions (matrices)

Bonjour lelfedesboa, le forum,

Un détail en effet 🙄

Traiter plusieurs feuilles n'offre guère de difficulté, mais il y faut du soin...

Dans cette version le nombre de feuilles à traiter est déterminé par une InputBox.

Ensuite il suffit d'une boucle.

A+
 

Pièces jointes

Dernière édition:
Re : comparaison de tableaux excel à 2 dimensions (matrices)

Rebonjour 🙂
Cette fois je ne retrouve plus toutes les colonnes supprimées à la fin du fichier (dernier onglet).
Il n'apparait que la colonne supprimée sur la feuille3 : "1 m gratuit parrainage".
J'avais également supprimé :
feuille 1 : "1 game offert" et "1 m gratuit C"
feuille 2 : "2 Offertes G" et "compensation -100 euros I" (je viens de constater que j'avais mis 2 séries d'intitulés finis par I, donc on voit encore cette colonne présente car elle était en doublons, mais pour les 3 autres intitulés on n'a pas de trace de leur disparition)

Je pense que la macro ne doit pas écrire les colonnes supprimées à la fin de chaque boucle ?

Cordialement,
lelfedesboa

Pour les lignes pas de problème, c'est ok.
 
Dernière édition:
Re : comparaison de tableaux excel à 2 dimensions (matrices)

Re,

Ah mais j'avions point vu, des tableaux vont jusqu'à la colonne IV !!!

Pas bien ça, il faut toujours laisser la dernière colonne (ou ligne) vide.

Sinon en effet les End(xlToLeft) ne vont pas 😡

Dans cette version (2) j'utilise donc à la place Application.CountA (NBVAL).

En plus je pense que vous l'avez fait exprès, pour voir... Non ??? Sacré coquine 🙄

Nota : vous pouvez toujours utiliser des fichiers .xlsx et .xlsm sur Excel 2007/2010.

Avec 16384 colonnes il y a de la marge !!!

A+
 

Pièces jointes

Re : comparaison de tableaux excel à 2 dimensions (matrices)

non, désolée ce n'était pas un piège (ça aurait pu 😉) !! Ces tableaux que l'on doit comparer (c'était fait "à l'oeil" auparavent !!!!) sont eux-mêmes générés par des macros, dejà existantes !

J'avais donc proposé de créer une macro de comparaison, sans avoir pensé à toutes les subtilités engendrées, et je me suis retrouvée coincée devant la complexité (qui heureusement ne vous a pas effrayé !!!).

Pour la version d'excel, ma boite est encore sur une vieille version....on ne change pas les bonnes vieilles habitudes comme ça dans certaines sociétés !! 🙁

Par contre on a toujours le petit souci sur l'onglet 1 : "1 game offert" apparait bien à la fin de cet onglet, mais il n'est pas en rouge.
De plus lorsque la 2ème version de la matrice est générée (avec les choses ajoutées ou supprimées par rapport à la 1ère version), je suppose que les onglets sont remplis jusqu'à "IV", ce qui va complexifier encore un peu le problème, car il faudrait donc reporter toutes les colonnes supprimées sur le dernier onglet !
 
- 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
1
Affichages
2 K
Retour