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
| Sub Macro2()
Dim OB As Worksheet 'déclare la variable OB (Onglet BDD)
Dim OF As Worksheet 'déclare la variable OF (Onglet Feuil2)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TMP As Variant 'd;eclare la variable TMP (tableau TeMPoraire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim TID() As Variant 'déclare la variable TID (Tableau des ID)
Set OB = Worksheets("BDD") 'définit l'onglet OB
Set OF = Worksheets("Feuil2") 'définit l'onglet OF
OF.Range("A1").CurrentRegion.Offset(1, 0).Clear 'efface d'éventuelles anciennes données de l'onglet OF
TV = OB.Range("A1").CurrentRegion 'définit le tableau des valeur TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionanire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 1) <> "" Then D(TV(I, 1)) = "" 'alimente le dictionnaire avec les données de la colonne 1 de TV
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 sur tous les éléments du tableau temporaire TMP
K = 0: Erase TID 'initialise la variable K, vide le tableau TID
For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
If TV(I, 1) = TMP(J) Then 'condition : si les dates correspondent
ReDim Preserve TID(K) 'redimensionne le tableau TID
TID(K) = TV(I, 2) 'récupère l'ID
K = K + 1 'incrémente K
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 2
OF.Cells(J + 2, "A").Value = TMP(J) 'renvoie la date de TMP(J) dans la cellule ligne J+2 colonne A de l'onglet OF
With OF.Cells(J + 2, "B").Validation 'prend en compte la validation de la cellule ligne J+2 colonne B de l'onglet OF
.Delete 'efface une eventuelle ancienne validation
.Add xlValidateList, Formula1:=Join(TID, ",") 'ajoute la liste de TID à la validation de données
End With 'fin de la prise en compte dd la...
Next J 'prochain élément de la boucle 1
End Sub |
Partager