Comparaison entre deux fichiers EXCEL en utilisant un code VBA
Résolu
Heisenberg_2
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Cedric_hess Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
Cedric_hess Messages postés 28 Date d'inscription Statut Membre Dernière intervention -
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 ;-)
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 ;-)
A voir également:
- Comparaison entre deux fichiers EXCEL en utilisant un code VBA
- Code ascii - Guide
- Nombre de jours entre deux dates excel - Guide
- Liste déroulante excel - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Comment réduire la taille d'un fichier - Guide
2 réponses
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 ;
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
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.
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.
Citons les sources...
Très bon code de Michel_m.