Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Réconciliation/comparaison de deux fichiers

D10

XLDnaute Junior
Bonjour,

Je reçois deux fichiers de données de deux sources différentes et je souhaite vérifier si il y a des differences entre les deux pour certaines colonnes bien précises.

Premier fichier:
J’ai une 20aines de colonnes mais il y en a seulement quelques une qui m’intéressent qui sont:
1ere colonne: équipe
2eme colonne: nom du joueur
3eme colonne: nbre de buts
4eme colonne: nbre de passes decisives
5eme colonne: nbre de matchs joués

Deuxieme fichier:
J’ai aussi un certain nombre de colonnes mais je veux sélectionner que ceux qui correspondent aux colonnes qui m’intéressent dans le fichier 1. À vrai dire les colonnes me donnant l’equipe, le nom du joueur, nbre de buts, nbre de passes et matchs joués. Chose importante, ces données ne sont pas classés dans le même ordre que ceux du 1er fichier. Et les noms des colonnes sont différents entre les deux fichiers.

Dans le 3eme fichier j’aimerais donc rassembler ces données et les comparer ligne par ligne.
Donc si y’a les stats du joueur X du premier fichier, j’aimerai mettre cote à cote les stats de ce joueur mais provenant du second fichier. Donc il faudrait que la macro classe bien les données par équipe puis par nom de joueur. Pour avoir au final les données de chaque source l'une en face de l'autre. Ce qui permettrait de comparer stats de joueur X du fichier 1, avec en face, stats de joueur mais du fichier 2. Et ainsi de suite.
Donc au départ faudrait transférer les colonnes du fichier 1 dans le fichier 3 puis les classer par équipe puis par nom de joueur et si après classement le joueur X arrive en ligne 8, il faudrait que les données du second fichier de ce joueur se mettent à la même ligne...

Je vous mets à disposition un fichier d'exemple avec, dans un onglet, le résultat que j'aimerais obtenir si possible...

Le 3eme fichier se composerait de cette façon
A à F = colonnes du 1er fichier.
De la colonne H à M = colonnes du second fichier classés dans le meme ordre.
De la colonne O à Q les colonnes qui permettront de comparer mes deux sources de données et voir si il y a des écarts par exemple.

Auriez vous des pistes? Des bouts de codes existant à adapter ?

Merci de m’avoir lu.

Cdlt
 

Pièces jointes

  • Exemple.xlsx
    14.2 KB · Affichages: 59

Dranreb

XLDnaute Barbatruc
Bonsoir.
Moi je le ferais avec ma fonction Gigogne en lui donnant à traiter un tableau résultant de la concaténation des données des deux sources.
 

Pièces jointes

  • GigIdx.xlsm
    70.2 KB · Affichages: 49

Dranreb

XLDnaute Barbatruc
Entre temps jai fait la procédure d'activation dans le module objet Feuil3, qui sort le truc :
VB:
Option Explicit

Private Sub Worksheet_Activate()
Dim Équipe As SsGr, Joueur As SsGr, TR(1 To 1000, 1 To 15), _
    L As Long, Détail, DC As Long, C As Long
For Each Équipe In Gigogne(TableUnique( _
   TabCols(Feuil1.[A5:J5], 1, 3, 6, 8, 10), _
   TabCols(Feuil2.[A5:J5], 2, 3, 8, 10, 6)), 1, 2)
   For Each Joueur In Équipe.Co
      L = L + 1
      For Each Détail In Joueur.Co
         DC = 6 * Détail(0)
         For C = 1 To 5: TR(L, C + DC) = Détail(C): Next C, Détail, Joueur, Équipe
Me.[A6].Resize(1000, 15).Value = TR
Me.[M6:O6].Resize(L).FormulaR1C1 = "=RC[-10]-RC[-4]"
End Sub
Les fonctions Gigogne, TableUnique et TabCols sont décrites en détail dans l'aide de GigIdx.
 

D10

XLDnaute Junior
Bonjour,
je n'ai pas l'impression que le code fonctionne sur mon fichier.

Edit:!Ah si si ! ça donne quelque chose!
est il possible de mettre des titres aux différentes colonnes ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Vous devez vous tromper: la macro est totalement incapable d'effacer des titres situés au dessus de la cellule A6 comme dans votre classeur exemple. Elle n'écrase que cette cellule étendue à 1000 lignes et 15 colonnes.
Joignez ce que vous avez fait, si vous voulez que je vous en dise plus.
 
Dernière édition:

D10

XLDnaute Junior

Effectivement j'avais crée un autre onglet dans lequel je faisais marché la macro...
Dans mon cas, les données ne seront pas toutes sur un seul fichier (comme dans mon exemple).
Le but est de réconcilier deux fichiers séparés, et en créer un 3eme qui contiendrait le résultat du rapprochement. Un résultat comme dans l'onglet 3 de mon exemple. Comment cela se passerait ?

Petit détail:
Le fichier 1 que je reçois aura toujours les mêmes noms de colonnes qui seront toujours placées de la même façon (c'est à dire colonne des noms des équipes toujours en colonne A etc..)
Le fichier 2 que je reçois d'une autre source, aura aussi toujours les mêmes noms de colonnes aussi et seront toujours placées de la même façon. (c'est à dire colonne des noms des équipes toujours en colonne B etc..)
MAIS par exemple, dans le fichier 1 la colonne des équipes s'appellera "Nom des équipes".
Alors que dans le fichier 2, la colonne des nom des équipes s'appelle seulement "Équipes".

Merci encore!

 

Dranreb

XLDnaute Barbatruc
Vous pouvez ajouter des titres dans la 1ère ligne du tableau résultant TR si besoin.
Il faut que les fichiers soit ouverts, quitte à les ouvrir dans la macro si nécessaire. Au lieu des noms d'objets Worksheet Feuil1 et Feuil2 vous pouvez spécifier des expressions Worksheet représentant les feuilles des classeurs ouverts
Je ne me suis pas occupé des titres des colonnes. Juste leurs numéros.
Je n'ai pas prévu pour l'instant que la fonction TabCols puisse accepter en guise de colonnes des titres d'une plage ayant fait l'objet d'une mise sous forme de tableau. Mais ça pourrait se faire…
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je joins une nouvelle version de GigIdx avec seulement une explication plus détaillée de la fonction TabCols. Ce n'était, après tout, peut être évident que pour moi…
 

Pièces jointes

  • GigIdx.xlsm
    64 KB · Affichages: 63

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…