Bienvenue chez moi
Le web propose beaucoup de lecture sur ce sujet surtout pour Excel moins sur Access, voir d'ailleurs sur Developpez.com ces posts très intéressants:
http://www.developpez.net/forums/d27...-frm-d-projet/
http://www.developpez.net/forums/d10...d-base-access/
L'objectif
Je veux remplacer le code VBA d'un formulaire ou d'un rapport par celui d'un fichier, par défaut .CLS
Le problème
La routine pompée sans vergogne sur les 2 posts cités plus haut, charge tous les .CLS comme un nouveau module et ne remplace donc pas le code du formulaire ou du rapport :
UNE
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 Sub importVBACode(pPathImportDir As String) Dim sFileName As String, sExt As String If ExisteDir(pPathImportDir) = False Then MsgBox "Répertoire inexistant!" & Chr(13) & "Opération annulée!", vbCritical: Exit Sub sFileName = Dir(pPathImportDir & "*.*") Do While sFileName <> "" sExt = Right(sFileName, 3) Select Case sExt Case "cls", "bas" Application.VBE.ActiveVBProject.VBComponents.Import (pPathImportDir & sFileName) End Select sFileName = Dir Loop End Sub Function ExisteDir(pPathDir As String) As Boolean On Error Resume Next ExisteDir = GetAttr(pPathDir) And vbDirectory End FunctionEST LA BIENVENUE
Pour ceux qui cherchent encore, la routine d'import, toujours pompée férocement sur les 2 posts cités
Voilà et n'oubliez pas, bonjour chez vous
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
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 Sub exportVBACode(pPathExportDir As String) Dim obj As Access.AccessObject Dim IdFile As Integer Dim sMsg As String ' Traiter tous les modules un par un sMsg = "Ecraser le fichiers VBA des modules (.bas)?" If OverWriteFile(sMsg) = False Then Exit Sub For Each obj In CurrentProject.AllModules DoCmd.OpenModule obj.Name ' Ouvrir le fichier texte IdFile = FreeFile Open pPathExportDir & obj.Name & ".bas" For Output As #IdFile DoCmd.Close acModule, obj.Name ' Ferme le fichier texte Close #IdFile Next 'Traiter tous les formulaires un par un sMsg = "Ecraser le fichiers VBA des formulaires (.cls)?" If OverWriteFile(sMsg) = False Then Exit Sub For Each obj In CurrentProject.AllForms DoCmd.OpenForm obj.Name, acDesign If Forms(obj.Name).HasModule Then ' Ouvrir le fichier texte IdFile = FreeFile Open pPathExportDir & "Form_" & obj.Name & ".cls" For Output As #IdFile ' Ferme le fichier texte Close #IdFile End If DoCmd.Close acForm, obj.Name Next 'Traiter tous les états un par un sMsg = "Ecraser le fichiers VBA des état (.cls)?" If OverWriteFile(sMsg) = False Then Exit Sub For Each obj In CurrentProject.AllReports DoCmd.OpenReport obj.Name, acDesign If Reports(obj.Name).HasModule Then IdFile = FreeFile Open pPathExportDir & "Report_" & obj.Name & ".cls" For Output As #IdFile ' Ferme le fichier texte Close #IdFile End If DoCmd.Close acReport, obj.Name Next MsgBox "Opération terminée !", vbInformation, "Code VB exporté" End Sub Private Function OverWriteFile(pMsg As String) As Boolean Dim bEcraseFile As Boolean oOverWrite = True If MsgBox(pMsg, vbQuestion + vbYesNo + vbDefaultButton2, "Export Modules") = vbNo Then oOverWrite = False End If OverWriteFile = oOverWrite End Function![]()
Partager