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 52 53 54 55 56 57 58 59 60 61 62 63 64
| Private O As Worksheet 'déclare la variable O (Onglet)
Private Tableau_cellules As Variant 'déclare la variable Tableau_cellules (Tableau de Cellules)
Private Nombre_lignes As Integer 'déclare la variable Nombre_lignes (Nombre de Lignes)
Private Nombre_colonnes As Byte 'déclare la variable Nombre_colonnes (Nombre de colonnes)
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Set O = Sheets("base de données") 'définit l'onglet O
Tableau_cellules = O.Range("A1").CurrentRegion 'définit le tableau de cellules Tableau_cellules
Nombre_lignes = UBound(Tableau_cellules, 1) 'définit le nombre de lignes de Tableau_cellules
Nombre_colonnes = UBound(Tableau_cellules, 2) 'définit le nombre de colonnes de Tableau_cellules
Me.ListBox1.ColumnCount = Nombre_colonnes + 1 '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;" 'masque la première colonne de la ListBox1 (celle ou sera stocké le numéro de la ligne)
End Sub
Private Sub btm_ok_Click()
With TextBox1_Change() 'au chargement 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 Tableau_lignes() As Variant 'déclare la variable Tableau_lignes (Tableau des Lignes)
Me.ListBox1.Clear 'vide la ListBox1
K = 1 'initialise la variable K
For I = 2 To Nombre_lignes 'boucle 1 : sur toutes les lignes I du tableau de cellules Tableau_cellules (en partant de la seconde)
For J = 1 To Nombre_colonnes 'boucle 2 : sur toutes les colonnes J du tableau de cellules Tableau_cellules
If InStr(1, Tableau_cellules(I, J), Me.TextBox1.Value, vbTextCompare) <> 0 Then 'condition : si le texte de la TextBox1 est contenu dans la donnée
'ligne I colonne J (sans tenir compte de la casse)
ReDim Preserve Tableau_lignes(Nombre_colonnes + 1, 1 To K) 'redimensionne le tableau de lignes Tableau_lignes
Tableau_lignes(0, K) = I 'récupère dans la ligne 0, colonne K de Tableau_lignes le numéro de ligne (masqué)
For L = 1 To Nombre_colonnes 'boucle sur toutes les colonnes de Tableau_cellules
Tableau_lignes(L, K) = Tableau_cellules(I, L) 'récupère dans la ligne L, colonne K de Tableau_cellules la valeur de la ligne I , colonne L de Tableau_cellules (transposition)
Next L 'prochaine colonne de la boucle 2
K = K + 1 'incrémente K
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
If K > 1 Then 'condition : si K est supérieur à 1 (au moins une occurrence a été trouvé)
If K = 2 Then ReDim Preserve Tableau_lignes(Nombre_colonnes + 1, 1 To 2) 'si une seule occurrence trouvée, redimensionne Tableau_lignes pour pouvoir transposer
Me.ListBox1.List = Application.Transpose(Tableau_lignes) 'alimente la ListBox1 avec le tableau Tableau_lignes transposé
End If 'fin de la condition
End Sub
Private Sub ListBox1_Click() 'au clic dans la ListBox1
O.Rows(Me.ListBox1.Column(0, ListIndex)).Select 'sélectionne la ligne de l'élément sélectionné
Unload Me 'vide et ferme l'UserForm
End Sub |
Partager