Comparaison de 2 tableaux Excel.

Résolu/Fermé
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 - 13 févr. 2015 à 11:23
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 - 17 févr. 2015 à 19:47
Bonjour à tous,

Je souhaiterais automatiser un fichier excel qui est en fait un comparatif entre 2 tableaux.

Je m'explique, en réalité, mon but serait de créer un bouton qui permettrait en 1 clic de comparer un tableau fourni par mon client et un tableau provenant de mon logiciel. Le tableau de mon client (tableau 1) est sur la feuille 1 et mon tableau (tableau 2) est sur la feuille 2.

2 choses sont à comparer, dans un premier temps, il faudrait comparer les références (en colonne D pour le tableau 1, en colonne B pour le tableau 2). Et ensuite, si les références sont les mêmes (sachant que les 2 tableaux ne sont pas triés, il faudrait donc faire une recherche par référence), il faudrait comparer les prix (en colonne J pour le tableau 1, en colonne K pour le tableau 2).

En fait, pour faire plus simple, mon but est d'obtenir en page 3 un tableau récapitulatif des différences (en notant la ligne complète du tableau 2 concernée). Et également une précision sur la nature de la différence (référence ou prix) sur une colonne supplémentaire.

Je remercie infiniment les personnes qui voudront bien se pencher sur mon problème complexe.

Cordialement
A voir également:

6 réponses

via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
13 févr. 2015 à 14:40
Bonjour

Poste un exemple de ton fichier (allégé et anonymé si nécessaire) avec ses 2 tableaux sur cjoint.com et reviens ici indiquer le lien fourni.
En fonction de la structure exacte de ton fichier on pourra te dire comment adapter une macro qui crée le récapitulatif souhaité

Cdlmnt
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 13/02/2015 à 15:46
Bonjour,

Merci d'abord d'avoir répondu aussi vite.

Je vous donne le lien pour aller télécharger mon fichier Excel (ZIP) :
https://www.cjoint.com/?0Bnp4VFbp7V

Alors voilà sur la feuille 1, le tableau de mon client. Sur la feuille 2, le tableau issu de mon logiciel de gestion. Sur la feuille 3, un exemple de ce que je souhaiterais obtenir après avoir utilisé la macro. Il faudrait qu'apparaissent les lignes dont la référence ou les prix ne correspondent pas et que la nature de la différence (prix ou référence) apparaisse en face de la ligne.

PS : J'ai créé une macro qui me permet de retraiter le tableau de mon client en supprimant les doublons en ajoutant les totaux HT lorsque 2 références sont identiques. Mais je dois cliquer plusieurs fois sur le bouton pour que tous les doublons s'ajoutent.... Si vous avez le temps d'y jeter un oeil....

Merci beaucoup.

Cordialement,
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
13 févr. 2015 à 16:13
Re

Avec 2 tableaux non identiques c'est moins évident mais il faut surtout savoir ce qui est à reporter et où donc
1) tu parles de noter la ligne du tableau 2 , cela veut dire qu'il peut y avoir des lignes du tableau 2 dont on ne trouve pas la référence dans le tableau 1 mais pas l'inverse ?
2) dans le tableau 2 le prix est en K et dans le récap tu le mets en L ???? Erreur je supposes qu'on le met en K
3) pour le bouton un seul clic suffit chez moi mais cà demande un peu de temps de traitement vu le nombre de données

Dans l'attente

Cdlmnt
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702 > via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024
13 févr. 2015 à 16:57
Sans réponse de ta part essaie cette macro :
Sub recap()
Dim DLig As Long
Dim DLig2 As Long
DLig = Sheets(1).Range("D3").End(xlDown).Row
DLig2 = Sheets(2).Range("B3").End(xlDown).Row
x = 3
'boucle sur les lignes de Feuil2
For t = 3 To DLig2
' si ref n'existe pas en feuil 1 on recopie les colonnes en feuil3 + message
If Application.WorksheetFunction.CountIf(Sheets(1).Range("D:D"), Sheets(2).Range("B" & t)) = 0 Then
    x = x + 1
        For k = 1 To 18
        Sheets(3).Cells(x, k) = Sheets(2).Cells(t, k)
        Next
        Sheets(3).Range("S" & x) = "Erreur référence"
    End If
