Bonsoir Jacques.
Décidémment, tu es fâché avec les If ... then...else imbriqués.
Ici, tu n'affiches le bouton que si interlocuteur <>comboboxclients.
Plutôt que de mettre des if ... then...else imbriqués, utilise AND et mets-en 1 seul:
If Casier = TextBoxCasier and DateArchivage = TextBoxDateEnregistrement and _
N°Mat = ComboBoxMatricule and Cableur = TextBoxCableurs and _
Interlocuteur = ComboBoxClients Then
BoutModificationFiche.Visible = False
Else
BoutModificationFiche.Visible = True
End If
Ensuite, ce code ne doit pas se trouver dans initialize, car la condition sera forcément vraie.
Il faut que tu le mettes à chaque contrôle:
Private Sub UserForm_Initialize()
'Initialisation les Variable pour mémoriser le valeur précédente
With Me
Casier = .TextBoxCasier
DateArchivage = .TextBoxDateEnregistrement
N°Mat = .ComboBoxMatricule
Cableur = .TextBoxCableurs
Interlocuteur = .ComboBoxClients
BoutModificationFiche.Visible = False
End With
Private Sub TextBoxCasier_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Casier = TextBoxCasier and DateArchivage = TextBoxDateEnregistrement and _
N°Mat = ComboBoxMatricule and Cableur = TextBoxCableurs and _
Interlocuteur = ComboBoxClients Then
BoutModificationFiche.Visible = False
Else
BoutModificationFiche.Visible = True
End If
end sub
Private Sub TextBoxDateEnregistrement_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Casier = TextBoxCasier and DateArchivage = TextBoxDateEnregistrement and _
N°Mat = ComboBoxMatricule and Cableur = TextBoxCableurs and _
Interlocuteur = ComboBoxClients Then
BoutModificationFiche.Visible = False
Else
BoutModificationFiche.Visible = True
End If
End Sub
et etc pour ComboBoxMatricule, TextBoxCableurs et ComboBoxClients.
C'est en effet quand on modifie un des contrôles qu'on vérifie si c'est égal à la valeur initiale.
Si tous sont égaux, alors le bouton reste caché.
Si un seul est modifié, aors le bouton apparaît.
Jacques, regarde aussi le fichier que je t'ai envoyé, je te réexplique comment travailler avec des If...Then imbriqués.
Bon courage.
Laurent.
PS: en relisant, je me demande aussi comment dans ton initialisation, tu remplis les contrôles.
Si tu les remplis avec les valeurs qu'on veut éventuellement modifier dans une autre macro qui appelle ensuite le userform, je pense que tes variables initiales sont toutes vides.
En effet, si tu as dans une macro, par exemple:
userform.TextBoxCasier= Range("A1")
userform.TextBoxDateEnregistrement=range("B1")
userform.ComboBoxMatricule=range("B1")
userform.TextBoxCableurs=range("B1")
userform.ComboBoxClients=range("B1")
userform.show
alors la procédure initialize est exécutée dés que VBA rencontre le premier mot "userform", avant de remplir les contrôles.
Et donc, tes variables Casier, DateArchivage, N°Mat , Cableur, Interlocuteur sont toutes égales à ""
Je pense qu'il faut que tu remplaces Initialize par activate, car la sub userform_activate ne se déclenche que à userform.show, et donc dans ce cas, les contrôles sont remplis des valeurs souhaitées avant.