Private Sub recherche_client_Click()
'''NE PAS CHANGER LE NOM DES TEXTBOX'''
Dim CTR As MSForms.Control
Dim Criteres()
Dim Tbl As Variant
Dim cpt&
Dim g&
Dim i&
Dim j&
Dim k&
Dim nbCol&
Dim T()
Dim T2()
'/// On balaie tous les contrôles du USF
For Each CTR In G_Clients.Controls
'/// si ce sont des TextBo, on traite
If TypeName(CTR) = "TextBox" Then
'/// si la Textbox possède une valeur, on traite
If CTR <> "" Then
'/// tableau dynamique des critères
cpt& = cpt& + 1
ReDim Preserve Criteres(1 To 2, 1 To cpt&)
'--- Numéro de la colonne ---
'/// le n° est obtenu à partir du nom de la TextBox
'/// on vire la longueur de "TextBox" et il reste le n°
'/// c'est pour cette raison qu'il ne faut pas changer les noms des TextBox
Criteres(1, cpt&) = CLng(Mid(CTR.Name, Len("TextBox") + 1))
'--- Valeur de la TextBox ---
Criteres(2, cpt&) = CTR
End If
End If
Next CTR
'/// si aucun critère n'a été trouvé, on sort
If cpt& = 0 Then
MsgBox "Veuillez indiquer au moins un critère de recherche"
IniListview (InitTableau)
Exit Sub
End If
'/// on charge le tableau Tbl avec toutes les données de la feuille Clients
Tbl = InitTableau
'/// nombre de colonnes de la feuille et du tableau
nbCol& = UBound(Tbl, 2)
'/// on boucle sur toutes les lignes du tableau Tbl
For i& = 1 To UBound(Tbl, 1)
'/// on boucle sur toutes les lignes du tableau Criteres
For j& = 1 To cpt&
'/// si correspondance Tbl vs Criteres on traite
'/// Lcase sert à minisculiser les caractères
If LCase(Tbl(i&, Criteres(1, j&))) = LCase(Criteres(2, j&)) Then
k& = k& + 1
'/// on redimensionne le tableau T (seule la dernière dimension peut être redimensionnée)
'/// 1ère dimension = colonnes 2ème dimension = lignes
ReDim Preserve T(1 To nbCol&, 1 To k&)
'/// sur la ligne qui va bien on affecte toutes les colonnes au tableau T
For g& = 1 To nbCol&
T(g&, k&) = Tbl(i&, g&)
Next g&
End If
Next j&
Next i&
'/// si aucun critère trouvé, on sort
If k& = 0 Then
MsgBox "Aucun critère n'a été trouvé"
IniListview (InitTableau)
Exit Sub
End If
'/// le tableau T a 2 dimensions colonnes et lignes
'/// on transpose pour avoir dans le tableau T2 lignes et colonnes
'--- Transposition du tableau ---
ReDim T2(1 To UBound(T, 2), 1 To UBound(T, 1))
For i& = 1 To UBound(T, 1)
For j& = 1 To UBound(T, 2)
T2(j&, i&) = T(i&, j&)
Next j&
Next i&
'--------------------------------
'/// on envoie tout le tableau pour remplir la ListView
IniListview (T2)
End Sub