[Débutante]Comparaison entre résultats de feuille excel

lilo415

XLDnaute Nouveau
Bonjour,

J'ai effectué des extractions de tables différentes via des requêtes SQL. J'ai stocké les résultats sous fichiers Excel.

J'ai un voir deux champs communs dans les tables entre mes résultats de requête. Je souhaiterais les comparer entre eux pour savoir, si l'information se trouve sur les deux feuilles Excel et pouvoir les analyses ensuite via les applications. ( je souhaiterais si possibles ne pas effacer de données pendant la comparaison pour pouvoir garder les autres champs)

Pouvez-vous m'expliquer, comment je peux procéder pour faire ces comparaisons ? (il s'agit de gros volume de données 65536 lignes par fichiers Excel et j'en ai plusieurs)
Je suppose qu'il faut faire une macro, j'ai testé sous un petit nombre, mais Excel plante.
J'aurais bien testé un recherchev (mais je ne maitrise pas cette fonction )

Merci d'avance de votre aide.

Lilo
 

mécano41

XLDnaute Accro
Re : [Débutante]Comparaison entre résultats de feuille excel

Bonjour,

Pour faire un essai :

- crée trois nouveaux classeur vides ; ils vont s'appeler Classeur1, Classeur2 et Classeur3
- dans Classeur1, tu crées un module dans lequel tu copies le code suivant :

Code:
Option Explicit
Option Base 1

Sub Essai()
Dim T1
Dim T2
Dim Cpt As Long

Windows("Classeur2").Activate
T1 = Range("A1:A30")
Windows("Classeur3").Activate
T2 = Range("A1:A30")
For Cpt = 1 To UBound(T1)
    If T1(Cpt, 1) <> T2(Cpt, 1) Then
        MsgBox "Il y a une différence à la ligne " & Cpt
    End If
Next Cpt
End Sub

- dans Classeur2, de A1 à A30, tu mets des valeurs quelconques
- tu recopies les mêmes valeur dans Classeur3, de A1 à A30
- tu changes l'une des valeurs dans Classeur3 par exemple à la ligne 18
- dans Classeur1, tu lances le code que tu as copié (curseur dans le code puis F5)
- une boîte de dialogue doit s'ouvrir et te dire qu'il y a une différence à la ligne 18

Est-ce que c'est à peu près ce que tu veux faire? Si oui, il faudra que l'on voie pour aménager...

Nota : tu peux faire un essai sur plus de données en remplaçant (2 fois) A30 par A65000

Cordialement
 
Dernière édition:

lilo415

XLDnaute Nouveau
Re : [Débutante]Comparaison entre résultats de feuille excel

Bonjour,

Désolé pour ma réponse tardive ...
Je viens de tester mais j'ai une erreur lorsque j'exécute le code

" Erreur d'exécution '9'
L'indice n'appartient pas à la sélection "

Lors de cette erreur, il se positionne sur la ligne
=> Windows("Classeur2").Activate

Merci d'avance de votre aide.

Lilo
 

mécano41

XLDnaute Accro
Re : [Débutante]Comparaison entre résultats de feuille excel

Bonjour,

Désolé, j'ai oublié l'extension .xlsx au nom de chaque fichier

Code:
Option Explicit


Option Base 1

Sub Essai()
Dim T1
Dim T2
Dim Cpt As Long

Windows("Classeur2.xlsx").Activate
T1 = Range("A1:A30")
Windows("Classeur3.xlsx").Activate
T2 = Range("A1:A30")
For Cpt = 1 To UBound(T1)
    If T1(Cpt, 1) <> T2(Cpt, 1) Then
        MsgBox "Il y a une différence à la ligne " & Cpt
    End If
Next Cpt
End Sub

Cordialement
 

mécano41

XLDnaute Accro
Re : [Débutante]Comparaison entre résultats de feuille excel

Voici un jeu de 3 fichiers (1 .xlsm et 2 .xlsx) qui fonctionne)

Cordialement
 

Pièces jointes

  • Classeur1.zip
    26.5 KB · Affichages: 24
  • Classeur1.zip
    26.5 KB · Affichages: 26
  • Classeur1.zip
    26.5 KB · Affichages: 27

lilo415

XLDnaute Nouveau
Re : [Débutante]Comparaison entre résultats de feuille excel

Merci mécano41, cela fonctionne avec tes classeurs. ;-)

Serait-il possible de regrouper les lignes ou il y a une différence , genre dans un nouvelle colonne ou feuille excel ? Car je travaille sur de gros fichiers . Ou bien de les compter ?

Après si je concatene 2 colonnes de mon fichiers. Est-ce que je peux utiliser le même code ?

En tout cas merci de ton aide, ça me permet d'avancer plus rapidement :)

Lilo
 

mécano41

XLDnaute Accro
Re : [Débutante]Comparaison entre résultats de feuille excel

