Fonction communs dictionary

Bonjour

J'essaie de modifier la procédure de Boisgonthier, ci-dessous en fonction, pour affichage sur feuille dans procédure vba

Communs(Plage_1,Plage_2)

soit le nombre, soit les items

merci

Sub Communs()

a = Range("A2:A" & [A65000].End(xlUp).Row)

Set MonDico1 = CreateObject("Scripting.Dictionary")

For Each c In a

MonDico1(c) = ""

Next c

b = Range("C2:C" & [C65000].End(xlUp).Row)

Set MonDico2 = CreateObject("Scripting.Dictionary")

For Each c In b

If MonDico1.exists(c) Then If Not MonDico2.exists(c) Then MonDico2(c) = ""

Next c

[G2].Resize(MonDico2.Count, 1) = Application.Transpose(MonDico2.keys)

End Sub

bonjour,

les .items des 2 dictionaires sont "", donc il faut changer cela avant qu'on peut l'utiliser.

Le nombre = MonDico2.Count

Dans votre excel 2019 le nombre de lignes est +1.048.000, ceci fonctionne pour toutes les versions

a = Range("A2:A" & range("A" & rows.count).End(xlUp).Row)

https://excelmacromastery.com/vba-dictionary/

Je connais le site

J'ai déjà essayé, count,item,keys, rien ne s'affiche

J'avais réussi avec une autre procédure dictionnary, mais pas celle là

la procédure fonctionne bien, mais la transformer en fonction

J'ai fini par réussir à afficher les valeurs communes

Un problème subsiste au niveau du resize, si je met 10 les valeurs commune s'affichent

Mais les colonnes sans chiffres se retrouvent avec un dieze

essayé avec [G20].Resize(, ubound(Communs_2)) = Communs_2(Plage_1, Plage_2)

mais ne passe pas, sinon elle fonctionne

7dictionary-2.xlsm (17.58 Ko)

re, c'était à peu près correcte !

Sub test()
     Set Plage_1 = Range("A1:J10")
     Set Plage_2 = Range("B2:J10")
     a = Communs_2(Plage_1, Plage_2)     'résultat >>> matrice
     With [G20]
          .Resize(, 10).ClearContents     'vider la plage avant de coller
          If UBound(a) > -1 Then .Resize(, UBound(a) + 1) = a     'si il y a des valeurs commun, coller
     End With
End Sub

Autre version qui fonctionne

modifié : [G20].Resize(, UBound(Communs_2(Plage_1, Plage_2)) + 1) = Communs_2(Plage_1, Plage_2)

Function Communs_2(ByVal Plage_1 As Range, ByVal Plage_2 As Range)

10dictionary-3.xlsm (19.70 Ko)

a = Plage_1
Set MonDico1 = CreateObject("Scripting.Dictionary")
For Each c In a
MonDico1(c) = ""
Next c
b = Plage_2
Set mondico2 = CreateObject("Scripting.Dictionary")
For Each c In b
If MonDico1.Exists(c) Then If Not mondico2.Exists(c) Then mondico2(c) = ""
Next c
Communs_2 = mondico2.keys

End Function
Sub test()
Set Plage_1 = Range("A1:J1")
Set Plage_2 = Range("A2:J2")
Plage_1.Interior.ColorIndex = 22
Plage_2.Interior.ColorIndex = 23
[G20].Resize(, UBound(Communs_2(Plage_1, Plage_2)) + 1) = Communs_2(Plage_1, Plage_2)

Autre version qui fonctionne (sauf quand il n'y a rien en commun)

Mais encore

vous content, moi content !!!

Rechercher des sujets similaires à "fonction communs dictionary"