Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/03/2011, 17h41   #1
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Par défaut Comment créer un module standard en VBA ?

Bonjour,

je cherche, à partir de VBA, à créer un nouveau module standard dans ma base de données.
J'ai trouvé toutes les commandes pour modifier les lignes, les créer, les supprimer, mais je n'ai pas trouvé la commande de création du module...

Application.Modules.Add --> n'existe pas
Application.CreateModule --> n'existe pas

Un petit coup de main serait le bienvenu car là, je sèche...

Merci d'avance.
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 17h51   #2
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 071
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 071
Points : 4 385
Points : 4 385
Envoyer un message via Skype™ à GAYOT
Bonjour
Alt + F11 pour arriver dans la fenêtre Vba

Menu Insertion
Module
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 17h56   #3
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Bonjour,

merci de votre réponse, mais je parlais de créer le module via du code VBA, pas de le faire manuellement.

Pour vous donner un exemple plus précis, voici un bout de code qui ajoute des lignes dans un module existant appelé "Moduletest". Ma question serait dans ce cas : quelles instructions dois-je ajouter pour créer ce "Moduletest" dans ce code ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Private Sub test()
 
    Dim mdl As Module, NbLignes As Long
 
    Set mdl = Application.Modules("ModuleTest")
    NbLignes = mdl.CountOfLines
    mdl.InsertLines NbLignes + 1, ""
    mdl.InsertLines NbLignes + 2, "Private sub test_2()"
    mdl.InsertLines NbLignes + 3, ""
    mdl.InsertLines NbLignes + 4, "Msgbox ""Blabla"""
    mdl.InsertLines NbLignes + 5, ""
    mdl.InsertLines NbLignes + 6, "end sub"
 
End Sub
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 17h57   #4
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 742
Points : 10 742
Envoyer un message via MSN à jpcheck
Salut,
regarde du cote de
et
pour Excel

et cote Access,
tu peux utiliser l'objet VBE
Code :
VBE.ActiveVBProject.VBComponents.Add vbext_ct_StdModule
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 18h12   #5
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Je viens de tester la dernière ligne et ça fonctionne parfaitement à condition de changer la constante vbext_ct_StdModule (qui n'est pas reconnue) par le chiffre 1.
Je regarderai plus en détail demain quand même mais ça a l'air de répondre à mon besoin.

Merci beaucoup !
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 18h23   #6
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 071
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 071
Points : 4 385
Points : 4 385
Envoyer un message via Skype™ à GAYOT
Ach, désolé je n'avais pas compris le but de la manoeuvre..
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 09h45   #7
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Citation:
Envoyé par GAYOT Voir le message
Ach, désolé je n'avais pas compris le but de la manoeuvre..
Ce n'est pas grave, je reconnais que je n'avais pas été non plus très explicite.

Je remercie jpcheck qui m'a permis de bien avancer sur ce problème. Il me reste quelques soucis toutefois. Voici le bout de code que j'ai créé.

Code :
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
29
30
31
32
33
34
35
36
Private Sub test()

    Dim mdl As Module, NbLignes As Long, i As Long
    
    'création du module standard
    VBE.ActiveVBProject.VBComponents.Add 1
    
    'récupération du nom du module qui sera de la forme "ModuleX" avec X un n° incrémental
    'on boucle sur le n° jusqu'à provoquer une erreur
    i = 1
    On Error GoTo suite
    Do
        Set mdl = Application.Modules("Module" & i)
        i = i + 1
    Loop
suite:
    'On a le numéro du module et donc son nom
    Set mdl = Application.Modules("Module" & (i - 1))
    'On renomme le module
    mdl.Name = "NouveauNom"
    'On ajoute les lignes à la suite du module
    NbLignes = mdl.CountOfLines
    mdl.InsertLines NbLignes + 1, ""
    mdl.InsertLines NbLignes + 2, "Private sub test_2()"
    mdl.InsertLines NbLignes + 3, ""
    mdl.InsertLines NbLignes + 4, "Msgbox ""Blabla"""
    mdl.InsertLines NbLignes + 5, ""
    mdl.InsertLines NbLignes + 6, "end sub"
    'il faudrait sauvegarder le module afin que Access ne provoque pas d'affichage où il demande de sauvegarder le module
    mdl.Save
    Set mdl = Nothing
    'on rafraichit la fenêtre de base de données pour afficher le module
    Application.RefreshDatabaseWindow

End Sub
Les problèmes rencontrés encore sont dans les lignes en rouge :

1) Lorsque j'essaie de renommer mon module, Access me répond que la propriété n'est qu'en lecture seule. Ce qui est en contradiction avec l'aide en ligne d'Access qui dit explicitement que la propriété Name est en lecture/écriture. Que faire pour renommer le module ?

