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 :

Exécuter du code VBA placé dans un champ de type mémo


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Par défaut Exécuter du code VBA placé dans un champ de type mémo
    Bonjour tout le monde,

    Dans le cadre de la "refonte" d'un outil existant, je cherche à exécuter du code VBA stocké sous forme de texte dans un champ de type mémo d'une table quelconque.

    En d'autres termes, comment prendre le texte de ce champ et dire à Access : exécute-moi ce bout de code!!

    Ces bouts de code sont pour la plupart des ouvertures de formulaires / états, des transferts de requêtes dans des feuilles Excel ou encore des "scripts" bien plus complexes.

    Le hic est que je n'arrive pas à prendre ce texte et de le rendre exécutable. Y existe-t-il un moyen de procéder??

    Je travail sous Access 2003 SP3.

    Merci d'avance pour vos réponses et bonne journée.

    Julius

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 131
    Par défaut
    Bonjour,

    2 pistes :

    Eval() et Run

    Bien entendu c'est 2 techniques ont leur limites.

    Cordialement
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Par défaut
    Bonjour loufab,

    Merci pour ta réponse rapide.... je vais partir dans ce sens et je te donne des news.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Par défaut
    Voici les dernières nouvelles :

    Après de multiples tests infructueux avec les méthodes Run() et Eval() j'ai testé une autre solution.

    J'ai appris l'existence de la méthode "AddFromString". Je l'utilise donc pour ajouter du code dans le module de mon choix et j'appelle ensuite la procédure ainsi créée. Cela marche impec!

    Il ne me manque maintenant qu'une combine pour effacer le contenu de mon module une fois que j'ai exécuté mon schmilblic, et là je sèche!!

    Quelqu'un pourrait-il m'aider??

    Une autre solution serait de créer un module, d'y exécuter le code prévu comme décri ci-dessus et enfin de supprimer le module ainsi créé: Le hic est que je ne sais ni comment créer un module par vba, ni même le supprimer!

    Au final je pense donc que de vider le contenu de mon module est la solution la plus simple pour moi mais.....

    Voili et merci

    Julius

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2009
    Messages : 81
    Par défaut
    salut,
    je suis intéressé par cette façon de faire, tu peux nous montrer un exemple de code de ce que t'as fait avec AddFromString ?

    merci

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 272
    Par défaut
    Pas de problème,

    en résumé j'ai une table qui contient les codes que je souhaite exécuter et un petit formulaire qui appelle le schmiblic. Pour l'instant vous verrez que je travaille avec des variables test et autres, le code n'est pas terminé mais je pense qu'il est suffisent pour comprendre le mécanisme.

    voici le code :

    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
    25
    26
    27
    28
    Private Sub test_Click()
        Dim script As String, mdl As Module
     
        Set mdl = Modules("m_test")
     
        'ici je vais juste chercher le code que j'aimerais exécuter
        script = DLookup("[liste_script]", "t_liste", "[liste_ref] = 3")
     
        'ajout du code en question dans le module que j'ai choisi plus haut
        'ce code est simplement ajouter dans une procédure publique que je puisse l'exécuter par la suite
        mdl.AddFromString "Public Sub Test()" + vbCrLf + script + vbCrLf + "End Sub"
     
        'appelle de la procédure qui elle-même appelle la procédure créée ci-dessous
        Call execute
    End Sub
     
    Private Sub execute()
        Dim nb As Long
     
        'compte le nombre de lignes de mon module
        nb = Modules("m_test").CountOfLines
     
        'exécution du code inséré
        Call m_test.test
     
        'suppression des lignes du module pour que ce dernier soit clean lors de la prochaine exécution
        Modules("m_test").DeleteLines 1, nb
    End Sub
    Voili, en espérant que cela sera utile à certain.

    Une bonne journée à toutes et tous

    Julius

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

Discussions similaires

  1. [AC-2010] Comment faire un "retour chariot" dans un champ de type mémo ?
    Par Velcor dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/02/2012, 13h10
  2. [AC-2007] Extraction de mots dans un champ de type mémo
    Par soleil29 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/08/2009, 19h35
  3. Exécuter le code VBA d'un module dans un sous formulaire
    Par keketteboy dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/06/2008, 11h41
  4. Comment exécuter du code VBA
    Par Alexandre` dans le forum VB.NET
    Réponses: 12
    Dernier message: 04/12/2007, 14h13
  5. Requête exécutée par code vba
    Par tit65 dans le forum Access
    Réponses: 4
    Dernier message: 22/08/2007, 18h07

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