comparaison de 2 listes excel et nom commun

ju89

XLDnaute Nouveau
Bonjour,

j'ai trouvé, pour les besoin d'un tableau excel, un bout de code que j'ai réussi à adapté à mon cas.

il s'agit de comparer 2 listes et de renvoyé les noms communs aux deux listes.
La dessus pas de soucis ça fonctionne bien.
Le soucis que j'ai est que si je retire des noms de la liste 2, ils restent tout de même affiché dans les nom commun alors qu'il ne sont plus commun aux 2 liste.

comment faire?

A noté que je n'y connais rien au VBA, j'ai fais de la bidouille a partir de code déjà existant.

voici mon code (trouvé ici: Formation Excel VBA JB ):

Sub Communs()
Set f1 = Sheets("code")
Set f2 = Sheets("mars 2015")
Set mondico1 = CreateObject("Scripting.Dictionary")
For Each c In f1.Range("m5:m15" & f1.[m65000].End(xlUp).Row)
mondico1.Item(c.Value) = c.Value
Next c
Set mondico2 = CreateObject("Scripting.Dictionary")
For Each c In f2.Range("v3:V100" & f2.[d65000].End(xlUp).Row)
If mondico1.Exists(c.Value) Then If Not mondico2.Exists(c.Value) Then mondico2.Add c.Value, c.Value
Next c
Sheets("Mars 2015").[AB5].Resize(mondico2.Count, 1) = Application.Transpose(mondico2.items)
End Sub

Merci pour vos réponses
 

ju89

XLDnaute Nouveau
Re : comparaison de 2 listes excel et nom commun

pour moi ça ne fonctionne pas, je peux exécuté la macro plusieurs fois sans résultat.

je te laisse voir avec ma pièce jointe, tu clic sur le bouton "commun" pour affiché les nom en commun entre la colonne V et la liste de nom de l'onglet "Code"

ensuite tu supprime le prénom Marie par exemple, reclic sur le bouton et Marie reste toujours dans les nom commun alors qu'il devrai plus y être puisque plus en commun dans les deux liste^^
 

Pièces jointes

  • nom commun.xlsm
    54 KB · Affichages: 40
  • nom commun.xlsm
    54 KB · Affichages: 55
  • nom commun.xlsm
    54 KB · Affichages: 67

ju89

XLDnaute Nouveau
Re : comparaison de 2 listes excel et nom commun

J'ai trouver une solution, c'est encore de la bidouille mais ca fonctionne.

j'ai rajouté une ligne au début de ma macro qui efface la plage de cellule des nom communs

VB:
Sub Communs()
Worksheets(ActiveSheet.Name).Range("ab5:ab10").ClearContents
  Set f1 = Sheets("code")
  Set f2 = Sheets(ActiveSheet.Name)
  Set mondico1 = CreateObject("Scripting.Dictionary")
  For Each c In f1.Range("m5:m15" & f1.[m65000].End(xlUp).Row)
    mondico1.Item(c.Value) = c.Value
  Next c
  Set mondico2 = CreateObject("Scripting.Dictionary")
  For Each c In f2.Range("v3:V100" & f2.[d65000].End(xlUp).Row)
   If mondico1.Exists(c.Value) Then If Not mondico2.Exists(c.Value) Then mondico2.Add c.Value, c.Value
  Next c
  Sheets(ActiveSheet.Name).[AB5].Resize(mondico2.Count, 1) = Application.Transpose(mondico2.items)
End Sub
 

ju89

XLDnaute Nouveau
Re : comparaison de 2 listes excel et nom commun

Merci pour vos réponse,

J'ai trouver la solution avec l'aide de f894009 Comparaison de 2 liste Excel, un gros merci à lui et à tous ceux qui m’ont apporté des solutions.

je partage donc avec vous:

concrètement ce code:

-compare deux listes et renvoi les noms communs aux deux liste.
-Tri par ordre alphabétique les nom communs
-enlève des noms communs ceux qui ne le sont plus, ça parait évident mais pas simple à mettre en place.
-fonctionne en temps réel une fois placé dans le code de la feuille

voici le code:

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo traite_erreur
If Not Application.Intersect(Target, Range("V:V")) Is Nothing Then
Application.ScreenUpdating = False
Application.EnableEvents = False
Set f1 = Sheets("code")
Set mondico1 = CreateObject("Scripting.Dictionary")
der = f1.[M65000].End(xlUp).Row
For Each c In f1.Range("M5:M" & der)
mondico1.Item(c.Value) = c.Value
Next c
Set mondico2 = CreateObject("Scripting.Dictionary")
der = [V65000].End(xlUp).Row + 1
For Each c In Range("V3:V" & der)
If mondico1.Exists(c.Value) Then
If Not mondico2.Exists(c.Value) Then
mondico2.Add c.Value, c.Value
End If
End If
Next c
'raz cellules colonne AB
x = [AB65000].End(xlUp).Row
Range("AB5:AB" & [AB65000].End(xlUp).Row).ClearContents
If mondico2.Count > 0 Then
[AB5].Resize(mondico2.Count, 1) = Application.Transpose(mondico2.items)
End If

ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.S ortFields.Clear
ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.S ortFields.Add Key:=Range("AB5") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort
.SetRange Range("AB5:AB" & [AB65000].End(xlUp).Row)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
traite_erreur:
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub

En espérant que ça en aidera d'autre :)
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch