OVH Cloud OVH Cloud

Rendre invisible des boutons en fonction des résultats d'une requête

4 réponses
Avatar
Kostro
Bonjour,
J'ai affecté à l'événement sur clic d'un bouton dans un menu général, le
code suivant :

DoCmd.OpenForm "FrmFicheAjoutModif"
Forms![FrmFicheAjoutModif].RecordSource = "rqfrmFicheModifSélAuteur"

Après l'application de la requête, s'il n'y pas plus d'un enregistrement, je
voudrais rendre invisible les boutons de déplacement, avec ceci :
With Me.RecordsetClone
If Me.Count = 1 Then
Me.BtEnrgtPréc.Visible = False
Me.BtEnrgtSuivant.Visible = False
Me.BtAtteindreDébut.Visible = False
Me.BtAtteindreFin.Visible = False
End If
End With

Je l'ai placé dans l'événement "sur activation" du formulaire

En théorie cela fonctionne quand je simule l'ouverture du formulaire avec un
seul enregistrement, mais en utilisant le bouton du menu général évoqué
ci-dessus, cela ne fonctionnement pas. J'ai essayé aussi les événements sur
chargement ou sur réception focus. Rien n'y fait, quel événement se
déclenche-t-il après l'application de la requête ?

Merci de votre aide.

Bien à vous
Kostro

4 réponses

Avatar
Raymond
Bonjour.

le with n'est pas obligatoire et de toute façon il ne pouvait pas
fonctionner.
If Me.RecordsetClone.RecordCount = 1 Then
Me.BtEnrgtPréc.Visible = False
Me.BtEnrgtSuivant.Visible = False
Me.BtAtteindreDébut.Visible = False
Me.BtAtteindreFin.Visible = False
else
Me.BtEnrgtPréc.Visible = True
etc etc.......
End If

il faut le placer sur Form_Current.

normalement c'est plus compliqué que ça si tu gères toi-même les
déplacements, il te manque le dernier , le nouveau, les débordements avant
le premier etc...

--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Kostro" a écrit dans le
message de news:3f9d39b9$0$27576$
Bonjour,
J'ai affecté à l'événement sur clic d'un bouton dans un menu général, le
code suivant :

DoCmd.OpenForm "FrmFicheAjoutModif"
Forms![FrmFicheAjoutModif].RecordSource = "rqfrmFicheModifSélAuteur"

Après l'application de la requête, s'il n'y pas plus d'un enregistrement,
je

voudrais rendre invisible les boutons de déplacement, avec ceci :
With Me.RecordsetClone
If Me.Count = 1 Then
Me.BtEnrgtPréc.Visible = False
Me.BtEnrgtSuivant.Visible = False
Me.BtAtteindreDébut.Visible = False
Me.BtAtteindreFin.Visible = False
End If
End With

Je l'ai placé dans l'événement "sur activation" du formulaire

En théorie cela fonctionne quand je simule l'ouverture du formulaire avec
un

seul enregistrement, mais en utilisant le bouton du menu général évoqué
ci-dessus, cela ne fonctionnement pas. J'ai essayé aussi les événements
sur

chargement ou sur réception focus. Rien n'y fait, quel événement se
déclenche-t-il après l'application de la requête ?

Merci de votre aide.

Bien à vous
Kostro




Avatar
Kostro
Cher Raymond,
Merci de ta réponse. Ta solution ne marchait pas dans mon contexte, ou bien
je ne l'ai pas bien appliquée ( ce qui est bien possible, je découvre au fur
et à mesure). Finalement, j'ai opté pour la solution suivante :
Dans le menu général, j'ai cela dans l'événement clic des boutons de
commande :

Private Sub BtModifFiche_Click()
DoCmd.Maximize
DoCmd.OpenForm "FrmFicheAjoutModif"
Forms![FrmFicheAjoutModif].RecordSource = "rqfrmFicheModif"
Forms![FrmFicheAjoutModif].AllowAdditions = False

End Sub

Private Sub BtModifFicheAuteur_Click()
DoCmd.OpenForm "FrmFicheAjoutModif"
Forms![FrmFicheAjoutModif].RecordSource = "rqfrmFicheModifSélAuteur"
Forms![FrmFicheAjoutModif].CmdeAjoutEnrgt.Visible = False
Forms![FrmFicheAjoutModif].AllowAdditions = False

End Sub

Et dans l'événement Form_Current du formulaire, j'ai écrit le code
ci-dessous. Le pire, c'est que cela marche ! ;-) Est-ce une solution
"bidouillage" ? ou bien cela peut-il trouver grâce aux yeux d'un programmeur
pro ? Il y a certainement plus simple. Si tu as le temps, merci de me donner
ton analyse.

Private Sub Form_Current()
Dim strAfficheBoutons
strAfficheBoutons = Me.RecordSource
Select Case strAfficheBoutons
Case "rqfrmFicheModif"
Me.BtAfficheRechercheAuteur.Visible = True
Me.BtEnrgtPréc.Visible = True
Me.BtEnrgtSuivant.Visible = True
Me.BtAtteindreDébut.Visible = True
Me.BtAtteindreFin.Visible = True

