Comparaison entre deux fichiers EXCEL en utilisant un code VBA [Résolu/Fermé]

Signaler
Messages postés
1
Date d'inscription
jeudi 17 mars 2016
Statut
Membre
Dernière intervention
17 mars 2016
-
Messages postés
28
Date d'inscription
mercredi 30 mars 2016
Statut
Membre
Dernière intervention
24 mai 2016
-
Bonjour a tous ,
Je suis nouveau dans le forum et aussi dans l'environement Excel/VBA , et j'ai besoin de votre aide si c'est possible .

Je travail actuellement sur un projet mais je ne sais pas d'ou commencer lol , je vais vous expliquer la problematique :

J'ai deux fichier Excel : version1 et version2 j'aimerai faire la comparaison entre certain colonnes .

Dans la version1 j'ai deux colonnes A et B
la colonne A = les ''users'' et la colonne B= ''les fonctionnalités'' ( ces fonctionnalités sont utilisées par les users )

Chaque ''user'' peut utiliser une ou plusieurs ''fonctionnalités''.

Dans la version2 ( qui est une actualisation de la version1)
on a les memes colonnes mais il y a un petit changement les users peuvent ne pas avoir les memes fonctionnalités que la version1 , ils peuvent ajouter ou bien supprimer des fonctionnalités .

le but est de cree deux autres colonnes : colonne C = fonctionnalités_ajoutées et colonne D = fonctionnalité_supprimées.

Est ce qu'il y a un code qui peut detecter pour chaque user s'il a ajouté de nouvelles fonctionnalités ou bien s'il a supprimé des anciennes fonctionnalités et aprés cette comparaison il nous affiche dans les deux nouvelles colonnes soit les fonctionnalités ajouter pour ce user ou les fonctionnalités supprimer pour le meme user .

Merci infiniment, si vous avez des questions n'hésitez pas ;-)

2 réponses

Messages postés
28
Date d'inscription
mercredi 30 mars 2016
Statut
Membre
Dernière intervention
24 mai 2016

Bonjour a tous

finalement je me suis debrouillé et j'ai trouvé la solution voila le code , mais N.B que la comparaison se fait dans un seul excel pas deux ;
Option Explicit

Sub comparer()
Dim Derlig As Long, Lig As Long, Ref As String
Dim T_ab, D_ab As Object, T_cd, D_cd As Object
Dim T_fgh, Cptr As Long, Separ
Dim start As Single
'--------------------initialisations
    start = Timer
    Application.ScreenUpdating = False
    'nettoyage
    Range("E2:G30000").Clear
    'concaténation colonnes A & B
    Set D_ab = CreateObject("scripting.dictionary")
     Derlig = Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
    T_ab = Range("A2:B" & Derlig)
    For Lig = 1 To UBound(T_ab)
        Ref = T_ab(Lig, 1) & "¤" & T_ab(Lig, 2)
        If Not D_ab.exists(Ref) Then D_ab.Add Ref, ""
    Next
    T_ab = D_ab.keys
    'concaténation colonnes C & D
    Set D_cd = CreateObject("scripting.dictionary")
     Derlig = Columns("C").Find(what:="*", searchdirection:=xlPrevious).Row
    T_cd = Range("C2:D" & Derlig)
    For Lig = 1 To UBound(T_cd)
        Ref = T_cd(Lig, 1) & "¤" & T_cd(Lig, 2)
        If Not D_cd.exists(Ref) Then D_cd.Add Ref, ""
    Next
    T_cd = D_cd.keys
    
'- -----------------comparaisons
    ReDim T_fgh(3, 0) 'preparation tablo comparé
' fonctionalités suppprimés
    For Lig = 0 To UBound(T_ab)
        If Not D_cd.exists(T_ab(Lig)) Then
            Separ = Split(T_ab(Lig), "¤")
            ReDim Preserve T_fgh(3, Cptr)
            T_fgh(0, Cptr) = Separ(0)
            T_fgh(1, Cptr) = Separ(1)
          Cptr = Cptr + 1
        End If
    Next
