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

Macros Access Discussion :

Insérer un paramètre dynamique dans une macro pour l'appel d'une fonction


Sujet :

Macros Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut Insérer un paramètre dynamique dans une macro pour l'appel d'une fonction
    Bonjour,

    Je débute en Access et je cherche à simplifier l'écriture et la maintenance de mon code via l'utilisation d'une macro.

    Ce que je cherche à faire :
    J'ai un formulaire avec une image qui correspond à un plan de bâtiment. Pour chaque emplacement de collaborateur du bâtiment j'ai 2 images superposées qui correspondent à l'état de l'emplacement (libre ou occupé). Ces images sont nommées img_[id_emplacement]_libre ou img_[id_emplacement]_occupe et suivant l'état de cet emplacement dans la base, l'image correspondante sera visible ou non. Au clic sur ces images, un nouveau formulaire s'ouvre pour l'édition des propriétés de cet emplacement (nom du collaborateur, n° de tel, etc ...).

    J'ai donc un nombre assez conséquent d'images sur mon formulaire et pour ne pas à avoir à coder une procédure pour chaque image et pour chaque état (2 x nb emplacements) je pensais mettre la même macro sur chaque image et qu'elle récupère dynamiquement l'id_emplacement.

    Ce que j'arrive à faire :
    Pour l'instant j'ai une macro qui a pour action "ExécuterCode" et pour argument ma fonction avec l'id en dur : edit_emplacement ("22A") par exemple. Sauf que c'est totalement inutile s'il faut que je crée une macro par emplacement, ça me divise par 2 le travail malgré tout mais ça reste conséquent !

    A noter :
    Je n'arrive pas à récupérer directement l'id depuis vba car en cherchant à récupérer le control (l'image cliquée) via Screen.ActiveControl, j'ai une erreur d'exécution 2474 : "L'expression entrée requiert que le contrôle se trouve dans la fenêtre active" !?!


    Si vous avez une idée de comment me dépatouiller ou une meilleure façon de faire ... Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Tu pourrais peut-être te servir de la propriété « Remarque » de chaque image pour y stocker l'info nécessaire à son traitement.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Bonjour ClaudeLELOUP,

    Désolé mais je ne saisis pas le fond de ta pensée ... j'ai pas l'impression que de me servir de la propriété "Remarque" de chaque image va m'avancer un tant soit peu !

    Mon soucis est que je n'arrive pas à récupérer l'id_emplacement correspondant à l'image cliquée ni même une simple référence à cette image !

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour OphyTe,

    J'ai pas l'impression que de me servir de la propriété "Remarque" de chaque image va m'avancer un tant soit peu !
    Reste à voir…

    ni même une simple référence à cette image !
    Elle a un nom quand même !

    Une piste :





    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Compare Database
    Option Explicit
     
    Private Sub JeSuis(NomControle As String)
      MsgBox NomControle & vbLf & Me(NomControle).Tag
    End Sub
     
    Private Sub Bureau123_Click()
      Call JeSuis("Bureau123")
    End Sub
     
    Private Sub Salle1er_Click()
      Call JeSuis("Salle1er")
    End Sub
    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Bonjour ClaudeLELOUP,

    En fait mon soucis n'est pas juste de récupérer le nom de l'image mais de le récupérer dynamiquement !
    Dans ton exemple, tu as 2 bureaux et pour chaque image tu as une procédure NomImage_Click() qui exécute ta procédure JeSuis() avec le nom de l'image passée en statique / dur !

    Dans mon cas, si j'ai 1000 bureaux, je ne souhaite pas coder 1000 procédure *_Click() !!! D'où l'intérêt de récupérer cette référence à l'image dynamiquement ! Sachant qu'en + à chaque bureau correspond 2 images (occupé et libre) ce qui fait donc 2000 procédures !

    Merci pour ton aide en tout cas

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Bonjour,

    Je me doutais bien que c'était cela que tu voulais.

    Ah ! si on pouvait récupérer le nom de la procédure en cours...
    J'ai cherché, mais pas trouvé et j'ai lu à plusieurs endroits que ce n'était pas possible... jusqu'à preuve du contraire.

    J'ai essayé la proposition : http://www.developpez.net/forums/d36...n/#post2209900, mais sans succès.

    Si tu trouves, viens nous le dire ici.

    Au plaisir de te recroiser.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Ah ... mais je n'avais même pas envisagé cette solution car elle m'oblige malgré tout à créer autant de procédures *_Click() que d'images, ce dont je me passerais bien pour les raisons évoquées juste avant !

    Du coup j'en reviens à l'intitulé de mon post initial : est-il possible d'insérer un paramètre dynamique dans une macro ?
    L'idée serait de ne pas passer par vba (du moins au début) mais bien d'exécuter une macro qui aurait comme paramètre dynamique (toujours) le nom de l'objet cliqué. Ça n'est que par la suite que cette macro appellerait une procédure vba public avec en entrée le paramètre récupéré dynamiquement dans la macro. A aucun moment je n'utiliserais donc les fonctions *_Click() dans vba !

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Peut-être une piste : au lieu d'une image, utiliser un contrôle « Cadre d'objet indépendant » qui contient l'image => Screen.ActiveControl.Name est alors disponible.
    Fichiers attachés Fichiers attachés
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message
    Peut-être une piste : au lieu d'une image, utiliser un contrôle « Cadre d'objet indépendant » qui contient l'image => Screen.ActiveControl.Name est alors disponible.
    ça a l'air nickel ça !

    j'essaye de mettre ça en place et je passe la discussion à

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Bon, grosse déception, j'ai bien l'impression que les contrôles « Cadre d'objet indépendant » ne gèrent que du bitmap or moi j'ai besoin de transparence ...


    Je pensais du coup me rabattre sur une zone de texte mais le problème c'est que je suis obligé de la laisser active pour avoir la fonction Screen.ActiveControl.Name disponible et dans ce cas là, ça me fait un gros bloc blanc (même si je le mets transparent) avec le curseur clignotant dedans ...


    Du coup mon dernier espoir serait de jouer sur les coordonnées de la souris lors du clic sur un cadre que je mettrais au dessus de tous les autres objets du formulaire. Il faudrait donc que je maintienne une table de correspondance entre les coordonnées et les id des emplacements (genre HashMap en Java). Par contre j'ai aucune idée de comment faire ça en vba ...

  11. #11
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    ... ne gèrent que du bitmap or moi j'ai besoin de transparence ...
    Dire que tu es vite content serait fortement exagéré !

    Désolé, j'ai dit tout ce que je savais.

    1.000 images (x2) sur le même formulaire, j'espère que tu disposes d'un grand écran !

    Quoi qu'il en soit, bonne continuation.
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message
    Dire que tu es vite content serait fortement exagéré !
    C'est pas moi qui fait les specs ...


    Citation Envoyé par ClaudeLELOUP Voir le message
    Désolé, j'ai dit tout ce que je savais.
    Merci quand même ...

    Je crois avoir trouvé la solution de toute façon => Récupération nom de controle sur click

    Si j'ai bien compris, il s'agit de construire dynamiquement au chargement du formulaire l'action à exécuter lors de l'évènement onClick pour chaque contrôle du formulaire.
    Il faut que je l'adapte vite fait à mon besoin mais ça a l'air de coller nickel !

    Je vous (te) tiens au courant

Discussions similaires

  1. [XL-2010] Reprise d'une macro 1 après exécution d'une macro 2 appelée par la macro 1
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/07/2014, 12h32
  2. Réponses: 1
    Dernier message: 02/04/2013, 18h48
  3. Réponses: 1
    Dernier message: 27/05/2008, 11h20
  4. Réponses: 8
    Dernier message: 09/01/2007, 16h30
  5. Réponses: 5
    Dernier message: 10/07/2006, 15h02

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