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

IHM Discussion :

Accès parent d'un sous-formulaire


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut Accès parent d'un sous-formulaire
    bonjour,

    je récupérère dans une table tous les formulaires de ma base en passant par le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each vObject In Application.CurrentProject.AllForms
       ...
    next
    ça marche bien.

    j'aimerais au passage récupérer le fait que formulaire est chargé ou non, mais quand je fais

    ça me retourne TRUE que pour le formulaire principal et pas pour tous les sous-formulaires qui sont bien ouverts.

    alors j'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vObject.Parent.isLoaded
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Forms(vObject.Name).Parent.IsLoaded
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Containers("Forms").Documents(vObject.Name).Parent.isLoaded
    rien à faire, access me retourne toujours une erreur...

    est-ce possible ? qui a une idée ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir,

    essaie un boucle du genre :
    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
     
     Dim FormObject As Access.AccessObject, FormItem as Access.Form, FormControl As Access.Control
     
     For Each FormObject In CurrentProject.AllForms
       If FormObject.IsLoaded Then
          Msgbox FormObject.Name & " est ouvert."
       Else
          For Each FormItem In Forms
             For Each FormControl In FormItem.Controls
                If FormControl.ControlType=AcSubForm Then 
                    if FormControl.SourceObject=FormObject.Name Then Msgbox FormObject.Name & " est ouvert" & vbcrlf & "en tant que contrôle de " & FormItem.Name
                End if
             Next
          Next
       End if
     Next

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 34
    Points : 23
    Points
    23
    Par défaut
    ouais, ok.

    ça m'oblige à lancer une sous fonction lorsque le formulaire trouvé est loadé.

    normalement ça fonctionne la récupération des propriétés du parent, je comprends pas pourquoi dans ce cas j'ai une erreur...

    merci,

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    tu as une erreur parce que les sous-formulaires sont en fait des contrôles des formulaires ouverts, de plus la propriété Parent n'est accessible que si l'objet a effectivement un parent.

    Maintenant, avec un booléen tu n'as pas besoin d'une sous-fonction.

    Exemple :
    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
    Dim FormObject As Access.AccessObject
    Dim FormItem As Access.Form
    Dim FormControl As Access.Control
    Dim FormLoaded As Boolean
        For Each FormObject In CurrentProject.AllForms
            FormLoaded = FormObject.IsLoaded
            If Not FormLoaded Then
                For Each FormItem In Forms
                    For Each FormControl In FormItem.Controls
                        If FormControl.ControlType = acSubform Then
                            If FormControl.SourceObject = FormObject.Name Then FormLoaded = True: Exit For
                        End If
                    Next
                    If FormLoaded Then Exit For
                Next
            End If
            If FormLoaded Then 
               'Traitement formluaire chargé en tant que Form ou SousForm
            End if
     Next

Discussions similaires

  1. [AC-2007] Me.Parent avec un sous-formulaire...
    Par Crachover dans le forum IHM
    Réponses: 18
    Dernier message: 14/01/2010, 14h35
  2. [A-03]Accès de données entre sous-formulaire
    Par Faladin dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/03/2009, 16h23
  3. Réponses: 6
    Dernier message: 10/08/2007, 16h23
  4. Accès à un contrôle de sous formulaire
    Par Hydex dans le forum VBA Access
    Réponses: 4
    Dernier message: 26/06/2007, 15h05
  5. acces à champ d'un sous-formulaire
    Par acorna dans le forum Access
    Réponses: 13
    Dernier message: 14/09/2006, 00h00

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