'nouvelles fonctionalités
    For Lig = 0 To UBound(T_cd)
        If Not D_ab.exists(T_cd(Lig)) Then
            Separ = Split(T_cd(Lig), "¤")
            ReDim Preserve T_fgh(3, Cptr)
            T_fgh(0, Cptr) = Separ(0)
            T_fgh(2, Cptr) = Separ(1)
          Cptr = Cptr + 1
        End If
    Next
'------------------restitution
    Range("F2").Resize(Cptr, 3) = Application.Transpose(T_fgh)
    Derlig = Range("E2:H100000").Find(what:="*", searchdirection:=xlPrevious).Row
    Range("F2:H" & Derlig).Borders.Weight = xlThin
    
    Application.ScreenUpdating = True
    MsgBox "comparaison efffectuée en " & Timer - start & " secondes"
    
End Sub

Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020
2 461
Bonjour,

Citons les sources...
Très bon code de Michel_m.
Messages postés
28
Date d'inscription
mercredi 30 mars 2016
Statut
Membre
Dernière intervention
24 mai 2016
>
Messages postés
12184
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
31 juillet 2020

un grand merci a michel et a toi pijaku vous etes le top du top , merci encore une fois

Bonjour,

Je vais faire la supposition suivante : ton fichier Excel version 1 est pour un logiciel L qui comporte 5 fonctions, de A à E.

Normalement, les utilisateurs d'un logiciel peuvent utiliser tout ou partie des fonctions proposées, mais ne peuvent pas ajouter ou supprimer des fonctions !

Ou alors, il faudrait qu'ils aient le code source du logiciel pour pouvoir le modifier !

Par contre, c'est vrai qu'au moment de l'installation d'un logiciel, l'utilisateur pourrait avoir éventuellement la possibilité de faire une installation personnalisée, qui lui permettrait d'ajouter ou supprimer des composants (en modifiant les cases ☐ et ☑) ;
ce en plus des fonctions de base standard installées automatiquement (le noyau).

Mis à part le cas spécial indiqué dans le paragraphe ci-dessus, je suppose donc que l'utilisateur final d'un logiciel peut uniquement utiliser ou non certaines des fonctions proposées ; et je pense que c'est le suivi de cela dont tu veux réellement t'occuper.

Il se peut que je me trompe, et dans ce cas, inutile de lire la suite de ce message.

==========================================

Je suppose maintenant que ton fichier Excel version 2 est pour le même logiciel L, mais en version 2.

Donc en plus des 5 fonctions de base initiales A à E, il y a aussi
5
fonctions supplémentaires F à J.

Ton problème serait alors de faire un suivi qui indiquera quelles sont les fonctions A à J utilisées par chaque utilisateur.

Donc pour le logiciel L, je ferai le tableau suivant :

Fonctions :   A   B   C   D   E    F   G   H   I   J
-----------------------------------------------------
User 001      x    x   x
User 002      x    x             x
User 003      x    x        x         x         x
User 004      x    x             x    x    x       x   x
.
.
.
User 999

REMARQUES

1) Autant de colonnes que de fonctions offertes par
la dernière version du logiciel L

2) Autant de lignes que d'utilisateurs, en remplaçant
User NNN par leur nom

3) Et bien sûr, pour chaque User, mettre une lettre X minuscule (coche x) pour chaque fonction qu'il utilise.

4) Les utilisateurs 001 et 002 ne peuvent pas utiliser les fonctions F à J car ils ont le logiciel L en version 1.

5) Les utilisateurs 003 et 004 peuvent utiliser les fonctions F à J car ils ont le logiciel L en version 2.

6) Tous les utilisateurs utilisent les fonctions A et B du logiciel L, car ce sont les fonctions de base minimum dont tous ont besoin.

Il se peut que je me trompe complètement, auquel cas j'aurais répondu à côté (hors sujet). Mais pour l'instant, c'est comme ça que je vois les choses.
Messages postés
28
Date d'inscription
mercredi 30 mars 2016
Statut
Membre
Dernière intervention
24 mai 2016

en faite ce que vous venez de decrire est encore plus compliqué pour le travail que je cherche mais comme meme merci a vous j'ai trouvé la solution je vais la poster ici comme ca si qlq1 on a besoin ..