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 Sub

Bonsoir,

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
Rechercher des sujets similaires à "recuperer valeur occurrence dictionnaire"