Case "rqfrmFicheModifSélAuteur"
With Me.RecordsetClone
.MoveLast
If .AbsolutePosition + 1 > 1 Then
Me.BtEnrgtPréc.Visible = True
Me.BtEnrgtSuivant.Visible = True
Me.BtAtteindreDébut.Visible = True
Me.BtAtteindreFin.Visible = True
End If
End With

Case "rqfrmFicheModifSélAuteurType"
With Me.RecordsetClone
.MoveLast
If .AbsolutePosition + 1 > 1 Then
Me.BtEnrgtPréc.Visible = True
Me.BtEnrgtSuivant.Visible = True
Me.BtAtteindreDébut.Visible = True
Me.BtAtteindreFin.Visible = True
End If
End With

End Select

Merci encore
Bien à toi
Kostro


Raymond wrote:
Bonjour.

le with n'est pas obligatoire et de toute façon il ne pouvait pas
fonctionner.
If Me.RecordsetClone.RecordCount = 1 Then
Me.BtEnrgtPréc.Visible = False
Me.BtEnrgtSuivant.Visible = False
Me.BtAtteindreDébut.Visible = False
Me.BtAtteindreFin.Visible = False
else
Me.BtEnrgtPréc.Visible = True
etc etc.......
End If

il faut le placer sur Form_Current.

normalement c'est plus compliqué que ça si tu gères toi-même les
déplacements, il te manque le dernier , le nouveau, les débordements
avant le premier etc...


"Kostro" a écrit dans
le message de news:3f9d39b9$0$27576$
Bonjour,
J'ai affecté à l'événement sur clic d'un bouton dans un menu
général, le code suivant :

DoCmd.OpenForm "FrmFicheAjoutModif"
Forms![FrmFicheAjoutModif].RecordSource = "rqfrmFicheModifSélAuteur"

Après l'application de la requête, s'il n'y pas plus d'un
enregistrement, je voudrais rendre invisible les boutons de
déplacement, avec ceci :
With Me.RecordsetClone
If Me.Count = 1 Then
Me.BtEnrgtPréc.Visible = False
Me.BtEnrgtSuivant.Visible = False
Me.BtAtteindreDébut.Visible = False
Me.BtAtteindreFin.Visible = False
End If
End With

Je l'ai placé dans l'événement "sur activation" du formulaire

En théorie cela fonctionne quand je simule l'ouverture du formulaire
avec un seul enregistrement, mais en utilisant le bouton du menu
général évoqué ci-dessus, cela ne fonctionnement pas. J'ai essayé
aussi les événements sur chargement ou sur réception focus. Rien n'y
fait, quel événement se déclenche-t-il après l'application de la
requête ?

Merci de votre aide.

Bien à vous
Kostro




Avatar
Raymond
Bonjour.

juste quelques remarques:
1- tu peux tester directement le record source au lieu de passer par une
variable:
Dim strAfficheBoutons
strAfficheBoutons = Me.RecordSource
Select Case strAfficheBoutons
Select Case Me.RecordSource


2- quel que soit le résultat, les boutons sont toujours à True. Soit ça ne
sert à rien soit il manque un case else pour les mettre à False ou un else
dans les clause If.

3- les deux derniers case sont rigoureusement identiques dans le résultat.

à suivre....
--
@+
Raymond Access MVP.
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA.


"Kostro" a écrit dans le
message de news:3f9e1063$0$13278$
Cher Raymond,
Merci de ta réponse. Ta solution ne marchait pas dans mon contexte, ou
bien

je ne l'ai pas bien appliquée ( ce qui est bien possible, je découvre au
fur

et à mesure). Finalement, j'ai opté pour la solution suivante :
Dans le menu général, j'ai cela dans l'événement clic des boutons de
commande :

Private Sub BtModifFiche_Click()
DoCmd.Maximize
DoCmd.OpenForm "FrmFicheAjoutModif"
Forms![FrmFicheAjoutModif].RecordSource = "rqfrmFicheModif"
Forms![FrmFicheAjoutModif].AllowAdditions = False

End Sub

Private Sub BtModifFicheAuteur_Click()
DoCmd.OpenForm "FrmFicheAjoutModif"
Forms![FrmFicheAjoutModif].RecordSource = "rqfrmFicheModifSélAuteur"
Forms![FrmFicheAjoutModif].CmdeAjoutEnrgt.Visible = False
Forms![FrmFicheAjoutModif].AllowAdditions = False

End Sub

Et dans l'événement Form_Current du formulaire, j'ai écrit le code
ci-dessous. Le pire, c'est que cela marche ! ;-) Est-ce une solution
"bidouillage" ? ou bien cela peut-il trouver grâce aux yeux d'un
programmeur

pro ? Il y a certainement plus simple. Si tu as le temps, merci de me
donner

ton analyse.

Private Sub Form_Current()
Dim strAfficheBoutons
strAfficheBoutons = Me.RecordSource
Select Case strAfficheBoutons
Case "rqfrmFicheModif"
Me.BtAfficheRechercheAuteur.Visible = True
Me.BtEnrgtPréc.Visible = True
Me.BtEnrgtSuivant.Visible = True
Me.BtAtteindreDébut.Visible = True
Me.BtAtteindreFin.Visible = True

Case "rqfrmFicheModifSélAuteur"
With Me.RecordsetClone
.MoveLast
If .AbsolutePosition + 1 > 1 Then
Me.BtEnrgtPréc.Visible = True
Me.BtEnrgtSuivant.Visible = True
Me.BtAtteindreDébut.Visible = True
Me.BtAtteindreFin.Visible = True
End If
End With

Case "rqfrmFicheModifSélAuteurType"
With Me.RecordsetClone
.MoveLast
If .AbsolutePosition + 1 > 1 Then
Me.BtEnrgtPréc.Visible = True
Me.BtEnrgtSuivant.Visible = True
Me.BtAtteindreDébut.Visible = True
Me.BtAtteindreFin.Visible = True
End If
End With

End Select

Merci encore
Bien à toi
Kostro


Avatar
Kostro
Bonjour,
Merci de tes remarques. Pour le point 2, j'avais oublié de te dire que les
boutons de déplacement sont mis sur invisible par défaut dans le formulaire.
Je veux donc les faire apparaître que lorsqu'une consultation de la base
comprend plusieurs enregistrements. Ensuite, pour le point trois. Oui, je me
complique la vie, j'ai corrigé en ne mettant qu'un seul "case" pour ces deux
options. Cela nous ramène au point 1, un select Case direct sur
Me.RecordSource fonctionnait bien avec des "CASE" à une seule option, mais à
partir du moment où j'ai simplifié en écrivant "CASE "option1", "option2",
j'avais un message "Erreur de type". J'ai rétabli mon passage par une
variable, et là tout marche.

Merci pour tout
Kostro.

Raymond wrote:
Bonjour.

juste quelques remarques:
1- tu peux tester directement le record source au lieu de passer par
une variable:
Dim strAfficheBoutons
strAfficheBoutons = Me.RecordSource
Select Case strAfficheBoutons
Select Case Me.RecordSource


2- quel que soit le résultat, les boutons sont toujours à True. Soit
ça ne sert à rien soit il manque un case else pour les mettre à False
ou un else dans les clause If.

3- les deux derniers case sont rigoureusement identiques dans le
résultat.

à suivre....

"Kostro" a écrit dans
le message de news:3f9e1063$0$13278$
Cher Raymond,
Merci de ta réponse. Ta solution ne marchait pas dans mon contexte,
ou bien je ne l'ai pas bien appliquée ( ce qui est bien possible, je
découvre au fur et à mesure). Finalement, j'ai opté pour la solution
suivante :
Dans le menu général, j'ai cela dans l'événement clic des boutons de
commande :

Private Sub BtModifFiche_Click()
DoCmd.Maximize
DoCmd.OpenForm "FrmFicheAjoutModif"
Forms![FrmFicheAjoutModif].RecordSource = "rqfrmFicheModif"
Forms![FrmFicheAjoutModif].AllowAdditions = False

End Sub

Private Sub BtModifFicheAuteur_Click()
DoCmd.OpenForm "FrmFicheAjoutModif"
Forms![FrmFicheAjoutModif].RecordSource = "rqfrmFicheModifSélAuteur"
Forms![FrmFicheAjoutModif].CmdeAjoutEnrgt.Visible = False
Forms![FrmFicheAjoutModif].AllowAdditions = False

End Sub

Et dans l'événement Form_Current du formulaire, j'ai écrit le code
ci-dessous. Le pire, c'est que cela marche ! ;-) Est-ce une solution
"bidouillage" ? ou bien cela peut-il trouver grâce aux yeux d'un
programmeur pro ? Il y a certainement plus simple. Si tu as le
temps, merci de me donner ton analyse.

Private Sub Form_Current()
Dim strAfficheBoutons
strAfficheBoutons = Me.RecordSource
Select Case strAfficheBoutons
Case "rqfrmFicheModif"
Me.BtAfficheRechercheAuteur.Visible = True
Me.BtEnrgtPréc.Visible = True
Me.BtEnrgtSuivant.Visible = True
Me.BtAtteindreDébut.Visible = True
Me.BtAtteindreFin.Visible = True

Case "rqfrmFicheModifSélAuteur"
With Me.RecordsetClone
.MoveLast
If .AbsolutePosition + 1 > 1 Then
Me.BtEnrgtPréc.Visible = True
Me.BtEnrgtSuivant.Visible = True
Me.BtAtteindreDébut.Visible = True
Me.BtAtteindreFin.Visible = True
End If
End With

Case "rqfrmFicheModifSélAuteurType"
With Me.RecordsetClone
.MoveLast
If .AbsolutePosition + 1 > 1 Then
Me.BtEnrgtPréc.Visible = True
Me.BtEnrgtSuivant.Visible = True
Me.BtAtteindreDébut.Visible = True
Me.BtAtteindreFin.Visible = True
End If
End With

End Select

Merci encore
Bien à toi
Kostro