1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| Option Explicit
Sub Gaston64()
'déclaration des variables
Dim f0 As Worksheet, f1 As Worksheet
Dim Cel As Range, MaPlage As Range
Dim Dico As Object, Tabl()
Dim i As Long
'affectation des objets aux variables
Set Dico = CreateObject("Scripting.Dictionary")
Set f0 = Sheets("debut")
Set f1 = Sheets("temp")
i = 1
'Liste sans doublon + Nombre d'occurence + remplissage Tabl des données Col T & U
With f0
'l'avantage de SpecialCells(xlCellTypeVisible) est d'éviter le test If .Hidden = False Then
Set MaPlage = .Range("T10", .Range("T" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
For Each Cel In MaPlage '<== Boucle
Dico(Cel.Value) = Dico(Cel.Value) + 1
ReDim Preserve Tabl(1 To 2, 1 To i) '<== redimensionnement et enregistrement de la variable tableau
Tabl(1, i) = Cel.Value '<== remplissage tableau dimension 1
Tabl(2, i) = Cel.Offset(, 1).Value '<== remplissage tableau dimension 2
i = i + 1
Next Cel
End With
'Restitution de la liste sans doublons + Nbre d'occurences
f1.Range("A40").Resize(Dico.Count, 1) = Application.Transpose(Dico.keys)
f1.Range("B40").Resize(Dico.Count, 1) = Application.Transpose(Dico.Items)
'test si date
'on voit ici l'intérêt d'avoir remplit notre variable tableau
'dans la boucle ci-dessus
For i = LBound(Tabl, 2) To UBound(Tabl, 2)
If IsDate(Tabl(2, i)) Then
'si oui le nombre d'occurence = Nbre d'occurence total
Dico(Tabl(1, i)) = Dico(Tabl(1, i))
Else
'si pas date ==> nombre d'occurence = Nbre d'occurence - 1
Dico(Tabl(1, i)) = Dico(Tabl(1, i)) - 1
End If
Next i
'restitution du nombre de dates par item de liste
f1.Range("C40").Resize(Dico.Count, 1) = Application.Transpose(Dico.Items)
'vidage de la mémoire "effacement" des objets déclarés et affectés en début de procédure
Set Dico = Nothing
Set f0 = Nothing
Set f1 = Nothing
Set MaPlage = Nothing
End Sub |
Partager