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
| Private O As Worksheet 'déclare la variable O (Onglet)
Private TC As Variant 'déclare la variable TC (Tableau de Cellules)
Private NL As Integer 'déclare la variable NL (Nombre de Lignes)
Private NC As Byte 'déclare la variable NC (Nombre de Colonnes)
Private Sub ComboBox1_GotFocus() 'quand la ComboBox1 est sélectionnée
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
'alimentation dynamique de la ComboBox1
Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter)
TC = O.Range("A1").CurrentRegion 'définit le tableau de c ellules TC
NL = UBound(TC, 1) 'définit le nombre de lignes NL du tabelau de cellules TC
NC = UBound(TC, 2) 'définit le nombre de colonnes NC du tabelau de cellules TC
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To NL 'boucle sur toutes les lignes I du tabelau de cellules TC (en partant de la seconde)
D(TC(I, 1)) = "" 'alimente le dictionnaire D
Next I 'prochaine ligne de la boucle
Me.ComboBox1.List = D.keys 'alimente la ComboBox1avec la liste des éléments du dictionnaire D sans doublon
End Sub
Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
Dim TL() As Variant 'définit la variable TL (Tableau de Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Range("A1").CurrentRegion.ClearContents 'efface les anciennes données
K = 1 'initialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tabelau de cellules TC (en partant de la seconde)
If CStr(TC(I, 1)) = Me.ComboBox1.Value Then 'condition : si la valeur en ligne I, colonne 1 de TC est égale à la valeur de la ComboBox1
ReDim Preserve TL(1 To NC, 1 To K) 'redimensionne le tableau TL
For J = 1 To NC 'boucle 2 : sur toutes les colonnes de TC
TL(J, K) = TC(I, J) 'récupere dans la ligne J, colonne K de TL la valeur ligne I, colonne J de TC (=tansposition)
Next J 'prochaine colonne de la boucle 2
K = K + 1 'íncrémente K
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
If K > 1 Then Range("A1").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL) 'renvoie dans A1 redimensionnée le tableau TL transposé si K est supérieur à 1
Range("A1").Select 'sélectionne la cellule A1
End Sub |
Partager