Private fBD As Object, d As Object, tBD
Private Sub CommandButton1_Click()
Dim c As String
c = Me.Designation.Text
'On extrait dans un nouveau tableau les lignes du premier tableau en fonction du critère, Array(1,2,3) désigne les trois colonnes du tableau
t = Application.Index(tBD, Application.Transpose(Split(d(c), ":")), Array(1, 2, 3))
With fBD
'On insère le nombre de ligne selon l'index -1 (ligne vide)
.Rows(2).Resize(UBound(t) - 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
'On supprime le remplissage
.Rows(2).Resize(UBound(t) - 1).Interior.Pattern = xlNone
'On note les valeurs à partir de A2
.Range("a2").Resize(UBound(t) - 1, 3).Value = t
'On modifie la désignation en fonction de TextBox
.Range("a2").Resize(UBound(t) - 1, 1).Value = Me.TextBox1.Value
End With
Unload Me
UserForm1.Show
End Sub
Private Sub Designation_Change()
Activer_Bouton
End Sub
Private Sub TextBox1_Change()
'On vérifie que le texte n'existe pas dans le dico
If d.exists(Me.TextBox1.Value) Then Me.CommandButton1.Enabled = False: MsgBox "Désignation existante", vbCritical: Exit Sub
'On lance la procédure qui active le bouton
Activer_Bouton
End Sub
Private Sub Activer_Bouton()
'Si les deux valeurs sont remplies on active le bouton
With Me
If .Designation.Text <> "" And .TextBox1.Text <> "" Then
.CommandButton1.Enabled = True
Else: .CommandButton1.Enabled = False
End If
End With
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
Set fBD = Sheets("BDFT")
'Mise sous forme de tableau de la zone à traiter
tBD = fBD.Range("A2:C" & fBD.[A65000].End(xlUp).Row)
Set d = CreateObject("scripting.dictionary")
'On boucle le tableau sur la première colonne
For i = LBound(tBD) To UBound(tBD)
'dOuv(1) = dOuv(1) & i + 1 & "|"
d(tBD(i, 1)) = d(tBD(i, 1)) & i & ":" 'On extrait les numéros de ligne en item du dico
Next i
Me.Designation.List = d.keys
Me.CommandButton1.Enabled = False 'On désactive le bouton valider
End Sub