XL 2013 Valeur de la frequence max avec l'objet Dictionnary

mmalzert

XLDnaute Occasionnel
Bonjour le Forum,

Je cherche à récupérer la valeur correspondant à la fréquence max d'une clé (je ne sais pas trop comment l'expliquer autrement). Je voudrais utiliser l'objet Dictionnary mais je bute dessus. On va dire que j'arrive à adapter le code à mes besoins mais dans le cas présent, je n'ai rien trouvé.
J'ai fais un exemple représentatif de mon fichier source ci joint.

Le tableau de gauche représente la BD. Le tableau de droite représente les clés recherchéess dans la BD. C'est là que je souhaite récupérer les bonnes valeurs.

Merci pour l'aide apportée par ceux qui se pencheront sur mon petit problème.
 

Pièces jointes

  • Dico_Valeur_Frequence_Max.xlsx
    9.7 KB · Affichages: 9

job75

XLDnaute Barbatruc
Bonjour mmalzert, JB,

Voyez le fichier joint et cette fonction VBA :
VB:
Function VFM(colText As Range, cible$, colNum As Range) As Variant
Dim d As Object, i&, x$, nmax&
VFM = [#N/A]
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To colText.Count
    If colText(i) = cible Then
        x = colText(i) & colNum(i)
        d(x) = d(x) + 1
        If d(x) > nmax Then nmax = d(x): VFM = colNum(i)
    End If
Next
End Function
Elle est utilisée dans cette formule en G3 :
Code:
=VFM(A$2:A$13;F3;C$2:C$13)
A+
 

Pièces jointes

  • Dico_Valeur_Frequence_Max(1).xlsm
    16.9 KB · Affichages: 6

mmalzert

XLDnaute Occasionnel
Bonjour à tous les deux,

@BOISGONTIER
Merci pour ton lien. Pour tout dire je suis sur ton site depuis ce matin en tentant de voir quelle partie pourrait m'être utile.
J'avais effectivement vu ces deux exemples. Mais je suis incapable d'adapter.

@job75
Merci pour ton code. J'ai adapté et ça fonctionne bien. Naturellement un peu plus long sur une base de 40k lignes.
Est-ce possible que tu commentes les lignes du code stp, histoire que j'arrive à avancer un peu plus tout seul la prochaine fois ?
 

job75

XLDnaute Barbatruc
La ligne d(x) = d(x) + 1 compte le nombre d'apparitions (fréquence) de la valeur concaténée x.

La ligne suivante détermine le maximum des fréquences ainsi calculées et conjointement la valeur correspondante de la colonne colNum.

Mais le VBA n'est pas indispensable, voyez le fichier joint.

La colonne auxiliaire D effectue les concaténations et en G3 on utilise cette formule matricielle :
Code:
=INDEX(C$2:C$13;EQUIV(MAX(SI(A$2:A$13=F3;NB.SI(D$2:D$13;D$2:D$13)));SI(A$2:A$13=F3;NB.SI(D$2:D$13;D$2:D$13));0))
Cela dit sur 40 000 lignes ça devrait ramer...

A+
 

Pièces jointes

  • Valeur_Frequence_Max(1).xlsx
    10.7 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 870
Membres
103 007
dernier inscrit
salma_hayek