Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/08/2011, 15h52   #1
Nouveau Membre du Club
 
Yoann
Inscription : février 2011
Messages : 126
Détails du profil
Informations personnelles :
Nom : Yoann

Informations forums :
Inscription : février 2011
Messages : 126
Points : 29
Points : 29
Par défaut Code pour selectionner un formulaire

Bonjour,

J'ai crée un bouton pour changer de formulaire ("formulaire suivant")

Code :
1
2
3
4
5
6
7
8
9
10
 
Private Sub Commande153_Click()
 
    If [Forms]![F_F_0_Creer_Coswin_av_Correspondance_Coswin]![Groupe_code].Visible = True Then
        DoCmd.SelectObject acForm, "F_F_0_Creer_Coswin_av_Correspondance_Coswin"
    Else
        DoCmd.SelectObject acForm, "F_G_0_Recherche_Fournisseur"
    End If
 
End Sub
Quand mon formulaire F_F_0_Creer_Coswin_av_Correspondance_Coswin n'a pas été ouvert, j'ai une erreur vb qui dit "formulaire introuvable"... pourquoi il ne passe pas a la condition Else ?!
Magno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 16h17   #2
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

C'est :

Code :
[Forms]![F_F_0_Creer_Coswin_av_Correspondance_Coswin]![Groupe_code].Visible = True
qui génère l'erreur si le formulaire n'est pas ouvert, la clause if/then/else n'est donc même pas testée.

Il vous faut tester son ouverture préalablement ou trouver un autre critère de test.

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 16h31   #3
Membre actif
 
Avatar de Ric500
 
Homme Richard
Ingénieur développement logiciels
Inscription : août 2004
Messages : 166
Détails du profil
Informations personnelles :
Nom : Homme Richard
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : août 2004
Messages : 166
Points : 157
Points : 157
Bonjour,

Pour tester l'ouverture d'un form ou non, j'utilise la fonction suivante (trouvée dans la FAQ, je crois):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Function EstOuvert(NomFormulaire)
          ' Argument(s) : un nom de formulaire.
          ' Action : détermine si un formulaire est actif.
          ' Valeur(s) renvoyée(s) : True si le formulaire spécifié est actif ;
          '          False dans le cas contraire.
          ' Voir : Chapitre 3.
 
              Dim i
              EstOuvert = False
              For i = 0 To Forms.Count - 1
              If Forms(i).FormName = NomFormulaire Then
                  EstOuvert = True
                  Exit Function   ' Quitte la fonction une fois le formulaire trouvé.
              End If
              Next
End Function
Bonne continuation
Ric500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 16h54   #4
Nouveau Membre du Club
 
Yoann
Inscription : février 2011
Messages : 126
Détails du profil
Informations personnelles :
Nom : Yoann

Informations forums :
Inscription : février 2011
Messages : 126
Points : 29
Points : 29
Merci à vous deux, as tu le lien pour que je puisse mieux comprendre pour pouvoir adapter ton code stp ?
Magno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 17h45   #5
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Sinon pour faire simple même si c'est moins élégant que la proposition de Ric500, un test avec :

Code :
Iserror([Forms]![F_F_0_Creer_Coswin_av_Correspondance_Coswin]![Groupe_code].Visible = True)
devrait faire l'affaire.

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 21h38   #6
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
Technicien de Production
Inscription : octobre 2004
Messages : 4 103
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 33
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Technicien de Production
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 103
Points : 8 728
Points : 8 728
Salut,

Citation:
Envoyé par fbtsra Voir le message
Sinon pour faire simple même si c'est moins élégant que la proposition de Ric500, un test avec :

Code :
Iserror([Forms]![F_F_0_Creer_Coswin_av_Correspondance_Coswin]![Groupe_code].Visible = True)
devrait faire l'affaire.

Bcdt
As-tu essayé ton code ?

permet de renvoyer une variable de type Boolean si l'expression est un numéro d'erreur. En aucun cas cette argument retourne une erreur ou non. Si tu veux capturer une erreur il faut déclarer la gestion des erreur :
Code :
On Error GoTo XXX_Error
.

Pour ma part j'utilise une autre méthode

Fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Function TestFormOpen(ByVal chNomForm As String) As Boolean
'---------------------------------------------------------------------------------------
' Procédure : TestFormOpen
' Auteur    : Morgan BILLY
' Date      : 17/01/2010
' Détail    : Permet de tester si le formulaire passé en paramètre est ouvert (renvoi True)
'---------------------------------------------------------------------------------------
'
' appel gestion des erreurs
    On Error GoTo errEstCharge
    ' initialisation de la fonction
    TestFormOpen = False
    ' utilisation de la méthode SysCmd
    If SysCmd(acSysCmdGetObjectState, acForm, chNomForm) <> 0 Then
        ' renvoi True à la fonction
        TestFormOpen = True
    End If
    ' sortie de la procédure
    Exit Function
errEstCharge:
    ' affichage message opérateur et génération d'un fichier log
    MsgBox "Une erreur est survenue. Code de l'erreur : " & Err.Number & vbCrLf & _
            "Description : " & Err.Description, vbCritical, "Erreur de Traitrement"
End Function
Appel de la fonction :
Code :
1
2
3
4
5
If TestFormOpen("NomFormulaire") = True Then
    MsgBox "OK"
Else
    MsgBox "NOK"
End If
J'utilise la méthode SysCmd, je préfère cette méthode car elle évite de parcourir tous les formulaires ouverts lors du tests. A toi de choisir les deux méthodes fonctionnent.

Dolphy
__________________
Personnaliser la vue Backstage d'Access 2010
Découvrez avec nous Office 2010
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/08/2011, 09h11   #7
Nouveau Membre du Club
 
