Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tester si un formulaire est ouvert et refresh

3 réponses
Avatar
s.jean
Bonjour,

J'ai un formulaire frmFournisseurs, que je peux ouvrir soit
directement dans mon menu soit via un bouton sur le formulaire
frmVirement.

Ce formulaire frmVirement contient des sous-formulaires avec des
listes d=E9roulantes, dont les donn=E9es se trouvent dans frmFournisseurs.

Lorsque j'ouvre frmFournisseurs =E0 partir de frmVirement je souhaite
qu'il mette =E0 jour frmVirement lorsque je le ferme et que je me
retrouve sur frmVirement.

J'ai donc utilis=E9 cette fonction :


Function fIsLoaded(strFormName As String) As Boolean
Dim ObjAcc As AccessObject
Set ObjAcc =3D CurrentProject.AllForms(strFormName)
If ObjAcc.IsLoaded Then
If ObjAcc.CurrentView <> acCurViewDesign Then
fIsLoaded =3D True
End If
End If
End Function

Le code que j'ai utilis=E9 dans frmFournisseurs est celui-ci :



Private Sub Form_Close()
stDocName =3D "frmVirement"

If fIsLoaded(stDocName) =3D 0 Then

Forms(stDocName)!cmbBeneficiaire.Requery
Forms(stDocName)!cmbFournisseur.Requery
Forms(stDocName)!cmbFournisseurBanque.Requery
Forms(stDocName)!frmFournisseursBanques.Requery
Forms(stDocName)!frmFournisseursBeneficiaires.Requery
End If

End Sub

Mais si mon formulaire frmVirement est ferm=E9 il m'affiche un message,
que le formulaire frmVirement est introuvable (forc=E9ment il est ferm=E9
justement !) et me surligne la 1=E8re ligne Form(stDocName) ... en
d=E9bogage.

Comment arranger cela ?

merci beaucoup

Sandrine

3 réponses

Avatar
Dragan
Bonjour,
le problème vient du test sur le retour de la fonction :
<If fIsLoaded(stDocName) = 0 Then>
A noter que sous VBA :
TRUE = -1
FALSE=0
tu as écrit : si le formulaire est fermé alors




"s.jean" a écrit :

Bonjour,

J'ai un formulaire frmFournisseurs, que je peux ouvrir soit
directement dans mon menu soit via un bouton sur le formulaire
frmVirement.

Ce formulaire frmVirement contient des sous-formulaires avec des
listes déroulantes, dont les données se trouvent dans frmFournisseurs.

Lorsque j'ouvre frmFournisseurs à partir de frmVirement je souhaite
qu'il mette à jour frmVirement lorsque je le ferme et que je me
retrouve sur frmVirement.

J'ai donc utilisé cette fonction :


Function fIsLoaded(strFormName As String) As Boolean
Dim ObjAcc As AccessObject
Set ObjAcc = CurrentProject.AllForms(strFormName)
If ObjAcc.IsLoaded Then
If ObjAcc.CurrentView <> acCurViewDesign Then
fIsLoaded = True
End If
End If
End Function

Le code que j'ai utilisé dans frmFournisseurs est celui-ci :



Private Sub Form_Close()
stDocName = "frmVirement"

If fIsLoaded(stDocName) = 0 Then

Forms(stDocName)!cmbBeneficiaire.Requery
Forms(stDocName)!cmbFournisseur.Requery
Forms(stDocName)!cmbFournisseurBanque.Requery
Forms(stDocName)!frmFournisseursBanques.Requery
Forms(stDocName)!frmFournisseursBeneficiaires.Requery
End If

End Sub

Mais si mon formulaire frmVirement est fermé il m'affiche un message,
que le formulaire frmVirement est introuvable (forcément il est fermé
justement !) et me surligne la 1ère ligne Form(stDocName) ... en
débogage.

Comment arranger cela ?

merci beaucoup

Sandrine



Avatar
Fabien
s.jean a écrit :
Bonjour,

J'ai un formulaire frmFournisseurs, que je peux ouvrir soit
directement dans mon menu soit via un bouton sur le formulaire
frmVirement.

Ce formulaire frmVirement contient des sous-formulaires avec des
listes déroulantes, dont les données se trouvent dans frmFournisseurs.

Lorsque j'ouvre frmFournisseurs à partir de frmVirement je souhaite
qu'il mette à jour frmVirement lorsque je le ferme et que je me
retrouve sur frmVirement.

J'ai donc utilisé cette fonction :


Function fIsLoaded(strFormName As String) As Boolean
Dim ObjAcc As AccessObject
Set ObjAcc = CurrentProject.AllForms(strFormName)
If ObjAcc.IsLoaded Then
If ObjAcc.CurrentView <> acCurViewDesign Then
fIsLoaded = True
End If
End If
End Function

Le code que j'ai utilisé dans frmFournisseurs est celui-ci :



Private Sub Form_Close()
stDocName = "frmVirement"

If fIsLoaded(stDocName) = 0 Then

Forms(stDocName)!cmbBeneficiaire.Requery
Forms(stDocName)!cmbFournisseur.Requery
Forms(stDocName)!cmbFournisseurBanque.Requery
Forms(stDocName)!frmFournisseursBanques.Requery
Forms(stDocName)!frmFournisseursBeneficiaires.Requery
End If

End Sub

Mais si mon formulaire frmVirement est fermé il m'affiche un message,
que le formulaire frmVirement est introuvable (forcément il est fermé
justement !) et me surligne la 1ère ligne Form(stDocName) ... en
débogage.

Comment arranger cela ?

merci beaucoup

Sandrine


Salut,
J'ai une autre version pour tester si un formulaire est chargé ou pas

Function EstChargé(ByVal strNomForm As String) As Boolean
' Retourne Vrai si le formulaire spécifié est ouvert
' en mode Création ou en mode Feuille de données.
Const conÉtatObjFermé = 0
Const conModeCréation = 0
If SysCmd(acSysCmdGetObjectState, acForm, strNomForm) <>
conÉtatObjFermé Then
If Forms(strNomForm).CurrentView <> conModeCréation Then
EstChargé = True
End If
End If
End Function
@+
Avatar
s.jean
Merci !

J'ai remplacé 0 par -1 et ça marche impeccable !

Sandrine

On 21 nov, 16:06, Dragan wrote:
Bonjour,
le problème vient du test sur le retour de la fonction :
 <If fIsLoaded(stDocName) = 0 Then>
A noter que sous VBA :
 TRUE = -1
 FALSE=0
tu as écrit : si le formulaire est fermé alors

"s.jean" a écrit :



> Bonjour,

> J'ai un formulaire frmFournisseurs, que je peux ouvrir soit
> directement dans mon menu soit via un bouton sur le formulaire
> frmVirement.

> Ce formulaire frmVirement contient des sous-formulaires avec des
> listes déroulantes, dont les données se trouvent dans frmFournisseu rs.

> Lorsque j'ouvre frmFournisseurs à partir de frmVirement je souhaite
> qu'il mette à jour frmVirement lorsque je le ferme et que je me
> retrouve sur frmVirement.

> J'ai donc utilisé cette fonction :

> Function fIsLoaded(strFormName As String) As Boolean
>     Dim ObjAcc As AccessObject
>     Set ObjAcc = CurrentProject.AllForms(strFormName)
>     If ObjAcc.IsLoaded Then
>         If ObjAcc.CurrentView <> acCurViewDesign Then
>             fIsLoaded = True
>         End If
>     End If
> End Function

> Le code que j'ai utilisé dans frmFournisseurs est celui-ci :

> Private Sub Form_Close()
> stDocName = "frmVirement"

> If fIsLoaded(stDocName) = 0 Then

> Forms(stDocName)!cmbBeneficiaire.Requery
> Forms(stDocName)!cmbFournisseur.Requery
> Forms(stDocName)!cmbFournisseurBanque.Requery
> Forms(stDocName)!frmFournisseursBanques.Requery
> Forms(stDocName)!frmFournisseursBeneficiaires.Requery
> End If

> End Sub

> Mais si mon formulaire frmVirement est fermé il m'affiche un message,
> que le formulaire frmVirement est introuvable (forcément il est ferm é
> justement !) et me surligne la 1ère ligne Form(stDocName) ... en
> débogage.

> Comment arranger cela ?

> merci beaucoup

> Sandrine- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -