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 ;-)
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
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 partiedes fonctions proposées, mais ne peuvent pasajouter 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 standardinstallé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 uniquementutiliser ou noncertaines des fonctions proposées ; et je pense que c'est le suivide cela dont tu veux réellementt'occuper.
Il se peut que je me trompe, et dans ce cas, inutilede 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 5fonctions de baseinitialesA à E, il y a aussi
5fonctions supplémentairesF à J.
Ton problème serait alors de faire un suivi qui indiquera quelles sont les fonctionsA à Jutilisé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 colonnesque de fonctions offertes par
la dernière version du logiciel L
2) Autant de lignesque 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 002ne peuvent pas utiliser les fonctions F à J car ils ont le logiciel L en version 1.
5) Les utilisateurs 003 et 004peuvent 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 baseminimum 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.
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 ..
Citons les sources...
Très bon code de Michel_m.