Récupérer la valeur avec le plus d’occurrence dans un dictionnaire
Bonsoir à tous,
J'aimerai savoir si il existe une propriété en utilisant les dictionnaires (ou autre si plus simple) permettant d'obtenir la valeur (une date dans ce cas précis), disposant du maximum d’occurrences au sein d'une sélection (plusieurs dates différentes, et en doublon) et de la renseigner au sein d'une variable (Date)
En cas d'égalité, la date la plus élevé sera retenu.
Un grand merci pour votre aide.
Cordialement.
EDIT: Il semblerait que j'ai trouvé un bout de code qui semble prometteur, par contre que fait la ligne "d1(c) = d1(c)+1", je ne vois pas d'incidence dans ma fenêtre de variable ?
Sub essai()
t = [A2:A15]
Set d1 = CreateObject("Scripting.Dictionary")
For Each c In t
d1(c) = d1(c) + 1
Next c
Dim t2(): ReDim t2(1 To UBound(t))
For i = 1 To UBound(t)
t2(i) = d1(t(i, 1))
Next i
[b2].Resize(UBound(t)) = Application.Transpose(t2)
End SubBonsoir,
les dictionnaires sont des objets qui n'accepte aucun doublon.
Ils sont constitués d'une clé et d'une valeur liée à cette clé.
lorsque l'on rempli ces objets il n'est pas nécessaire de faire le test d'existence de la clé : si elle n'existe pas elle est créée, sinon on ne la rajoute pas.
Pour remplir le dico il suffit de définir sa clé avec attribution de sa valeur : MonDico(clé) = "LouReeD"
t correspond à un tableau des cellules contenant vos dates
c correspond à la cellule en cours de traitement de cette plage
d1 correspond au dictionnaire
on boucle sur la plage de cellule
on entre dans le Dictionnaire à la clé valeur de la cellule en cours de test la valeur de cette clé dans le dictionnaire + 1
donc si on tombe sur le 03/01/2023, dans la clé 03/01/2023 on met la valeur de cette clé dans le dico, comme on vient de la créer sa valeur est égale à 0 donc avec le +1 on arrive à 1 : on a bien pour la date 03/01/2023 : 1 occurrence
si sur une cellule plus loin on se trouve en présence du 03/01/2023, alors on entre dans le dico à la clé 03/01/2023 la valeur de cette clé +1, comme la valeur vaut maintenant 1 avec le +1 on arrive à 2, donc pour cette clé correspondant à la date du 03/01/2023 on est à 2 occurrences.
on a bien : d1(clé) = d1(clé) + 1 où clé vaut la valeur d'une date et d1(clé)+1 est égale à la valeur de la clé de d1(clé) + 1
Après le reste du code ne cherche pas l'occurrence la plus grande...
@ bientôt
LouReeD
Bonjour LouReeD, ExGats
Sub essai()
Dim It, Clefs, MyMax1, MyMax2
t = [A2:A15]
Set d1 = CreateObject("Scripting.Dictionary")
For Each c In t
If IsDate(c) Then d1(c) = d1(c) + 1
Next c
Clefs = d1.keys 'matrice avec les dates différentes
It = d1.items 'matrice avec les nombres de fois
MyMax1 = Application.Max(It) 'max des nombres
For i = 0 To UBound(It) 'boucle les matrices (attention lBound=0)
If It(i) = MyMax1 Then MyMax2 = Application.Max(MyMax2, Clefs(i)) 'si le nombre est le max, prenez la date la plus élevée
Next
MsgBox "votre date " & Format(MyMax2, "ddd dd/mm/yyyy") & vbLf & "nombre de fois : " & MyMax1
End Sub