Private O As Worksheet 'déclare la variable O (Onglet)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private NL As Integer 'déclare la variable NL (Nombre de Lignes)
Private Sub Userform_Initialize() 'à l'initialisation de l'UserForm
Set O = Sheets("enregistrement total") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes de TV
Me.ListBox1.ColumnCount = 10 'définit le nombre de colonnes de la ListBox1 (à adapter, dans cet exemple je recherche dans la ligne entière. +1 pour le numéro de ligne)
Me.ListBox1.ColumnWidths = "0 pt;60;60;60;60;60;60;60;60;60;60" 'masque la première colonne de la ListBox1 (celle ou sera stocké le numéro de la ligne) et définit la taille des autres
End Sub
Private Sub TextBox1_Change() 'au changement dans la TextBox1
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)
Dim L As Byte 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Me.ListBox1.Clear 'vide la ListBox1
If Me.TextBox1.Value = "" Then Exit Sub 'si la TextBox1 est effacée, sort de la procédure
K = 1 'initialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
For J = 1 To 12 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
Select Case J 'agit en fonction de la valeur de J
Case 1 To 8, 12 'cas des colonne 1 à 8 (A à H) et 12 (L)
'condition : si les X caractères éditées dans la TextBox1 correspondent aux X premiers caractères de la donnée ligne I colonne J de TV (converties en majuscules les deux)
If UCase(Me.TextBox1.Value) = UCase(Left(TV(I, J), Len(Me.TextBox1.Value))) Then
ReDim Preserve TL(1 To 10, 1 To K) 'redimensionne le tableau de lignes TL (10 lignes, K colonnes)
TL(1, K) = I 'récupère dans la ligne 1, colonne K de TL le numéro de ligne (masqué)
For L = 2 To 9 'boucle sur toutes les colonnes 2 à 9
TL(L, K) = TV(I, L - 1) 'récupère dans la ligne L de TL la valeur de la colonne L-1 de TV (=> Transposition)
Next L 'prochaine colonne de la boucle 2
TL(10, K) = TV(I, 12) 'récupère dans la ligne 10 de TL, la donnée colonne 12 de TV
K = K + 1 'incrémente K
Exit For 'sort de la boucle 2
End If 'fin de la condition
End Select
Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
If K > 1 Then 'condition : si K est supérieur à 1 (au moins une occurrence a été trouvé)
If K = 2 Then ReDim Preserve TL(1 To 10, 1 To 2) 'si une seule occurrence trouvée, redimensionne TL pour pouvoir transposer
Me.ListBox1.List = Application.Transpose(TL) 'alimente la ListBox1 avec le tableau TL transposé
End If 'fin de la condition
End Sub
Private Sub ListBox1_Click() 'au clic dans la ListBox1
With ListBox1
' Si un choix a été effectué
If .ListIndex > -1 Then
O.Rows(.Column(0, .ListIndex)).Select 'sélectionne la ligne de l'élément sélectionné
End If
End With
Unload Me 'vide et ferme l'UserForm
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
Private Sub CommandButton2_Click()
Sheets("TB").Activate
End Sub