Private Nr_Lign As Integer
Private OB As Worksheet
Private OL As Worksheet
'---------------------------------------------------------
'A l'ouverture du userform, initialise la liste déroulante
'---------------------------------------------------------
Private Sub userform_initialize()
Dim I As Integer 'déclare la variable I (Incrément)
Me.ComboBox1.ColumnCount = 2 'définit le nombre de colonne de la ComboBox1
Me.ComboBox1.ColumnWidths = "0" 'taille des colonnes (ici la colonne 0 sera masquée)
Set OB = Worksheets("Biens") 'définit l'onglet OB
Set OL = Worksheets("Locataires") 'définit l'onglet OL
For I = 3 To OB.Cells(Application.Rows.Count, "A").End(xlUp).Row 'boucle sur toutes les lignes I (de 3 à la dernière ligne éditée de la colonne A de l'onglet OB)
If OB.Cells(I, "K").Value <> "" Then 'condition : si la cellule ligne I colonne K de l'onglet OB n'est pas vide
With Me.ComboBox1 'prends en compte la ComboBox1
.AddItem 'ajoute un élément
.Column(0, .ListCount - 1) = I 'récupère le numéro de ligne I dans la colonne 0 (masquée)
.Column(1, .ListCount - 1) = OB.Cells(I, "K").Value 'récupère le numéro du bail dans la colonne 1
End With 'fin de la prise en compte de la ComboBox1
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub
'--------------------------------------------------------
'Suivant choix du bien remplir formulaire non modifiable
'--------------------------------------------------------
Private Sub ComboBox1_Change()
Dim I As Integer 'déclare la variable I (Incrément)
Dim LB As Integer 'déclare la variable LB (Ligne Biens)
Dim LL As Integer 'déclare la variable LL (Ligne Locataire)
Dim CTRL As Control 'déclare la variable CTRL (ConTRôLe)
Dim O As Worksheet 'déclare la variable O (Onget)
Dim COL As String 'déclare la variable COL (COLonne)
If ComboBox1.ListIndex = -1 Then Exit Sub
For I = 5 To OL.Cells(Application.Rows.Count, "A").End(xlUp).Row 'boucle sur toutes les lignes I (de 5 à la dernière ligne éditée de la colonne A de l'onglet OL)
'si la cellule ligne I colonne Y de l'onglet OL est égale au Numéro de bail dans la colonne 1 de la ComboBox1, définit la ligne de locataire LL, sort de la boucle
If OL.Cells(I, "Y").Value = Me.ComboBox1.Column(1, Me.ComboBox1.ListIndex) Then LL = I: Exit For 'si la celllue ligne I colonne Y de l'onglet OL est égale au N0uméro de bail dans la colonne 1 de la ComboBox1, de;finit la ligne de 'ocataire LL
Next I 'prochaine ligne de la boucle
For Each CTRL In Me.Controls 'boucle sur tous les contrôle de l'userform
If CTRL.Tag <> "" Then 'condition : si la propriété [Tag] du contrôle n'est pas vide
Set O = Worksheets(Split(CTRL.Tag, "-")(0)) 'définit l'onglet O (texte avant le tiret de la propriété [Tag] du contrôle)
COL = Split(CTRL.Tag, "-")(1) 'définit la colonne COL (texte après le tiret de la propriété [Tag] du contrôle)
Select Case O.Name 'agit en fonction de l'onglet O
Case "Biens" 'cas "Biens"
LB = Me.ComboBox1.Column(0, Me.ComboBox1.ListIndex) 'définit la ligne Bien (dans la colonne masquée 0 de la ComboBox1)
CTRL.Value = O.Cells(LB, COL) 'récupère la valeur de la cellue ligne LB colonne COL de l'onlet O dans le contrôle de la boucle
Case "Locataires" 'cas "Locataires"
CTRL.Value = O.Cells(LL, COL) 'récupère la valeur de la cellue ligne LL colonne COL de l'onlet O dans le contrôle de la boucle
End Select 'fin de l'action en fonction de l'onglet O
End If 'fin de la condition
Next CTRL 'prochain contrôle de la boucle
'Call Locked(True)
End Sub