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
| Option Explicit
'déclaration des variables pour l'USF
Dim Clt, machines As Range, selectMach(), derlg As Long, chid()
Dim x As Long, result As Long, z As Long, ch As String, cel As Range
Private Sub UserForm_Activate() 'quand on ouvre l'USF
lbClients.BoundColumn = 2 'voir avec l'aide la propriété de BoundColumn
With Sheets("Table adresse") 'évite de répêter le nom de la feuille concernée
derlg = .Range("A" & .Rows.Count).End(xlUp).Row 'sans oublier le "." devant range et rows, donne la dernière ligne utilisée en col A
Clt = .Range("A2:B" & derlg) 'remplit un tableau avec toutes les données de A2 à B & derniere ligne
lbClients.List = Clt 'remplit la listbox avec le tableau
End With 'fin de référence à la feuille concernée
'PS : je préfère utiliser les tableaux surtout si tu as beaucoup de données (bien plus rapide)
End Sub
Private Sub tbRecherche_Change()
lbClients.Clear 'quand on change la textbox, la listbox se vide
ch = UCase(tbRecherche) 'variable incrémentée (en majuscule, "Ucase") par chaque lettre entrée dans le textbox
For x = 1 To UBound(Clt, 1) 'le tableau déclaré commence en 1 et on fait une boucle jusqu'à la fin du tableau(col A)
If UCase(Clt(x, 2)) Like ch & "*" Then 'si le nom du tableau (en majuscule) contient la variable
With lbClients 'évite de répêter "lbClients
.AddItem Clt(x, 1) 'on ajoute en col1 de la listbox, l'ID
.Column(1, .ListCount - 1) = Clt(x, 2) 'et le nom en col2
End With 'fin de réference à bClients
End If
Next x 'et on boucle
End Sub
Private Sub lbClients_Click()
z = 0 'on initialise cette variable
With Sheets("Table equipement adresse")
derlg = .Range("A" & .Rows.Count).End(xlUp).Row
Set machines = .Range("A2:C" & derlg) 'remplit une plage avec toutes les données de A2 à C & derniere ligne
With Sheets("Table equipement actif")
derlg = .Range("C" & .Rows.Count).End(xlUp).Row
End With
'ci-dessous on cherche la valeur de la Listbox dans la colonne B de "Table equipement adresse"
result = WorksheetFunction.CountIf(machines.Columns(3), lbClients.Column(0))
ReDim chid(1 To result, 1 To 3)
For Each cel In .Range(machines.Columns(3).Address)
If cel = lbClients.Column(0) Then
z = z + 1
chid(z, 1) = cel.Value: chid(z, 2) = cel(1, 0).Value
ReDim Preserve selectMach(1 To result)
With Sheets("Table equipement actif")
selectMach(z) = .Range("A2:A" & derlg).Find(chid(z, 2), .Range("A" & derlg))(1, 3)
End With
End If
Next cel
End With
lbMachines.Clear 'on vide la listbox
'et on la remplit
lbMachines.List = WorksheetFunction.Transpose(selectMach) 'on est obligé de tranposer car dans ce cas le tableau est en ligne
End Sub |
Partager