Bonsoir et merci pour le clin d'œil !
Ci dessous le code modifié, peut-être (surement...) existe-t-il une solution "plus propre", mais ici ça a le mérite de fonctionner...
J'ai rajouté une variable à postée globale : Modif_en_cours. Le reste de l'explication est en commentaire dans le code
Private Sub CboLigne_Change()
Dim Cell As Range
Dim Usd As Long
If Modif_en_cour = False Then
Usd = CboLigne.Value
For Each Cell In Sheets("REMISE").Range("Rang")
If Cell.Value = Usd Then
With TextBox1
.Value = Cell.Offset(0, 1).Value
.Enabled = True
End With
With ComboBox1
.Value = Cell.Offset(0, 2).Value
.Enabled = True
End With
With TextBox3
.Value = Cell.Offset(0, 3).Value
.Enabled = True
End With
With TextBox2
.Value = Cell.Offset(0, 4).Value
.Enabled = True
End With
With CboMontant
.Value = Cell.Offset(0, 5).Value
.Enabled = True
End With
Exit For
End If
Next Cell
End If
End Sub
Private Sub CmdAnnuler_Click()
UserForm4.Hide
If UserForm3.Visible = False Then
UserForm3.Show
End If
End Sub
Private Sub CmdValider_Click()
Dim Cell As Range
Dim Usd As Long
Modif_en_cour = True
Usd = CboLigne.Value
For Each Cell In Sheets("REMISE").Range("Rang")
If Cell.Value = Usd Then
Cell.Offset(0, 1).Value = UCase(TextBox1.Value) ' numéro de chèque
Cell.Offset(0, 2).Value = ComboBox1.Value ' banque
Cell.Offset(0, 3).Value = UCase(TextBox3.Value) ' raison social
Cell.Offset(0, 4).Value = UCase(TextBox2.Value) ' numéro du compte
Cell.Offset(0, 5).Value = CboMontant.Value ' montant
Modif_en_cour = False
Exit For
End If
Next Cell
Unload Me
MsgBox "Modification(s) effectuée(s) au rang n°" & CboLigne.Value, vbInformation, "Modification rang n°" & CboLigne.Value
End Sub
Private Sub UserForm_Initialize()
'ici vous désignez la row source de CboLigne grâce à la colonne rang avec une zone "nommée"
' hors dans le userform4 avec la fonction UCase(TextBox1.Value) vous déclenchez la private sub CboLigne_Change()
' celle-ci met les valeurs de la ligne considérée dans les textbox et combobox du userform4 !
' donc quand vous demandez de modifier, vous remettez les valeurs d'origines puis vous les copiez, donc pas de modif !!!!
' moi avec mon niveau j'ai crée une variable booléenne à portée globale au doux nom de "Modif_en_cours"
' l'autre solution, remplir la combobox avec les données de la colonne sans passer par la zone de la feuille avec Add.Item...
'mais là je n'ai pas le temps, et il y a les autres bienfaiteurs de votre liste de votre post !!! ;-)
Modif_en_cours = False
CboLigne.RowSource = ("REMISE!Rang")
ComboBox1.RowSource = ("REMISE!Banque")
CboMontant.RowSource = ("REMISE!MONTANT")
End Sub
Ensuite le rajout de la variable globale au tout début du module1 :
Public Modif_en_cour As Boolean
Sub Bouton1735_Clic()
UserForm3.Show
End Sub
Voilà
@ bientôt
LouReeD