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 :

convertir du code vba à la volée


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut convertir du code vba à la volée
    Bonjour. Dans une application Access 2010 que je développe, j'ai besoin d'exécuter du code VBA qui est construit à run time comme on construit une commande SQL à la volée pour créer un recordset adapté à une situation donnée. En vous remerciant par avance de votre aide.

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    Salut jcs75 et bienvenu,

    inspiré du code obsolète ici
    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
    Sub CreateNewModule()
    Const ModName = "ModuleTest2"
    Dim MyMod As Module
    Dim MyStr As String
     
    DoCmd.RunCommand acCmdNewObjectModule  ' Create new module.
     
    MyStr = "Sub Test2()" & vbCrLf         ' Create text for the module.
    MyStr = MyStr & Space$(4) & "MsgBox " & Chr$(34) & "test2" & Chr$(34) & vbCrLf
    MyStr = MyStr & "End Sub"
     
    Set MyMod = Modules(Application.Modules.Count - 1)    ' Give module a name.
     
    MyMod.InsertText MyStr                 ' Insert text into the module.
    DoCmd.Close acModule, MyMod.name, acSaveYes   ' Close and save module.
    DoCmd.Rename ModName, acModule, MyMod.name
     
    Run "Test2"
    DoCmd.DeleteObject acModule, ModName
    End Sub
    testé sur ac2007.

    mais je vois pas l'intérêt de construire du code dynamiquement à moins de faire du développement assez avancé comme création de complément access.
    le code à pour vocation de faire des traitements on peut donc en soi faire des traitements conditionnels.

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut vba à la volée
    Bonjour, tout d'abord merci de vous être penché sur ma question.

    Dans l'application que je développe, il y a deux parties : un dictionnaire de données d'un côté, et un formulaire qui leur permet de combiner librement les entrées de dictionnaires pour produire une information qui leur est utile.

    Pour prendre un exemple : l'utilisateur peut définir un item "carburant" comme résultant du produit de la distance en km parcourue pendant la période considérée par la consommation en litres du véhicule au km par prix du carburant au litre. Chacun des termes du produit comme le produit lui même est une entrée du dictionnaire. Mais si l'utilisateur estime que ce poste est pour lui d'un importance marginale, il peut directement valoriser le poste carburant sous la forme d'une enveloppe de x euros.

    D'autres solutions sont envisageables selon les besoins de l'utilisateur. La seule condition requise est que l'item définit soit, au sens mathématique, une fonction ne prenant en compte que des items existants dans le dictionnaire.

    Pour en revenir à ma question, je dois coder cette combinaison dont je ne connais les termes qu'au moment où l'utilisateur vient de la saisir dans l'application. Je suis donc bien en run time.

    Merci d'avance pour les conseils que vous pourriez me fournir.

    Meilleures salutations.

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    Je comprends.
    La gestion entre le dico/fonctions ne va pas être facile.
    Je te recommande plutôt de créer dynamiquement une requête [informations] basé sur la table [source] via la table [dictionnaire]
    [source] : Ref1, Ref2, Ref3...
    [dictionnaire] : formule, expression
    lorsqu'il y a une modification du dictionnaire tu reconstruis la requête [informations] en bouclant sur les enregistrements du dico.

    ex:
    [source] : distance, conso, tarifCarbu
    [dictionnaire] : formule, expression
    avec les valeurs:
    "consommé", "[distance]*[conso]"
    "montant", "[consommé]*[tarifCarbu]"

    au départ de [informations] tu auras:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM [source]
    au fur et à mesure de la boucle:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *, [distance]*[conso] AS [consommé] FROM [source]
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *, [distance]*[conso] AS [consommé], [consommé]*[tarifCarbu] AS [montant] FROM [source]

    tu modifies ensuite [informations] avec CurrentDb.QueryDefs
    ainsi tu auras d'un coté les champs de données dans [source] et les champs calculés dans [dictionnaire] dont il sera possible de modifier à la convenance de l'utilisateur (en respectant les formulations du SQL Access)


  5. #5
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut vba à la volée
    Bonjour, Merci beaucoup pour cette piste sur laquelle je vais travailler. Je me permettrais de reprendre contact si j'achoppe à nouveau.
    Meilleures salutations.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/10/2012, 15h02
  2. [AC-2007] convertir mes macros en code VBA.
    Par solaar dans le forum IHM
    Réponses: 5
    Dernier message: 06/08/2009, 18h50
  3. Convertir donnée par code vba
    Par carpediem2807 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/06/2008, 18h59
  4. convertir une macro en code vba
    Par misig dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/12/2007, 23h54
  5. [VBA-E] Convertir du code VBA 2000 en VBA 97
    Par Mykeul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2006, 11h05

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