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

  • Initiateur de la discussion Initiateur de la discussion mmalzert
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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 ?
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
13
Affichages
2 K
Retour