Next t
' boucle sur lignes en Feuil 1 et sur lignes en feuil2
For n = 2 To DLig
For t = 3 To DLig2
' si les ref correspondent
If Sheets(1).Range("D" & n) = Sheets(2).Range("B" & t) Then
' alors on verifie que les prix correspondent st si pas correspondance on relève les colonnes + message et calcul de différence
    If Sheets(1).Range("J" & n) <> Sheets(2).Range("K" & t) Then
    'MsgBox (Sheets(1).Range("J" & n) & "/" & Sheets(2).Range("K" & t))
     x = x + 1
        For k = 1 To 18
        Sheets(3).Cells(x, k) = Sheets(2).Cells(t, k)
        Next
        Sheets(3).Range("S" & x) = "Ecart de prix  "
        Sheets(3).Range("t" & x) = Sheets(2).Range("K" & t) - Sheets(1).Range("J" & n)
    End If
End If

Next t
Next n


Cdlmnt
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
13 févr. 2015 à 18:38
Re,

Je n'ai pas pu tester pour l'instant, je le fais demain ou dimanche. Mais vous avez raison, mon exemple de la feuille 3 était à titre purement indicatif. Les colonnes ne sont peut-être pas respectées.

Vous avez raison, le tableau 1 peut également contenir des lignes que le tableau 2 ne contient pas, même si cela est plus rare (le client chercherait-il à m'avoir? :p). Et ce problème soulevé me pose un autre problème. C'est qu'il va falloir que je sache si la ligne se trouve dans le tableau 1 et pas dans le 2 ou l'inverse. Hum....

En tout cas merci pour cette aide merveilleuse et le travail fourni. Sincèrement merci.

Je teste tout ça demain et je vous dis :)

Merci encore.

Cordialement.
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
Modifié par via55 le 13/02/2015 à 19:36
Re,

En ce cas tu peux modifier le code ainsi pour tester aussi dans l'autre sens
mais je ne peux pas faire afficher la ligne du fichier 1 car pas les mêmes colonnes
De plus j'ai oublié tout à l'heure, dans ton fichier 2 les références sont au format texte alors qu'elles sont en format numérique dans le 1, mets les deux au même format avant de lancer la macro !
Sub recap()
Dim DLig As Long
Dim DLig2 As Long
DLig = Sheets(1).Range("D3").End(xlDown).Row
DLig2 = Sheets(2).Range("B3").End(xlDown).Row
x = 3
'boucle sur les lignes de Feuil2
For t = 3 To DLig2
' si ref n'existe pas en feuil 1 on recopie les colonnes en feuil3 + message
If Application.WorksheetFunction.CountIf(Sheets(1).Range("D:D"), Sheets(2).Range("B" & t)) = 0 Then
    x = x + 1
        For k = 1 To 18
        Sheets(3).Cells(x, k) = Sheets(2).Cells(t, k)
        Next
        Sheets(3).Range("S" & x) = "Erreur référence Inexistant en 1"
    End If
Next t
'boucle sur les lignes de Feuil1
For t = 2To DLig
' si ref n'existe pas en feuil 2   message (on ne recopie pas lignes car pas même emplacements mais juste la ref)
If Application.WorksheetFunction.CountIf(Sheets(2).Range("B:B"), Sheets(1).Range("D" & t)) = 0 Then
    x = x + 1
 Sheets(3).Range("B" & x)=Sheets(1).Range("D" & t)
        Sheets(3).Range("S" & x) = "Erreur référence Inexistant en 2"
    End If
Next t

' boucle sur lignes en Feuil 1 et sur lignes en feuil2
For n = 2 To DLig
For t = 3 To DLig2
' si les ref correspondent
If Sheets(1).Range("D" & n) = Sheets(2).Range("B" & t) Then
' alors on verifie que les prix correspondent st si pas correspondance on relève les colonnes + message et calcul de différence
    If Sheets(1).Range("J" & n) <> Sheets(2).Range("K" & t) Then
    'MsgBox (Sheets(1).Range("J" & n) & "/" & Sheets(2).Range("K" & t))
     x = x + 1
        For k = 1 To 18
        Sheets(3).Cells(x, k) = Sheets(2).Cells(t, k)
        Next
        Sheets(3).Range("S" & x) = "Ecart de prix  "
        Sheets(3).Range("t" & x) = Sheets(2).Range("K" & t) - Sheets(1).Range("J" & n)
    End If
End If

Next t
Next n
End sub 


