Test des controls pour affichage d'un bouton

G

G'Claire

Guest
Bonsoir a toutes et tous,

J'aimerai pouvoir faire un test de mes control (si une donnée a été modifiée) afin d'afficher ou non le bouton "Modifier".

donc j'ai mis ce code :

Option Explicit

Dim Casier As String
Dim DateArchivage As String
Dim N°Mat As String
Dim Cableur As String
Dim Interlocuteur As String


Dans 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

End With


If Casier = TextBoxCasier Then
If DateArchivage = TextBoxDateEnregistrement Then
If N°Mat = ComboBoxMatricule Then
If Cableur = TextBoxCableurs Then
If Interlocuteur = ComboBoxClients Then
BoutModificationFiche.Visible = False

Else

BoutModificationFiche.Visible = True

End If
End If
End If
End If
End If


Le bouton s'éfface bien a l'ouverture de l'UserForm, mais si je modifie une donnée il ne s'affiche pas.

Aurais-je oublié quelque-chose?

Merci de votre aide, G'Claire
 
L

LaurentTBT

Guest
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.
 

Discussions similaires

Statistiques des forums

Discussions
312 967
Messages
2 094 030
Membres
105 920
dernier inscrit
SAUSSARd