Voici les mêmes fichiers (j'ai gardé les noms pour ne pas tout modifier dans cet exemple) mais avec le code modifié pour indiquer, dans la feuill2 du classeur 1, les lignes du classeur 3 différentes de celles du classeur 2 et leur valeur dans le classeur 3.

Pour la concaténation, il faudrait préciser ce que tu veux faire :

- est-ce que tu concatènes dans une autre colonne, auquel cas, le code est le même mais appliqué à cette nouvelle colonne,

- ou bien, est-ce que, par exemple, tu veux que le code de vérification en profite pour concaténer avant de vérifier? (auquel cas, il faudra dire si tu veux que la concaténation figure dans les feuilles et si les anciennes colonnes doivent être effacées...etc

Cordialement
 

Pièces jointes

  • Classeur1.zip
    28.8 KB · Affichages: 25
  • Classeur1.zip
    28.8 KB · Affichages: 27
  • Classeur1.zip
    28.8 KB · Affichages: 25

lilo415

XLDnaute Nouveau
Re : [Débutante]Comparaison entre résultats de feuille excel

Bonjour mécano41,

Merci pour la modification du code, le résultat est parfait.

En ce qui concerne la concaténation, si c'est possible, je préfère que le code de vérification en profite pour concaténer avant de vérifier.
Je souhaite garder les anciennes colonnes et afficher la concaténation dans les feuilles, cela me permettra de vérifier rapidement si besoin.

Merci d'avance.

Lilo
 

lilo415

XLDnaute Nouveau
Re : [Débutante]Comparaison entre résultats de feuille excel

En complement.

Juste une petite question supplémentaire, j'ai voulu exécuter le code avec plus de ligne donc j’ai changé dans le code la ligne A30 => par A65536 (la fin du fichier)
Cependant j’obtiens une erreur à la ligne :

Worksheets(Feuil2.Name).Range("A2").Resize(UBound(T3, 2) - 1, 2).Value = WorksheetFunction.Transpose(T3)

Je ne vois pas trop d’où vient l’erreur.

Merci d’avance
Lilo
 

mécano41

XLDnaute Accro
Re : [Débutante]Comparaison entre résultats de feuille excel

...Juste une petite question supplémentaire, j'ai voulu exécuter le code avec plus de ligne donc j’ai changé dans le code la ligne A30 => par A65536 (la fin du fichier)
Cependant j’obtiens une erreur...

Normalement cela devait fonctionner ; il doit y avoir autre chose. De toutes manières, dans la version jointe, tu verras que j'ai défini les plages en partant du bas quel que soit le nombre de données...

J'ai ajouté la concaténation et aussi un message pour le cas ou le Nb. de données n'est pas le même dans les deux classeurs ; dans ce cas : on sort sans rien faire...

J'ai mis quelques commentaires pour t'aider un peu...

Cordialement
 

Pièces jointes

  • Classeur1.zip
    34.6 KB · Affichages: 22
  • Classeur1.zip
    34.6 KB · Affichages: 35
  • Classeur1.zip
    34.6 KB · Affichages: 29

lilo415

XLDnaute Nouveau
Re : [Débutante]Comparaison entre résultats de feuille excel

Bonjour mécano41,

Merci pour ton fichier et les commentaires.
Je viens de tester avec mes données, avec pour chaque classeur et les colonnes 65536 lignes. Par contre je reste bloquer à cette ligne:

If UBound(T1a) <> UBound(T2a) Then
MsgBox "Il n'y a pas le meme nombre de données dans les deux classeurs"
Exit Sub
End If

J'ai essayé de mettre en commentaire ce contrôle et les références à la valeur : "UBound" mais j'ai toujours le même problème..

Merci d'avance de ton aide.
Lilo
 

mécano41

XLDnaute Accro
Re : [Débutante]Comparaison entre résultats de feuille excel

Bonjour,

Comme cela, je ne vois pas. As-tu vérifié que tes données étaient en même nombre dans les deux classeurs (je veux dire - car il peut y avoir des trous - que la première et la dernière ligne de chaque plage a le même N° dans les deux classeurs ?...
Quant tu fais afficher les variables dans le VBE en mettant un point d'arrêt après le remplissage des tableaux, tu as bien la même longueur de tableau?

Sinon, autre point : il ne faut pas mettre de données au-delà de 65535. J'ai fait l'essai sans même mettre de données intermédiaires, juste en faisant Atteindre 65535 et en mettant des valeurs dans la ligne (différentes dans les deux classeurs), cela fonctionne...

Cordialement
 

lilo415

XLDnaute Nouveau
Re : [Débutante]Comparaison entre résultats de feuille excel

Désolé, je m'étais trompéé, j'avais renseigné les données au délà de 65535 jusqu'à 65536. je pensais avoir retiré la dernière ligne mais apparement pas :(

Sinon une dernière question, là nous comparons ligne par ligne apres concaténation . Est-il possible de comparer une ligne de la colonne A et la collonne B du classeur 2, sur l'ensemble des données du classeur 3 ? ( désolé si c'est une question idiote) je souhaiterais m'assurer qu'une donnée du classeur 2, ne se trouve pas dans le classeur 3 sur la ligne x.

Merci de ton aide, j'espère comprendre toutes les mécaniques d'excel afin d'avancer plus rapidement.

Lilo
 

Discussions similaires

Statistiques des forums

Discussions
314 485
Messages
2 110 093
Membres
110 659
dernier inscrit
milckush