XL 2019 Fonction diff dans macro transfert resultat feuilleBonjour

Hoareau

XLDnaute Occasionnel
Bonjour

J'ai incorporé la fonction diff de Boisgonthier dans une macro, mais je ne réussi pas à transférer le résultat sur la feuille
si la fonction est appliquée directement sur la feuille c'est bon

Mais incorporée dans un code
erreur byref si changée byval plus de message mais pas d'affichage

c'est une matricielle donc c;offset'0,5) = evaluate(diff(plage_1,Plage_2)


Différence entre 2 listes
Dans un module (alt+F11 Insertion/Module)
Function Diff(champ1 As Range, champ2 As Range)
Set MonDico1 = CreateObject("Scripting.Dictionary")
a = champ1.Value
b = champ2.Value
For Each c In b: MonDico1(c) = c: Next c
Set mondico2 = CreateObject("Scripting.Dictionary")
For Each c In a
If Not MonDico1.Exists(c) Then mondico2(c) = c
Next c
Dim d()
ReDim d(1 To Application.Caller.Rows.Count)
i = 1
For Each c In mondico2.items
d(i) = c
i = i + 1
Next c
Diff = Application.Transpose(d)
End Function


merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Hoareau,
C'est application.caller qui est censé être renvoyée de la feuille qui pose problème.
On peut résoudre le problème en remplaçant le Redim par : ReDim d(1 To mondico2.Count)
On appelle la fonction par ex par :
D = Diff(Sheets("aaa").Range("D21:D24"), Sheets("aaa").Range("E21:E24"))
( D est une matrice qui comporte les éléments absents )
 

Hoareau

XLDnaute Occasionnel
bonjour
cela ne passe passe pas, erreur l'indice n'appartient pas à la sélection et me renvoi vers ReDim d(1 To mondico2.Count)
j'ai essayé aussi avec evaluate parce que c'est une matricielle, rien n'y fait

Sub text()
Sheets("feuil1").Select
[G10] = Diff(Range("d7:d10"), Range("d8:d10"))
End Sub
 

Hoareau

XLDnaute Occasionnel
pour moi, ce que cela renvoi st faux


J'ai aussi essayé de transformer communs du même auteur, pour l'inserer dans une macro
c.Offset(0, 5) = Communs(Course_Jour, Num_diff_X_Dernieres_Courses, c.Offset(0, 5))
a la place de location, il avait une cellule fixe
j'essai un peu tout et n'importe quoi
Function Communs(ByVal Plage_1 As Range, ByVal Plage_2 As Range, location As Range)
a = Plage_1.Value
Set MonDico1 = CreateObject("Scripting.Dictionary")
For Each c In a
MonDico1(c) = ""
Next c
b = Plage_2.Value
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
location.Resize(mondico2.Count, 1) = Application.Transpose(mondico2.keys)
End Function
 

Pièces jointes

  • Classeur1-1.xlsm
    19 KB · Affichages: 7

Discussions similaires

Réponses
7
Affichages
485

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG