OVH Cloud OVH Cloud

Ajouter un 2ième IF sur un bouton de commande

9 réponses
Avatar
butch
Bonjour,

Dans un formulaire, un bouton de commande permettant d'exécuter une requête,
possède déjà le code permettant de vérifier si un contrôle type Case à cocher
du formulaire a bien été coché (ou décoché) en cliqant sur ce bouton de
commande.

Question :
Est-il possible d'ajouter à ce même bouton de commande, un autre bout de
code permettant cette fois de vérifier si un autre contrôle du formulaire
(contrôle provenant de la table sous-jacente), de type texte, contient une
donnée ?

Ex1: Si aucune donnée n'a été inscrite dans le contrôle type texte, faire
afficher un message à l'usager à l'effet qu'il a oublié cette donnée.

Ex2: Si un contrôle type texte contient déjà une donnée et que celle-ci
doit être supprimée avant de cliquer sur le bouton de commande, faire
afficher un message lorsque l'usager cliquera sur le bouton de commande, afin
de lui rappeler de supprimer la donnée dans le contrôle.


Note: Les exemples Ex1 et Ex2 s'appliqueront évidemment dans 2 formulaires
différents mais toujours en ajoutant un code à un bouton de commande
contenant déjà un "IF", sur chaque formulaire.
--
Merci pour votre aide :-)
Butch

P.-S: Pour écrire à mon adresse personnelle S.V.P. enlever "nospam_" devant
celle-ci.

9 réponses

Avatar
Gafish
"butch" a écrit dans le message de news:

Bonjour,


Bonjour,

Question :
Est-il possible d'ajouter à ce même bouton de commande, un autre bout de
code permettant cette fois de vérifier si un autre contrôle du formulaire
(contrôle provenant de la table sous-jacente), de type texte, contient une
donnée ?


Avec les If, tu peux les imbriquer, exemple :
if condition1 then
if condition2 then
...
end if
end if

et tu peux aussi les mettre sur une même ligne avec les opérateur or et and

if condition1 and condition2 then....

Ex1: Si aucune donnée n'a été inscrite dans le contrôle type texte, faire
afficher un message à l'usager à l'effet qu'il a oublié cette donnée.


if Me.TaZone = "" then
msgbox "Vous n'avez pas renseigné TaZone !"
end if

Ex2: Si un contrôle type texte contient déjà une donnée et que celle-ci
doit être supprimée avant de cliquer sur le bouton de commande, faire
afficher un message lorsque l'usager cliquera sur le bouton de commande,
afin

de lui rappeler de supprimer la donnée dans le contrôle.


If Me.TaZone <> "" then
msgbox "il faudra penser à supprimer la donnée dans TaZone"
end if

ou même tu vides la zone par code :
Me.TaZone = ""

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
butch
Bonjour Arnaud,

D'abord, merci d'avoir répondu.

Mais, actuellement, je n'arrive pas à insérer tes suggestions dans le code
existant du bouton de commande. J'ai essayé avec le AND et OR sur la même
ligne ou avec 2 If imbriqués. Dans les 2 cas, la deuxième condition n'est
pas pris en compte. Après le message rattaché à la première condition,
l'opération (macro) s'exécute même si le deuxième contrôle n'est pas
renseigné (ou la donnée supprimée) par l'usager.

Afin de mieux comprendre la situation, j'ai copié ci-dessous le code actuel
du bouton, incluant la condition vérifiant si une case à cocher (contrôle
À_Archiver) a été activée. Ce code fonctionne correctement présentement.
Peut-être qu'en le consultant, tu pourras m'indiquer où je fais l'erreur.
Voici le code :

Private Sub Bt_SAUVEGARDER_BDVer4__Click()
On Error GoTo Err_Bt_SAUVEGARDER_BDVer4__Click

Dim stDocName As String

Dim strMsg As String

If Me.À_Archiver = 0 Then
strMsg = MsgBox("Vous devez cocher un ou plusieurs clients" &
Chr(13) & "dans la case À Archiver AVANT de cliquer sur le bouton
SAUVEGARDER.")
Else
stDocName = "2- Sauvegarde et Suppression des coordonnées des bénévoles"
DoCmd.RunMacro stDocName

End If

Exit_Bt_SAUVEGARDER_BDVer4__Click:
Exit Sub

Err_Bt_SAUVEGARDER_BDVer4__Click:
MsgBox Err.Description
Resume Exit_Bt_SAUVEGARDER_BDVer4__Click

End Sub
--
Merci pour votre aide :-)
Butch

P.-S: Pour écrire à mon adresse personnelle S.V.P. enlever "nospam_" devant
celle-ci.



"butch" a écrit dans le message de news:

Bonjour,


Bonjour,

Question :
Est-il possible d'ajouter à ce même bouton de commande, un autre bout de
code permettant cette fois de vérifier si un autre contrôle du formulaire
(contrôle provenant de la table sous-jacente), de type texte, contient une
donnée ?


Avec les If, tu peux les imbriquer, exemple :
if condition1 then
if condition2 then
...
end if
end if

et tu peux aussi les mettre sur une même ligne avec les opérateur or et and

if condition1 and condition2 then....

Ex1: Si aucune donnée n'a été inscrite dans le contrôle type texte, faire
afficher un message à l'usager à l'effet qu'il a oublié cette donnée.


if Me.TaZone = "" then
msgbox "Vous n'avez pas renseigné TaZone !"
end if

Ex2: Si un contrôle type texte contient déjà une donnée et que celle-ci
doit être supprimée avant de cliquer sur le bouton de commande, faire
afficher un message lorsque l'usager cliquera sur le bouton de commande,
afin

de lui rappeler de supprimer la donnée dans le contrôle.


If Me.TaZone <> "" then
msgbox "il faudra penser à supprimer la donnée dans TaZone"
end if

ou même tu vides la zone par code :
Me.TaZone = ""

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
Gafish
butch wrote:
Afin de mieux comprendre la situation, j'ai copié ci-dessous le code
actuel du bouton, incluant la condition vérifiant si une case à
cocher (contrôle À_Archiver) a été activée. Ce code fonctionne
correctement présentement.


Mets plutôt le code que tu as essayé et qui ne fonctionne pas, on pourra
comme cela voir où tu fais erreur.

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
butch
Bonjour Arnaud,

Voici le 2ième bout de code (2ième IF) que j'essaie d'insérer dans le code
du bouton qui contient déjà un IF :

If Me.Date_de_fin_de_service = "" Then
MsgBox "Vous devez inscrire l'année dans la zone À Archiver"
Else
stDocName = "2- Sauvegarde et Suppression des coordonnées des clients"
DoCmd.RunMacro stDocName
End If

Ce qui se produit actuellement (qui ne fonctionne pas) :

1) Si les 2 contrôles ("case à cocher" et "Date_de_fin_de_service) ne sont
pas renseignés, le premier IF (IF actuel) stoppe correctement l'opération
mais, le message indiquant que l'opération est terminée (ce message provient
d'un MsgBox de la macro exécutée par la commande DoCmd) s'affiche quand même.

2) Si le contrôle "case à cocher" est activé comme il se doit mais que le
deuxième contrôle (Date_de_fin_de_service), ne l'est pas, la macro s'exécute
quand même et le message du 2ième IF (celui copié au début de ce message)
s'affiche... l'opération n'est donc pas stoppée comme je le souhaiterais.

J'espère que ces explications te seront utiles.
--
Merci pour votre aide :-)
Butch

P.-S: Pour écrire à mon adresse personnelle S.V.P. enlever "nospam_" devant
celle-ci.



butch wrote:
Afin de mieux comprendre la situation, j'ai copié ci-dessous le code
actuel du bouton, incluant la condition vérifiant si une case à
cocher (contrôle À_Archiver) a été activée. Ce code fonctionne
correctement présentement.


Mets plutôt le code que tu as essayé et qui ne fonctionne pas, on pourra
comme cela voir où tu fais erreur.

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
Gafish
Essaie comme cela alors :

Private Sub Bt_SAUVEGARDER_BDVer4__Click()
On Error GoTo Err_Bt_SAUVEGARDER_BDVer4__Click

Dim stDocName As String
Dim strMsg As String

If Me.À_Archiver = 0 Then
strMsg = MsgBox("Vous devez cocher un ou plusieurs clients" &
Chr(13) & "dans la case À Archiver AVANT de
cliquer sur le bouton SAUVEGARDER.")
Else
If Me.Date_de_fin_de_service = "" Then
MsgBox "Vous devez inscrire l'année dans la zone À Archiver"
Else
stDocName = "2- Sauvegarde et Suppression des coordonnées des
bénévoles" DoCmd.RunMacro stDocName
End If
End If

Exit_Bt_SAUVEGARDER_BDVer4__Click:
Exit Sub

Err_Bt_SAUVEGARDER_BDVer4__Click:
MsgBox Err.Description
Resume Exit_Bt_SAUVEGARDER_BDVer4__Click

End Sub
Avatar
butch
Re-bonjour Arnaud,

Le 2ième IF ne fonctionne pas encore..!

Explications :
Si le premier contrôle (case à cocher) n'est pas activé, le premier IF fait
sont travail correctement... tout s'arrête.
Si ce premier contrôle est activé, le 2ième IF n'arrête pas la procédure SI
le deuxième contrôle (Date de fin de service) est vide. La macro s'exécute
quand même.

Au cas où cela serait utile, voici le code au complet :

Private Sub Bt_SAUVEGARDER_BDVer4__Click()
On Error GoTo Err_Bt_SAUVEGARDER_BDVer4__Click

Dim stDocName As String
Dim strMsg As String

If Me.À_Archiver = 0 Then
strMsg = MsgBox("Vous devez cocher un ou plusieurs bénévoles" &
Chr(13) & "dans la case À Archiver AVANT de cliquer sur le bouton
SAUVEGARDER.")
Else
If Me.Date_de_fin_de_service = "" Then
MsgBox "Vous devez inscrire l'année dans la zone À Archiver."
Else
stDocName = "2- Sauvegarde et Suppression des
coordonnées des bénévoles"
DoCmd.RunMacro stDocName
End If
End If

Exit_Bt_SAUVEGARDER_BDVer4__Click:
Exit Sub

Err_Bt_SAUVEGARDER_BDVer4__Click:
MsgBox Err.Description
Resume Exit_Bt_SAUVEGARDER_BDVer4__Click

End Sub

Une note supplémentaire (peut-être est-ce là le problème...) : le deuxième
contrôle (Date de fin de service), après vérification (je m'en excuse...) est
de type Date/heure dans le formulaire, donc de même type dans la table
sous-jacente.
--
Merci pour votre aide :-)
Butch

P.-S: Pour écrire à mon adresse personnelle S.V.P. enlever "nospam_" devant
celle-ci.



Essaie comme cela alors :

Private Sub Bt_SAUVEGARDER_BDVer4__Click()
On Error GoTo Err_Bt_SAUVEGARDER_BDVer4__Click

Dim stDocName As String
Dim strMsg As String

If Me.À_Archiver = 0 Then
strMsg = MsgBox("Vous devez cocher un ou plusieurs clients" &
Chr(13) & "dans la case À Archiver AVANT de
cliquer sur le bouton SAUVEGARDER.")
Else
If Me.Date_de_fin_de_service = "" Then
MsgBox "Vous devez inscrire l'année dans la zone À Archiver"
Else
stDocName = "2- Sauvegarde et Suppression des coordonnées des
bénévoles" DoCmd.RunMacro stDocName
End If
End If

Exit_Bt_SAUVEGARDER_BDVer4__Click:
Exit Sub

Err_Bt_SAUVEGARDER_BDVer4__Click:
MsgBox Err.Description
Resume Exit_Bt_SAUVEGARDER_BDVer4__Click

End Sub





Avatar
Gafish
butch wrote:
Si le premier contrôle (case à cocher) n'est pas activé, le premier
IF fait sont travail correctement... tout s'arrête.
Si ce premier contrôle est activé, le 2ième IF n'arrête pas la
procédure SI le deuxième contrôle (Date de fin de service) est vide.
La macro s'exécute quand même.


C'est la condition qui n'est pas bonne alors. Essaie de remplacer :

If Me.Date_de_fin_de_service = "" Then


par if IsNull(Me.Date_de_fin_de_service) then

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
butch
Bonjour Arnaud,

Merci beaucoup....

C'est la condition qui n'est pas bonne alors. Essaie de remplacer :

If Me.Date_de_fin_de_service = "" Then


par if IsNull(Me.Date_de_fin_de_service) then


...Cela fonctionne correctement.

J'ai par contre un autre formulaire (structure similaire au premier) sur
lequel, dans un contrôle, je dois vérifier par un 2ième IF si cette fois,
l'usager a effacé une date dans ce contrôle. Compte tenu de tes informations
dans les messages précédents, j'ai essayé d'ajouter le bout de code suivant
sur le bouton de commande de ce formulaire :

If (Me.Bt_Récupérer) <> "" Then
MsgBox "Vous devez supprimer la date dans la zone Fin de service."
Else
stDocName = "Supp12-2003/RécupérerBénéSauvegardé/+SupprimerBénéSauv(BDVer4)"
DoCmd.RunMacro stDocName
End If

Ce code s'ajoute aussi à un premier IF qui fonctionne (comme dans l'autre
formulaire).

Lorsque je clique sur le bouton de commande, le premier IF est OK mais,
Access affiche le message suivant :"Propriété ou méthode non géré par cet
objet" (probablement en arrivant au 2ième IF).

Il y a erreur sûrement... mais où ?

Encore merci.

--
Merci pour votre aide :-)
Butch

P.-S: Pour écrire à mon adresse personnelle S.V.P. enlever "nospam_" devant
celle-ci.



butch wrote:
Si le premier contrôle (case à cocher) n'est pas activé, le premier
IF fait sont travail correctement... tout s'arrête.
Si ce premier contrôle est activé, le 2ième IF n'arrête pas la
procédure SI le deuxième contrôle (Date de fin de service) est vide.
La macro s'exécute quand même.




Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
butch
Bonjour Arnaud,

OK... j'ai trouvé ! S.V.P. ne pas tenir compte de l'autre message (même
niveau).

Le code :
If Me.Date_de_fin_de_service <> "" Then
MsgBox "Vous devez supprimer la date inscrite dans la zone Fin
Service"
Else...
Fonctionne correctement. J'ai fait une erreur dans le nom du contrôle (Date
de fin de service) en utilisant le nom du bouton à la place !

"Dur, Dur le VBA"! et surtout quand c'est moi qui l'utilise ;-)

Encore GROS merci.
--
Merci pour votre aide :-)
Butch

P.-S: Pour écrire à mon adresse personnelle S.V.P. enlever "nospam_" devant
celle-ci.



butch wrote:
Si le premier contrôle (case à cocher) n'est pas activé, le premier
IF fait sont travail correctement... tout s'arrête.
Si ce premier contrôle est activé, le 2ième IF n'arrête pas la
procédure SI le deuxième contrôle (Date de fin de service) est vide.
La macro s'exécute quand même.


C'est la condition qui n'est pas bonne alors. Essaie de remplacer :

If Me.Date_de_fin_de_service = "" Then


par if IsNull(Me.Date_de_fin_de_service) then

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr