[VBA Access] vérifier si un form est ouvert
Fermé
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
-
15 mars 2006 à 15:04
BernardH - 1 juil. 2010 à 16:38
BernardH - 1 juil. 2010 à 16:38
A voir également:
- [VBA Access] vérifier si un form est ouvert
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Verifier un lien - Guide
- Vérifier si mot de passe piraté - Guide
- Verifier compatibilite windows 11 - Guide
- Mise en forme conditionnelle excel formule si - Guide
11 réponses
Bon, là, je réponds très longtemps après le début de ces messages, mais ça peut servir à ceux qui passeront par là :
Dans mon projet ADP (Access 2003), je veux savoir si un formulaire (nommé frmDossierDetail) est ouvert. Ca ce fait en une ligne :
If CurrentProject.AllForms!frmDossierDetail.IsLoaded Then
...
D'après l'aide, pour une base MDB, ça doit être :
If CodeProject.AllForms!frmDossierDetail.IsLoaded Then
...
(Je ne fais pas de MDB, j'apprécie la robustesse de SQL Server qui dans ses versions gratuites SQL Express est bien supérieur aux MDB. J'ai aussi une préférence pour dotNet, mais on ne choisi pas toujours la techno du client !)
Dans mon projet ADP (Access 2003), je veux savoir si un formulaire (nommé frmDossierDetail) est ouvert. Ca ce fait en une ligne :
If CurrentProject.AllForms!frmDossierDetail.IsLoaded Then
...
D'après l'aide, pour une base MDB, ça doit être :
If CodeProject.AllForms!frmDossierDetail.IsLoaded Then
...
(Je ne fais pas de MDB, j'apprécie la robustesse de SQL Server qui dans ses versions gratuites SQL Express est bien supérieur aux MDB. J'ai aussi une préférence pour dotNet, mais on ne choisi pas toujours la techno du client !)
Perso, je pratique comme suit:
' Formulaire à tester
dim fm as Form
On error resume next
Set fm = forms("MonFormulaire")
if err.number = 0
../.. le formulaire est ouvert
end if
on error goto 0
' Formulaire à tester
dim fm as Form
On error resume next
Set fm = forms("MonFormulaire")
if err.number = 0
../.. le formulaire est ouvert
end if
on error goto 0
blux
Messages postés
26769
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
9 avril 2025
3 334
15 mars 2006 à 15:33
15 mars 2006 à 15:33
Salut,
le petit bout de code suivant t'énumère les formulaires ouverts de la base courante...
Et celui-là énumère tous les formulaires de la base courante (ouverts ou fermés) :
Ca irait ?
le petit bout de code suivant t'énumère les formulaires ouverts de la base courante...
Private Sub Commande1_Click() Dim monform For Each monform In Forms MsgBox monform.Name Next End Sub
Et celui-là énumère tous les formulaires de la base courante (ouverts ou fermés) :
Private Sub Commande1_Click() Dim monform As AccessObject Dim dbs As Object Set dbs = Application.CurrentProject For Each monform In dbs.AllForms MsgBox monform.Name Next End Sub
Ca irait ?
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
15 mars 2006 à 22:56
15 mars 2006 à 22:56
Merci à tous les deux.
J'ai simplement modifié un peu le code proposé en ajoutant une condition:
For Each objForm In dbs.AllForms
If objForm.IsLoaded = True And objForm.Name = "F_Rapport"Then
actions sur F_Rapport...
End If
Next objForm
Je n'ai jamais eu de cours et j'ai bcp de mal à trouver ce type de code dans l'aide...
J'ai simplement modifié un peu le code proposé en ajoutant une condition:
For Each objForm In dbs.AllForms
If objForm.IsLoaded = True And objForm.Name = "F_Rapport"Then
actions sur F_Rapport...
End If
Next objForm
Je n'ai jamais eu de cours et j'ai bcp de mal à trouver ce type de code dans l'aide...
blux
Messages postés
26769
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
9 avril 2025
3 334
16 mars 2006 à 09:04
16 mars 2006 à 09:04
Que je te rassure : moi non plus...
Et en plus, maintenant, je suis en ACCESS XP (2002) et l'aide est CATASTROPHIQUE !
Je regrette la version 97 :-(
Et en plus, maintenant, je suis en ACCESS XP (2002) et l'aide est CATASTROPHIQUE !
Je regrette la version 97 :-(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
15 mars 2006 à 16:12
15 mars 2006 à 16:12
Bin, pas tout à fait...
Je voudrais que la procédure ne nécessite pas d'intervention de l'utilisateur:
Lors de l'ajout d'un enregistrement:
Si formulaire "F_Rapport" est ouvert alors on le met à jour sinon on ferme le form "F_médecins" sans rien faire d'autre...
J'ai essayé If IsLoaded() et diff trucs trouvés d'ans l'aide mais je n'ai rien trouvé d'adéquat...
Je voudrais que la procédure ne nécessite pas d'intervention de l'utilisateur:
Lors de l'ajout d'un enregistrement:
Si formulaire "F_Rapport" est ouvert alors on le met à jour sinon on ferme le form "F_médecins" sans rien faire d'autre...
J'ai essayé If IsLoaded() et diff trucs trouvés d'ans l'aide mais je n'ai rien trouvé d'adéquat...
blux
Messages postés
26769
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
9 avril 2025
3 334
15 mars 2006 à 17:06
15 mars 2006 à 17:06
Et les évènements "avant insertion" et "après insertion" ?
Sinon, méthode bourrin : interdire la fermeture du form en ôtant les boutons...
Sinon, méthode bourrin : interdire la fermeture du form en ôtant les boutons...
zenon
Messages postés
726
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
13 février 2010
180
15 mars 2006 à 18:37
15 mars 2006 à 18:37
L'essai: "NomDuForm.Name" renvoie une erreur
L'affectation à d'autres événements ne règle pas le problème puisque je veux mettre à jour les champs d'un autre formulaire...
Je pense avoir trouvé une solution en récupérant l'erreur:
Sub
...
On Error GoTo Fin
Attribution des valeurs dans le Form supposé ouvert
Fin
DoCmd.Close, "F_Médecins"
End Sub
Ce n'est peut-être pas très clean mais ça marche...
Bizarre comme des fonctions qui paraissent simples peuvent être difficiles à trouver...
Merci pour ton aide.
L'affectation à d'autres événements ne règle pas le problème puisque je veux mettre à jour les champs d'un autre formulaire...
Je pense avoir trouvé une solution en récupérant l'erreur:
Sub
...
On Error GoTo Fin
Attribution des valeurs dans le Form supposé ouvert
Fin
DoCmd.Close, "F_Médecins"
End Sub
Ce n'est peut-être pas très clean mais ça marche...
Bizarre comme des fonctions qui paraissent simples peuvent être difficiles à trouver...
Merci pour ton aide.
Bonjour zenon,
peut-être que ceci repondra à votre besoin :
Lupin
peut-être que ceci repondra à votre besoin :
Private Sub ExecuteRoutine_Click() On Error GoTo Err_ExecuteRoutine_Click Dim objForm As AccessObject, dbs As Object Set dbs = Application.CurrentProject For Each objForm In dbs.AllForms If objForm.IsLoaded = True Then MsgBox objForm.Name & " est ouvert." Else MsgBox objForm.Name & " est fermé." End If Next objForm Exit_ExecuteRoutine_Click: Exit Sub Err_ExecuteRoutine_Click: MsgBox Err.Description Resume Exit_ExecuteRoutine_Click End Sub
Lupin
Bonjour,
Mon problème (sans aucun doute très simple à résoudre maisjamais travaillé avec des objets) est celui-ci:
Comment accéder, depuis un "état", aux variables créées dans le code VBA associé à l'ouverture de ce "Form"?
Merci bcp!!
D'autre part, petit commentaire:
If objForm.IsLoaded = True Then
peut être résumé à :
If objForm.IsLoaded Then
Mon problème (sans aucun doute très simple à résoudre maisjamais travaillé avec des objets) est celui-ci:
Comment accéder, depuis un "état", aux variables créées dans le code VBA associé à l'ouverture de ce "Form"?
Merci bcp!!
D'autre part, petit commentaire:
If objForm.IsLoaded = True Then
peut être résumé à :
If objForm.IsLoaded Then
blux
Messages postés
26769
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
9 avril 2025
3 334
>
Alain Daubechies
30 mai 2007 à 12:41
30 mai 2007 à 12:41
Merci d'ouvrir un nouveau message sur le problème qui te concerne et de ne pas te rattacher à une discussion déjà cloturée...
Utilisateur anonyme
15 mars 2006 à 23:17
15 mars 2006 à 23:17
Bjr,
j'ai encore oublié le Set dbs = Nothing, et tout autre objet instancié.
je crois que les bouqins servent à parcourrir le reste,
j'ai un bouqin pour chaque VBA que je pratique, et si
google est impuissant il ne reste que ça :-)
je ne sais si une édition à jour existe mais voici celle que je
connais.
Beginning Access 97 VBA programming
Robert Smith and David Sussman
je te l'accorde le bouquin est en anglais mais bien illustré
meme avec un interface français on s'y retrouve très bien.
c'est vrai qu'il faut avoir la chance de le faire...
Lupin
j'ai encore oublié le Set dbs = Nothing, et tout autre objet instancié.
je crois que les bouqins servent à parcourrir le reste,
j'ai un bouqin pour chaque VBA que je pratique, et si
google est impuissant il ne reste que ça :-)
je ne sais si une édition à jour existe mais voici celle que je
connais.
Beginning Access 97 VBA programming
Robert Smith and David Sussman
je te l'accorde le bouquin est en anglais mais bien illustré
meme avec un interface français on s'y retrouve très bien.
c'est vrai qu'il faut avoir la chance de le faire...
Lupin
kiwijinshi
Messages postés
12
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
30 juillet 2007
30 juil. 2007 à 14:57
30 juil. 2007 à 14:57
Je sais que le dernier post date de + d'un an mais si ca peut aider quelqu'un ... voilà une solution pour déterminer si un formulaire est ouvert ou non (solution obtenue dans l'aide sur ActiveForm).
L'objectif pour que l'ordi sache si un formulaire est ouvert est de présenter ce formulaire comme fenêtre active quand il est ouvert :
{
Dim frmFormulaireActif as Form
Set frmFormulaireActif = Screen.ActiveForm
If frmFormulaireActif = LeFormulaireQueVousCherchez.Name Then
... ' Votre action : le formulaire est actif donc forcément ouvert!
End If
}
Si ca n'est pas le cas, la bidouille est de fermer le formulaire actif jusqu'à tomber sur celui que l'on cherche puis rouvrir les formulaires fermés après avoir fait ce qu'on voulait faire. Il est facilement possible de mémoriser les formulaires fermés pour les réouvrir automatiquement avec des variables Form.
J'espère que ca vous avance ?!
P.S. : Je suis sous Access 2002
L'objectif pour que l'ordi sache si un formulaire est ouvert est de présenter ce formulaire comme fenêtre active quand il est ouvert :
{
Dim frmFormulaireActif as Form
Set frmFormulaireActif = Screen.ActiveForm
If frmFormulaireActif = LeFormulaireQueVousCherchez.Name Then
... ' Votre action : le formulaire est actif donc forcément ouvert!
End If
}
Si ca n'est pas le cas, la bidouille est de fermer le formulaire actif jusqu'à tomber sur celui que l'on cherche puis rouvrir les formulaires fermés après avoir fait ce qu'on voulait faire. Il est facilement possible de mémoriser les formulaires fermés pour les réouvrir automatiquement avec des variables Form.
J'espère que ca vous avance ?!
P.S. : Je suis sous Access 2002
[quote="Kiwijinshi"]Bon, là, je réponds très longtemps après le début de ces messages, mais ça peut servir à ceux qui passeront par là [/quote]
Et effectivement, ça m'intéresse !
Grâce à cette discussion, je sais comment vérifier quels sont les formulaires ouverts ; Je sais aussi trouver leur nom.
Maintenant, je souhaite savoir si leur état est MINIMIZE, MAXIMIZE ou RESTORE.
Merci par avance.
________________________________________________________________________________________
Il n'y a que les fous pour croire que les autres sont fous.
Et effectivement, ça m'intéresse !
Grâce à cette discussion, je sais comment vérifier quels sont les formulaires ouverts ; Je sais aussi trouver leur nom.
Maintenant, je souhaite savoir si leur état est MINIMIZE, MAXIMIZE ou RESTORE.
Merci par avance.
________________________________________________________________________________________
Il n'y a que les fous pour croire que les autres sont fous.