Salut,
Existe-t-il un moyen d'exporter tout le code VBA d'une base access ???
Le code peut être contenu dans un formulaire, un état et un module.
Merci.
Version imprimable
Salut,
Existe-t-il un moyen d'exporter tout le code VBA d'une base access ???
Le code peut être contenu dans un formulaire, un état et un module.
Merci.
Bonjour,
Il est possible d'éxtraire tout le code contenu dans une base de donnée Access en utilisant l'introspection.
voici une contribution que j'ai proposé, à partir des objets Modules (de code) il est possible d'extraire chaque ligne d'un module (Module de classe, module de code, Module de formulaire, module d'etat, etc ...)
http://www.developpez.net/forums/d79...lister-appels/
Salut,
Merci pour la réponse, mais cela me bloque à la ligne :
Le message est :Code:CodeStruct(Iter) = Array(Comp.Name, CurProc, Comp.CodeModule.ProcStartLine(CurProc, vbext_pk_Proc), Comp.CodeModule.ProcCountLines(CurProc, vbext_pk_Proc))
"erreur d'exécution '35'
Sub ou Function non définie"
Alors que la bibliothèque "Microsoft Visual Basic for Applications Extensibility 5.3" est bien active et que je sélectionne une des functions d'un de mes modules...
Salut,
As-tu bien pris le dernier fichier zippé ?(tout à la fin de la discution)
Les fichiers les plus récents sont ceux qui sont le plus loin dans la discution.
Effectivement, je n'ai plus le message d'erreur !
Mais ou se trouve le code ???
En fait il faut analyser un peu ce code car il lit dans chaque module de code. Il existe des paramètres pour savoir si l'on est dans un module de classe, module de formulaire, etc ...
Les lignes de codes sont stockées dans l'objet Module.
par exemple pour parcourir chaque ligne d'un module :
et donc pour toutes les récupérer d'un coupCode:
1
2
3
4 Dim numeroDeLigneEnCours As Long For numeroDeLigneEnCours = 1 To composantVB.CodeModule.CountOfLines debug.print composantVB.CodeModule.Lines(numeroDeLigneEnCours, 1) Next
pour parcourir les composants VBCode:
1
2 debug.print composantVB.CodeModule.Lines(1, composantVB.CodeModule.CountOfLines)
la procédure traiterLeComposantVB est composé de l'un des deux morceaux de code ci-dessus.Code:
1
2
3 For Each composantVB In Application.VBE.ActiveVBProject.VBComponents traiterLeComposantVB Next
Pour ma part ce que je veux (si cela est possible) est d'avoir une commande qui m'exporte tout le code contenu dans une base access, et que cela me l'envoi directement dans une table, dans un fichier, etc...
salut,
regarde si cette discussion peut te venir en aide :
http://www.developpez.net/forums/d67...s-base-access/
Salut,
J'ai réussi avec le code suivant, cela me crée un fichier contenant tout ce que je veux :
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 'utilisation Ctrl + G 'Dans la fenêtre qui s'ouvre saisir 'SaveModules "C:\chemin\modules.vb" Sub SaveModules( _ ByVal strFilename As String, _ Optional ByVal blnOpenNotePad As Boolean = False) Dim ao As Access.AccessObject Dim intFileHandle As Integer ' On vérifie si le fichier existe déjà... If Dir(strFilename) <> "" Then If MsgBox("Le fichier existe déjà. Souhaitez-vous le remplacer ?", _ vbQuestion + vbYesNo + vbDefaultButton2, "Export Modules") = vbNo Then Exit Sub End If End If ' Ouvrir le fichier texte intFileHandle = FreeFile Open strFilename For Output As #intFileHandle ' Traiter tous les modules un par un For Each ao In CurrentProject.AllModules ' On ouvre le module... DoCmd.OpenModule ao.Name ' On écrit le code sur disque... SaveModule "MODULE", Application.Modules(ao.Name), intFileHandle ' On referme le module DoCmd.Close acModule, ao.Name Next ' Même traitement pour les modules de formulaires For Each ao In CurrentProject.AllForms ' On ouvre le formulaire DoCmd.OpenForm ao.Name, acDesign ' On écrit le code sur disque If Forms(ao.Name).HasModule Then SaveModule "FORM MODULE", Forms(ao.Name).Module, intFileHandle End If ' On referme le formulaire DoCmd.Close acForm, ao.Name Next ' Même traitement pour les modules d'états For Each ao In CurrentProject.AllReports ' On ouvre l'état DoCmd.OpenReport ao.Name, acDesign ' On écrit le code sur disque If Reports(ao.Name).HasModule Then SaveModule "REPORT MODULE", Reports(ao.Name).Module, intFileHandle End If ' On referme l'état DoCmd.Close acReport, ao.Name Next ' On ferme ! Close #intFileHandle If blnOpenNotePad Then ' Ouvrir le bloc-notes Windows si nécessaire Shell "notepad.exe """ & strFilename & """", vbNormalFocus Else MsgBox "Opération terminée !", vbInformation, "Export Modules" End If End Sub ' --- ' ENREGISTRER LE CODE D'UN MODULE SUR DISQUE ' --- ' Entrée : strTitle <- Texte à afficher en en-tête ' (avant le nom du module). ' mdlModule <- Objet Module à enregistrer. ' intFileHandle <- Pointeur de fichier (handle). ' Sub SaveModule( _ ByVal strTitle As String, _ mdlModule As Access.Module, _ ByVal intFileHandle As Integer) ' Titre du module Print #intFileHandle, "' ----------" Print #intFileHandle, "' " & strTitle & ": " & mdlModule.Name Print #intFileHandle, "' ----------" Print #intFileHandle, "" Print #intFileHandle, mdlModule.Lines(1, mdlModule.CountOfLines) Print #intFileHandle, "" Print #intFileHandle, "" End Sub