Bonjour,
J'aurais besoin de récupérer (de manière automatisée) dans un fichier texte l'ensemble des procédures évènementielles que j'ai créées dans une base.
Merci d'avance.
Version imprimable
Bonjour,
J'aurais besoin de récupérer (de manière automatisée) dans un fichier texte l'ensemble des procédures évènementielles que j'ai créées dans une base.
Merci d'avance.
Bonjour,
il n'y a rien en standard à ce que je sache
l'approche pourrait se faire en 3 temps
- avec un simulateur de clavier scruter les tables, les ouvrir en mode design, accéder aux macro, copier tout, ouvrit le bloc note, sauvegarder les macro XML dans un fichier texte (1 fichier par macro, ce qui nécessite de bonnes règles de nommage du fichier)
- ensuite utiliser un traducteur XML>Txt en masse (il existe plusieurs outils plus ou moins gratuits, sur le net)
- de plus une fois traduit, il faut élaguer pas mal de lignes et garder une vision hiérarchique, pour faire apparaître le code "utile" de façon lisible
bref, c'est pas gagné
Bonsoir
Zoom61 avait déjà traité cette question : https://www.developpez.net/forums/d9...cation-access/
Tu prends le code du dernier post de Zoom61 et tu supprimes les traitements qui ne t'intéressent pas.
Tu appelles SaveModules en indiquant le chemin complet du fichier txt à créer, et si tu veux l'ouvrir dans la foulée (1, sinon 0)
Et ça marche.
Titi95
Bonjour.
@divan, par curiosité, dans quel but souhaites tu exporter uniquement le code vba ?
Avec la méthode Application.SaveAsText ,tu recupères aussi le code vba des objets Access, à la fin du fichier txt, après la ligne "CodeBehindForm".
Cdlt
titi
on parle d'exporter les procédure événementielles, pas le code VBA
Bonsoir Accessisgood
Désolé, mais le code Zoom61 permet justement de ne transférer QUE et TOUTES les procédures de formulaires. Contrairement à la méthode Application.SaveAsText.
https://www.developpez.net/forums/d9...cation-access/ (code du dernier post)
Il suffit d'appeler SaveModules en indiquant le chemin complet du fichier txt à créer, et si tu veux l'ouvrir dans la foulée (1, sinon 0)
Fais l'essai pour vérifier !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 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
Merci Zoom61
Titi95