Yoann
Inscription : février 2011
Messages : 126
Détails du profil
Informations personnelles :
Nom : Yoann

Informations forums :
Inscription : février 2011
Messages : 126
Points : 29
Points : 29
Merci j'ai utilisé ton code et ça fonctionne à merveille, par contre peux tu m'expliquer cette phrase stp ? pq je ne la comprends pas

Code :
1
2
 
If SysCmd(acSysCmdGetObjectState, acForm, chNomForm) <> 0 Then
Magno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 13h00   #8
Rédacteur/Modérateur
 
Avatar de Dolphy35
 
Homme Morgan BILLY
Technicien de Production
Inscription : octobre 2004
Messages : 4 103
Détails du profil
Informations personnelles :
Nom : Homme Morgan BILLY
Âge : 33
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Technicien de Production
Secteur : Industrie

Informations forums :
Inscription : octobre 2004
Messages : 4 103
Points : 8 728
Points : 8 728
Bonjour,

Précision sur le code afin de définir si un formulaire est ouvert. Ci-après la fonction complète. Ce code est issu de la FAQ http://access.developpez.com/faq/?page=Forms#isloaded
Personnellement je ne teste pas si le formulaire est en mode création, je trouve cette ligne superflu du fait que dans mes applis soit le Forme est ouvert en mode Formulaire ou fermé.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Function TestFormOpen(ByVal strNomForm As String) As Boolean
'---------------------------------------------------------------------------------------
' Procédure : TestFormOpen
' Auteur    : Morgan BILLY
' Date      : 17/01/2010
' Détail    : Permet de tester si le formulaire passé en paramètre est ouvert (renvoi True)
'---------------------------------------------------------------------------------------
'
' appel gestion des erreurs
    On Error GoTo errEstCharge
    ' initialisation de la fonction
    TestFormOpen = False
    ' utilisation de la méthode SysCmd
    If SysCmd(acSysCmdGetObjectState, acForm, strNomForm) <> 0 Then
        ' renvoi True à la fonction
        TestFormOpen = True
    End If
    ' sortie de la procédure
    Exit Function
errEstCharge:
    ' affichage message opérateur et génération d'un fichier log
    MsgBox "Une erreur est survenue. Code de l'erreur : " & Err.Number & vbCrLf & _
           "Description : " & Err.Description, vbCritical, "Erreur de Traitrement"
End Function
Détail de la méthode SysCmd :
Issu de l'aide Access
Citation:
La méthode SysCmd permet d'afficher une jauge de progression ou un texte spécifié facultatif dans la barre d'état, de renvoyer des informations sur Microsoft Access et les fichiers associés, ou l'état d'un objet de base de données (objets de base de données : une base de données Access contient des objets tels que des tables, des requêtes, des formulaires, des états, des pages, des macros et des modules. Un projet Access contient des objets tels que des formulaires, des états, des pages, des macros et des modules.) spécifié (objet ouvert, nouveau, ou modifié mais non enregistré).Variant.
Dans notre cas la méthode va nous renvoyer des informations sur Microsoft Access (base courante).
Cette méthode a plusieurs arguments dont le premier est obligatoire et correspond à l'action, dans notre cas nous allons utiliser un constante AcSysCmdAction qui est acSysCmdGetObjectState et renvoie l'état de l'objet de base de données spécifié.
Avec ce premier argument les deux suivants qui sont facultatifs deviennent obligatoire, nous allons pour le deuxième argument mettre une nouvelle constante AcObjectType qui est acForm qui définit un Formulaire.
Le troisième arguments est le nom de l'objet a testé, ici le paramètre de la fonction strNomForm.
On test le retour de la méthode :
0 -> Est fermé
1 -> Est ouvert
Ensuite si tu veux aller plus loin tu peux tester si celui-ci est dans un mode d'affichage particulier.
Dans ce cas on retourne dans le lien de la FAQ et on ajoute cette ligne à la fonction plus haut :
Code :
Forms(strNomForm).CurrentView
Ce qui te renvoi également un état de la vue du formulaire ouvert, sinon une erreur 2450 est levée par Access :
0 -> Mode création
1 -> Mode Formulaire
2 -> Mode Feuille de données
3 -> Mode Tableau croisé Dynamique
4 -> Mode Graphique croisé Dynamique
7 -> Mode Page

En espérant avoir répondu à ta question.

Dolphy
__________________
Personnaliser la vue Backstage d'Access 2010
Découvrez avec nous Office 2010
Je ne réponds pas aux questions techniques par MP
Dolphy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 13h36   #9
Nouveau Membre du Club
 
Yoann
Inscription : février 2011
Messages : 126
Détails du profil
Informations personnelles :
Nom : Yoann

Informations forums :
Inscription : février 2011
Messages : 126
Points : 29
Points : 29
Merci pour l'info, je comprends deja un peu mieux !!! Merci encore
Magno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2011, 14h30   #10
Membre confirmé
 
Homme
Chercheur
Inscription : juin 2011
Messages : 150
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Tarn (Midi Pyrénées)

Informations professionnelles :
Activité : Chercheur
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : juin 2011
Messages : 150
Points : 231
Points : 231
Bonjour,

En effet j'ai été un peu trop enthousiaste avec le

Code :
Iserror([Forms]![F_F_0_Creer_Coswin_av_Correspondance_Coswin]![Groupe_code].Visible = True)
Merci à Dolphy35 pour la correction et mes excuses à Magno pour la fausse piste.

Bcdt
fbtsra est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h30.


 
 
 
 
Partenaires

Hébergement Web