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
| Private Sub TextBox1_Change()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim NL As Long 'déclare la variable NL (Nombre de Lignes)
Dim NC As Integer 'déclare la variable NC (Nombre de Colonnes)
Dim K As Long 'déclare la variable K (incrément de colonne)
Dim I As Integer 'déclare la variable I (Incrément de ligne)
Dim J As Integer 'déclare la variable J (incrément de colonne)
Dim TL() As Variant 'déclare la variable TL(Tableau de Lignes)
Dim L As Integer 'déclare la variable L (incrément de colonne)
If Me.TextBox1.Value = "" Then ListBox1.Clear: Exit Sub 'si la Textbox1 est effacée, vide la ListBox1, sort de la procédure
Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
ListBox1.Clear 'vide la ListBox1
TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
NL = UBound(TC, 1) 'définit le nombre de lignes NL dans le tableau de cellules TC
NC = UBound(TC, 2) 'définit le nombre de colonnes NC dans le tableau de cellules TC
Me.ListBox1.ColumnCount = NC 'définit le nombre de colonnes de la ListBox1
K = 1 'initialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
For J = 2 To 4 'boucle 2 sur les colonnes 2 à 4 (=> colonnes B à D) du tableau de cellules TC
'condition : si le texte de la TextBox1 est contenu dans la valeur ligne I colonne J de TC (sans tenir compte de la casse)
If UCase(TC(I, J)) Like "*" & UCase(Me.TextBox1.Value) & "*" Then
ReDim Preserve TL(1 To NC, 1 To K) 'redimensionne le tableau TL (autant de lignes que TC a de colonnes, K colonnes)
For L = 1 To NC 'boucle 3 : sur toutes les colonnes de TC
TL(L, K) = TC(I, L) 'récupère dans la ligne de TL la valeur de la colonne de TC (=Transposition)
Next L 'prochaine colonne de la boucle 3
K = K + 1 'incrémnte K (nouvelle colonne au tabelau TL)
Exit For 'sort de la boucle 2
End If 'fin de la condition
Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
'si K=1 (=> aucune occurrence trouvée), message, sort de la procédure
If K = 1 Then MsgBox "La personne recherchée n'est pas dans la liste", vbExclamation: Exit Sub
'si K=2 (=> une seule occurence trouvée) redimentionne TL à deux colonnes sinon tranposition impossible
If K = 2 Then ReDim Preserve TL(1 To UBound(TL, 1), 1 To 2)
'alimente la ListBox1 par le tableau TL transposé
Me.ListBox1.List = Application.Transpose(TL)
End Sub |
Partager