Cdlmnt
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 16/02/2015 à 08:57
Re,

Merci infiniment via55.

Il ne reste qu'un problème apparemment et je ne trouve pas pourquoi cela ne marche pas dans le code. Pour les références, il semble que la macro marche à merveille. Pour les prix en revanche, cela ne marche pas. J'ai essayé de changer un prix sur 2 références existantes dans les 2 tableaux. Lorsque je fais tourner la macro, rien ne s'affiche sur la feuille 3 concernant les prix. D'ailleurs la référence dont j'ai modifié le prix n'apparaît même pas avec un Ctrl+F..

Je rajoute que si on pouvait également mettre le prix en plus de seulement la ref pour les écarts sur le tableau 1 ce serait parfait :) Mais je vais essayer de me débrouiller pour ça.

Merci encore.

Cordialement,
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 16/02/2015 à 09:40
OK, j'ai pu me débrouiller pour recopier les cases du tableau 1 dont j'avais besoin :)
Reste le problème des prix que je n'arrive décidément pas à résoudre...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
16 févr. 2015 à 11:42
D'ailleurs petite question, est-ce normal que ton code MsgBox apparaisse en commentaire et ne soit pas intégré au code?

Merci.

Cordialement,
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
16 févr. 2015 à 12:05
Bonjour Kuartz

En ce qui concerne le code msgbox c'est un oubli je l'avais mis dans la macro avant de la faire tourner pour voir quelles lignes elle trouvait et je l'ai shunté après en le mettant en commentaire puis j'ai oublié de l'effacer
Pour les prix cela m'étonne, sur l'exemple que tu m'avais renvoyé il m'avait bien renvoyé un écart de prix mais je ne sais plus sur quelle ligne, par contre vérifie bien que selon les tableaux les prix soient bien au même format (comme pour les références) et qu'il n'y en ait pas avec des espaces devant ou ou derrière non visibles à l'affichage mais créant une différence (c'est parfois le cas lorsque les listes proviennent d'importation)

Cdlmnt
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 16/02/2015 à 17:45
Je confirme, les prix ne s'affichent pas lorsqu'ils ne correspondent pas. J'ai volontairement changé le prix d'une des deux références se trouvant sur les 2 tableaux en prenant bien le soin de mettre les 2 éléments au format "Nombre" et en vérifiant les espaces, je lance la macro et aucun élément correspondant à une différence de prix ne s'affiche en page 3...

Je vous laisse voir mon fichier avec la macro un peu plus à ma sauce et suivant mes besoins. Je vous invite à modifier un prix dont la référence est présente dans les 2 tableaux et à lancer la macro. Vous pourrez constater que je n'ai aucune ligne concernant le prix qui apparaît en page 3.

https://www.cjoint.com/?0Bqr3rR8VMR

Cordialement,
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
16 févr. 2015 à 19:07
Re

Ce sont toujours les ref de la colonne B Feuille2 qui posent problème, certaines sont des nombres sous forme de texte
Selectionner toutes les valeurs avec un petit triangle rouge dans le coin supérieur gauche, cliquer sur l'icone ! qui s'affiche et Convertir en nombre

Ceci fait la macro affiche des écarts de prix pour les ref 81041880 et 2754386

Cdlmnt
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
17 févr. 2015 à 08:42
Tu as raison, en changeant le format des refs de la feuille 2, la macro marche enfin pour les prix. Seul petit bémol, mais d'où sort l'écart de 5.68E-14 sur la ref 2754386?! Si je vérifie sur les feuilles, il n'y a pas d'écart.... Enfin bon ce n'est pas très grave, j'aurais juste aimé comprendre. Je te remercie infiniment pour ton aide qui va me faire gagner beaucoup de temps à l'avenir. Je met le sujet en "résolu". Si tu as une réponse à m'apporter pour le 5.68E-14 tant mieux sinon tant pis.

Cordialement,
0
via55 Messages postés 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702 > Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019
17 févr. 2015 à 19:47
Bonsoir

Il n'y a pas d'écart apparent sur l'affichage mais les nombres ne doivent pas être exactement identiques puisqu'il y a une différence de 5 x 10 exposant -14 soit 0, puis 13 zéros et 5 après la virgule !
Les nombres provenant d'extraction de fichiers différents et pouvant être le résultat de calculs peuvent avoir une différence selon la précision de départ en nombre de chiffres après la virgule

Cdlmnt
0