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 :

Exporter tout le code VBA d'une application Access [AC-2007]


Sujet :

VBA Access

  1. #1
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut Exporter tout le code VBA d'une application Access
    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.

  2. #2
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    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/

  3. #3
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    Merci pour la réponse, mais cela me bloque à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CodeStruct(Iter) = Array(Comp.Name, CurProc, Comp.CodeModule.ProcStartLine(CurProc, vbext_pk_Proc), Comp.CodeModule.ProcCountLines(CurProc, vbext_pk_Proc))
    Le message est :
    "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...

  4. #4
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    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.

  5. #5
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Effectivement, je n'ai plus le message d'erreur !

    Mais ou se trouve le code ???

  6. #6
    Membre confirmé Avatar de Tonioyo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 343
    Points : 518
    Points
    518
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Dim numeroDeLigneEnCours As Long
      For numeroDeLigneEnCours = 1 To composantVB.CodeModule.CountOfLines
        debug.print composantVB.CodeModule.Lines(numeroDeLigneEnCours, 1)
      Next
    et donc pour toutes les récupérer d'un coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        debug.print composantVB.CodeModule.Lines(1, composantVB.CodeModule.CountOfLines)
    pour parcourir les composants VB

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      For Each composantVB In Application.VBE.ActiveVBProject.VBComponents
        traiterLeComposantVB
      Next
    la procédure traiterLeComposantVB est composé de l'un des deux morceaux de code ci-dessus.

  7. #7
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    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...

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 643
    Points : 34 351
    Points
    34 351
    Par défaut
    salut,
    regarde si cette discussion peut te venir en aide :
    http://www.developpez.net/forums/d67...s-base-access/

  9. #9
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 429
    Points : 58 222
    Points
    58 222
    Billets dans le blog
    11
    Par défaut
    Salut,

    J'ai réussi avec le code suivant, cela me crée un fichier contenant tout ce que je veux :
    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
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Extraire le code vba d'une base Access
    Par zoom61 dans le forum Contribuez
    Réponses: 3
    Dernier message: 08/11/2019, 08h41
  2. Réponses: 4
    Dernier message: 22/12/2011, 02h22
  3. Réponses: 3
    Dernier message: 12/05/2006, 12h34
  4. Réponses: 13
    Dernier message: 20/04/2006, 15h37
  5. Réponses: 4
    Dernier message: 13/10/2005, 14h44

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