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 :

Problème avec Screen


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut Problème avec Screen
    Bonjour à toutes et tous.

    J'ai un souci bizarre avec l'utilisation de Screen

    Contexte :
    Sous Access 2010 (mais je suppose que c'est pareil pour les autres versions)
    Dans la hiérarchie suivante :
    F_MENU_GENERAL
    Tabs_MENU_GENERAL
    Tab_CONCEPTION
    SF_MENU_GENERAL_CONCEPTION
    Tabs_MENU_GENERAL_CONCEPTION
    Tab_LISTE_DOCUMENTS
    SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS
    txtProcessName
    Parenthèse pour ceux qui se prendraient encore la tête avec ça, et pour bien préciser que mon problème n'est pas là, les onglets sont "Transparents" lorsqu'il s'agit d'atteindre un contrôle, le chemin de mon contrôle est donc
    • "En dur" :
    • [F_MENU_GENERAL]![SF_MENU_GENERAL_CONCEPTION]![SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS]!txtProcessName

      Ou, bien que plus longue, ma syntaxe favorite (parce qu'elle permet d'utiliser des variables partout) :
    • Forms("F_MENU_GENERAL").Form("SF_MENU_GENERAL_CONCEPTION").Form("SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS").Controls("txtProcessName")


    Donc, dans le contexte cité plus haut, j'ai donc un système de navigation avec un formulaire principal qui contient des sous formulaires dans un premier jeu d'onglets, chaque onglet contenant son propre jeu d'onglets avec dans chacun de ces dernier un sous-sous formulaire du formulaire principal...
    Ça va ? j'ai perdu personne ? donc on continue !

    L'un de ces sous-sous formulaire (SSF_MENU_GENERAL_CONCEPTION_LISTE_DOCUMENTS) est de type "Formulaires continus" et contient de nombreux champs.

    Faisons hyper simple pour l'exemple : je souhaite qu'en sélectionnant n'importe quel contrôle d'un enregistrement apparaisse un message me donnant le nom du process contenu dans txtProcessName de l'enregistrement en cours.

    Afin d'éviter de lever l'événement On_Clic de chaque contrôle, j'opte pour Current du formulaire.
    Le problème avec Current, c'est qu'il se déclenche au chargement du formulaire, au déchargement et Dieu sait quand encore.
    Il me faut donc situer à quel moment je le traite.

    Ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Current()
     
        If Screen.ActiveControl.Parent.Name = "SSF_MENU_GENERAL_CONCEPTION_LISTE_RECETTE" Then
            MsgBox Me.txtProcessId.Value
        End If
     
    Sortie:
    End Sub
    Ce qui me donne :
    Citation Envoyé par Cet abruti d'Access
    Erreur d'exécution '2474'

    L'expression entrée requiert que le contrôle se trouve dans la fenêtre active.
    Alors moi, bon élève, dans ma fenêtre exécution juste après l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ? Screen.ActiveControl.Parent.name
    SSF_MENU_GENERAL_CONCEPTION_LISTE_RECETTES
     
    ? screen.ActiveControl.name
    txtProcessName
     
    ? Screen.ActiveForm.Name
    F_MENU_GENERAL
    Et là, moi je bugue...
    Le premier test renvoie le bon formulaire
    Le second test renvoie le bon contrôle
    Le troisième test renvoie... Le premier formulaire de la hiérarchie

    En tout cas, je ne comprends pas pour quoi les 2 premiers fonctionnent et que dans le contexte ça ne va plus...

    Je cherche donc :
    • Soit la solution et l'explication pour fonctionner avec Screen
    • Soit une solution sans Screen et sans lever On_Clic sur tous les contrôles


    Merci d'avance à qui saura me donner une piste valable !

  2. #2
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    ActiveForm renvoit le nom d'un formulaire présent dans la collection Forms. Il n'y a que le formulaire en haut de la hiérarchie qui en fait partie, le reste ne sont que des contrôles ou des contenus de contrôles.

    Mettez une gestion d'erreur dans votre évènement Current, ainsi, le test IF ne fonctionnera que quand le sous-formulaire et tous les autres contrôles autour de votre interface seront effectivement chargés

  3. #3
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut
    Bonjour Tofalu, et merci pour cette réponse claire et rapide.

    Cependant j'avais déjà fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_Current()
     
        On Error GoTo Sortie
     
        If Screen.ActiveControl.Parent.Name = "SSF_MENU_GENERAL_CONCEPTION_LISTE_RECETTE" Then
            MsgBox Me.ActiveControl.Name
        End If
     
    Sortie:
    End Sub
    Mais là, la boîte n'apparaît jamais... Un pas-à-pas montre que le If génère systématiquement une erreur, laquelle renvoie comme on le demande vers la sortie...

    Une idée ?

  4. #4
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut
    Re bonjour !

    J'ai trouvé une solution de contournement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Form_Current()
        If Forms("F_MENU_GENERAL").Controls("TabsMenuGeneral").Value = 1 And _
           Forms("F_MENU_GENERAL").Form("SF_MENU_GENERAL_CONCEPTION").Controls("TabsConception").Value = 1 Then
            MsgBox Me.txtProcessId.Value
        End If
     
    Sortie:
    End Sub
    Je teste donc les onglets actifs.

    Ca marche nickel, mais j'aurais bien aimé savoir s'il était possible de relever le nom de sous-formulaire à l'écran car ça peut s'avérer utile dans d'autres situations, notamment quand le formulaire contient plusieurs sous-formulaires...

    Dans l'attente, merci à tous !

  5. #5
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 045
    Par défaut
    Bonjour,
    petite question : ne manquerait -il pas simplement un "S" à
    "SSF_MENU_GENERAL_CONCEPTION_LISTE_RECETTE"
    ?


  6. #6
    Membre éclairé Avatar de Le Sage
    Homme Profil pro
    Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Inscrit en
    Novembre 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur Conseil en Bureautique et CMS, Développeur VBA, Power Query, Power Pivot
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2009
    Messages : 218
    Par défaut
    Bonjour micniv

    J'ai eu peur de me prendre la honte de ma vie, mais non, ce n'est pas une erreur d'orthographe dans le nom du formulaire !

Discussions similaires

  1. problème avec screen.activeform en variable
    Par clickandgo dans le forum VBA Access
    Réponses: 1
    Dernier message: 26/06/2013, 13h17
  2. Problème avec touch screen et mouseListener
    Par critok dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 25/12/2012, 02h11
  3. Problème avec Full-Screen Exclusive mode API
    Par SheikYerbouti dans le forum Composants
    Réponses: 2
    Dernier message: 08/02/2010, 06h49
  4. Problème avec le Splash screen
    Par Hoopsy dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/06/2007, 22h24
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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