2) Je n'ai trouvé aucune instruction pour sauvegarder le module créé. Ce qui déclenche sous Access les messages de sauvegarde dès qu'on ferme la fenêtre des modules. Je suppose que je pourrais passer par un SetWarnings=False pour contourner le problème, mais n'y a-t'il pas une commande simple de sauvegarde ?

3) Je veux rafraîchir ma base de données pour faire apparaître le module créé. Or la commande RefreshDatabaseWindow ne fonctionne pas. Mais si je sors de la base de données en sauvegardant le module et que je la réouvre, je vois bien le module créé. Alors, c'est peut-être dû au fait que le module n'est pas sauvegardé que la commande ne fonctionne pas.
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 11h01   #8
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 742
Points : 10 742
Envoyer un message via MSN à jpcheck
salut,

essaie avec
Code :
VBE.ActiveVBProject.VBComponents("AncienModule").Name = "NouveauModule"
pour la sauvegarde voir si
Code :
VBE.ActiveVBProject.SaveAs
te conviendrait
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 16h39   #9
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Citation:
Envoyé par jpcheck Voir le message
salut,

essaie avec
Code :
VBE.ActiveVBProject.VBComponents("AncienModule").Name = "NouveauModule"
Ca, marche nickel !

Citation:
pour la sauvegarde voir si
Code :
VBE.ActiveVBProject.SaveAs
te conviendrait
Par contre, ça, ça ne fonctionne pas car ce n'est valable que pour les projets indépendants et ça permet de sauvegarder le fichier externe. Et ça ne fonctionne pas sur les modules internes. Mais j'explore la piste, je suis sûr que je vais trouver la commande.
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 18h34   #10
Membre Expert
 
Homme Michel
Ingénieur développement logiciels
Inscription : mai 2005
Messages : 1 584
Détails du profil
Informations personnelles :
Nom : Homme Michel
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2005
Messages : 1 584
Points : 2 143
Points : 2 143
Bonjour,
Ca devrait marcher avec
Code :
1
2
3
..
   ' Save and close the module.
        DoCmd.Close acModule, myModuleName, acSaveYes
__________________
"tout le monde veut sauver la planète, mais personne ne veut descendre les poubelles." J Yanne
micniv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 11h46   #11
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Merci à toi !
C'est la ligne qui me manquait !

Donc voici mon code pour créer un module standard dans Access :

Code :
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
29
30
31
32
33
34
35
36
37
 
Private Sub CreerModuleStandard()
 
    Dim mdl As Module, NbLignes As Long, i As Long
 
    'création du module standard
    VBE.ActiveVBProject.VBComponents.Add 1
 
    'récupération du nom du module qui sera de la forme "ModuleX" avec X un n° incrémental
    'on boucle sur le n° jusqu'à provoquer une erreur
    i = 1
    On Error GoTo suite
    Do
        Set mdl = Application.Modules("Module" & i)
        i = i + 1
    Loop
suite:
    'On a le numéro du module et donc son nom
    'On renomme le module
    VBE.ActiveVBProject.VBComponents("Module" & (i - 1)).Name = "MonModuleCréé"
    Set mdl = Application.Modules("MonModuleCréé")
    'On ajoute les lignes à la suite du module
    NbLignes = mdl.CountOfLines
    mdl.InsertLines NbLignes + 1, ""
    mdl.InsertLines NbLignes + 2, "Private sub test_2()"
    mdl.InsertLines NbLignes + 3, ""
    mdl.InsertLines NbLignes + 4, "Msgbox ""Blabla"""
    mdl.InsertLines NbLignes + 5, ""
    mdl.InsertLines NbLignes + 6, "end sub"
    'On sauvegarde le module afin que Access ne provoque pas d'affichage où il demande de sauvegarder le module
    Set mdl = Nothing
    DoCmd.SetWarnings False
    DoCmd.Close acModule, "MonModuleCréé", acSaveYes
    'on rafraichit la fenêtre de base de données pour afficher le module
    Application.RefreshDatabaseWindow
 
End Sub
Merci à tous de votre aide !
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h44.


 
 
 
 
Partenaires

Hébergement Web