Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Fréquence_maximum

Felicite1976

XLDnaute Nouveau
Boujour tout le monde

Comme je suis une débutante en vba et je viens de tomber sur un fichier qui me fait tourner la tete ,j'ai besoin de votre aide pour résoudre mon problème.
En fait dans mon tableau ci-joint j'ai 5 colonnes (Feuil1) ,je voudrais avoir dans la feuil2 un tableau de deux colonnes (Mois, Maximum)qui me retourne le nombre maximum de la commande la plus livrés par mois.
Je mexplique:
En prenant le tableau de la Feuil1 la colonne "No commande" et la colonne "Date livraison" je verifie la présence maximum de chaque numero commande par mois
Exemple pour le mois d'avril de la colonne(Date livraison) j'ai plusieurs commande pour ce mois et leur presence
1-1000106076 est présent 1 fois
1-1001475931 est présent 3 fois
1-1001483116 est présent 3 fois
1-1002300028 est présent 1 fois
1-1006323621 est présent 15 fois
1-1010119310 est présent 1 fois
1-1013547462 est présent 1 fois
1-1020301452 est présent 9 fois
1-1067903656 est présent 20 fois
Donc dans la Feuil2 on doit avoir pour le mois d'avril 20 comme max

J'ai fait un code vba qui me retourne pas un bon resultat à la feuil2
MErci
 

Pièces jointes

  • frequence_max.xlsm
    48.2 KB · Affichages: 30

Paf

XLDnaute Barbatruc
bonjour tigeline001/Felicite1976, mdo100,

un essai à tester et à adapter:
VB:
Sub MaxMois()
Dim dico As Object, dico2 As Object, dico3 As Object, Tablo, TabFin, i As Long, j As Long, x As Long
Dim MaDate As String
Set dico = CreateObject("Scripting.Dictionary")
Set dico2 = CreateObject("Scripting.Dictionary")
Set dico3 = CreateObject("Scripting.Dictionary")

With Worksheets("Feuil1")
Tablo = .Range("A2:E" & .Range("E" & Rows.Count).End(xlUp).Row)
End With

'transformation des données colonne E en dates exploitables
For j = LBound(Tablo) To UBound(Tablo)
    If Tablo(j, 5) <> "NULL" Then Tablo(j, 5) = CDbl(CDate(Left(Tablo(j, 5), 19)))   'on transforme les dates en valeurs
Next

For i = LBound(Tablo) To UBound(Tablo)
     dico(Tablo(i, 1)) = dico(Tablo(i, 1)) + 1
    If Tablo(i, 5) <> "NULL" Then
        dico2(Tablo(i, 1)) = Tablo(i, 5)
    Else
        dico2(Tablo(i, 1)) = ""
    End If
Next

x = 0
For Each clé In dico
    If dico2(clé) <> "" Then
        MaDate = Format(dico2(clé), "mmmm") & " " & Format(dico2(clé), "yyyy")
        If dico(clé) > dico3(MaDate) Then dico3(MaDate) = dico(clé)
    End If
Next
ReDim TabFin(1 To dico3.Count, 1 To 3)
x = 0
For Each clé In dico3.keys
    x = x + 1
    TabFin(x, 1) = Split(clé, " ")(0)
    TabFin(x, 2) = Split(clé, " ")(1)
    TabFin(x, 3) = dico3(clé)
Next
With Worksheets("Feuil2")
.Range("C7").Resize(UBound(TabFin, 1), UBound(TabFin, 2)) = TabFin

End With
End Sub

Si ça ne fonctionnait pas comme voulu, inutile d'ouvrir une autre discussion !!

il suffit de le dire ici .

A+
 

Felicite1976

XLDnaute Nouveau
Bonjour Paf
Merci de ta réponse
Au fait ca marche juste pour certains mois parce j'ai ajouté d'autre mois mais il les affiche pas comme par exemple le 9eme mois et pour le mois d'octobre 1-1072791092 est present 16 fois et dans la feuil il me donne comme resultat 1 fois fois voir fichier ci-joint
Merci
 

Pièces jointes

  • frequence_max.xlsm
    49.1 KB · Affichages: 28

Paf

XLDnaute Barbatruc
re,

ah oui! une bourde
remplacer
VB:
For i = LBound(Tablo) To UBound(Tablo)
  dico(Tablo(i, 1)) = dico(Tablo(i, 1)) + 1
  If Tablo(i, 5) <> "NULL" Then
  dico2(Tablo(i, 1)) = Tablo(i, 5)
  Else
  dico2(Tablo(i, 1)) = ""
  End If
Next
par
VB:
For i = LBound(Tablo) To UBound(Tablo)
  If Tablo(i, 5) <> "NULL" Then
  dico(Tablo(i, 1)) = dico(Tablo(i, 1)) + 1
  dico2(Tablo(i, 1)) = Tablo(i, 5)
  End If
Next

A+
 

Discussions similaires

Réponses
5
Affichages
404
Réponses
5
Affichages
309
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…