IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Code pour selectionner un formulaire [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut Code pour selectionner un formulaire
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?!

  2. #2
    Membre actif
    Homme Profil pro
    Chercheur
    Inscrit en
    Juin 2011
    Messages
    162
    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 : 162
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    C'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [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

  3. #3
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 962
    Points : 1 151
    Points
    1 151
    Par défaut
    Bonjour,

    Pour tester l'ouverture d'un form ou non, j'utilise la fonction suivante (trouvée dans la FAQ, je crois):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    Merci à vous deux, as tu le lien pour que je puisse mieux comprendre pour pouvoir adapter ton code stp ?

  5. #5
    Membre actif
    Homme Profil pro
    Chercheur
    Inscrit en
    Juin 2011
    Messages
    162
    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 : 162
    Points : 248
    Points
    248
    Par défaut
    Sinon pour faire simple même si c'est moins élégant que la proposition de Ric500, un test avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Iserror([Forms]![F_F_0_Creer_Coswin_av_Correspondance_Coswin]![Groupe_code].Visible = True)
    devrait faire l'affaire.

    Bcdt

  6. #6
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error GoTo XXX_Error
    .

    Pour ma part j'utilise une autre méthode

    Fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If SysCmd(acSysCmdGetObjectState, acForm, chNomForm) <> 0 Then

  8. #8
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 149
    Points : 68
    Points
    68
    Par défaut
    Merci pour l'info, je comprends deja un peu mieux !!! Merci encore

  10. #10
    Membre actif
    Homme Profil pro
    Chercheur
    Inscrit en
    Juin 2011
    Messages
    162
    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 : 162
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Adaptation de code pour ouverture de formulaire
    Par Homer091 dans le forum IHM
    Réponses: 4
    Dernier message: 25/04/2008, 12h08
  2. Code pour ouvrir les formulaires dans la meme fenetre
    Par maxime350 dans le forum VBA Access
    Réponses: 2
    Dernier message: 13/04/2008, 16h54
  3. Code pour ouvrir un formulaire
    Par EGSway dans le forum IHM
    Réponses: 6
    Dernier message: 11/07/2007, 06h16
  4. Réponses: 1
    Dernier message: 28/10/2006, 09h43
  5. code pour fermer un formulaire
    Par rippey dans le forum IHM
    Réponses: 2
    Dernier message: 21/10/2003, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo