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 :

lister le contenu de la macro autokeys


Sujet :

VBA Access

  1. #1
    jojo5650
    Invité(e)
    Par défaut lister le contenu de la macro autokeys
    *Bonjour *

    Je voudrais lister le contenu de la macro autokeys pour concevoir une aide aux utilisateurs. Je parviens à lister toutes les macros d'une db par
    application.allmacros mais je voudrais pour cette dite macro "Autokeys" récupérer les macros names et le comment de cette sous macro.
    Je Chargerais ces éléments dans un listbox et ainsi l'utilisateur saura les macros programmées et à quoi elles servent.
    D'avance merci
    Dernière modification par Jean-Philippe André ; 30/09/2009 à 13h40. Motif: la politesse n'est pas facultative

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    la solution serait de convertir les macros en VBA, lire le code ainsi créé et récupérer dans une table le nom des fonctions commençant par autokeys__? (? représente la lettre de la commande clavier) et le commentaire (ligne précédée de ' )

  3. #3
    jojo5650
    Invité(e)
    Par défaut
    Citation Envoyé par helas Voir le message
    la solution serait de convertir les macros en VBA, lire le code ainsi créé et récupérer dans une table le nom des fonctions commençant par autokeys__? (? représente la lettre de la commande clavier) et le commentaire (ligne précédée de ' )
    Je cherche quelque chose d'automatique car je développe souvent des applications ACCESS; Je me suis construit une bibliothèque de projets vierges, ainsi je joins les différents modules pour élaborer mes nouveaux projets en fonction d'une demande.

    C'est vrai, c'est une piste à creuser en utilisant les menus.
    Merci

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Tu peux essayer cette méthode masquée de l'objet Application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.SaveAsText acMacro, "Autokeys", "C:\MacAutokeys.txt"
    A part 2003 et 2007, je ne sais pas quelles autres versions elle est disponible.

    Reste plus qu'à interpréter le contenu du fichier texte ...
    Code exemple de fichier : 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
    Version =196611
    ColumnsShown =9
    Begin
        MacroName ="{F12}"
        Action ="MsgBox"
        Comment ="F12"
        Argument ="Touche F12"
        Argument ="0"
        Argument ="4"
        Argument ="Autokeys"
    End
    Begin
        MacroName ="^D"
        Action ="MsgBox"
        Comment ="Ctrl-D"
        Argument ="Control+D"
        Argument ="0"
        Argument ="0"
        Argument ="autokeys"
    End

    A+

  5. #5
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bravo LedZeppII, fonctionne sous Access 2002

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Voici un code, adapté de ce que j'ai trouvé sur un forum allemand.
    C'est pas élaboré (sortie dans la fenêtre d'exécution), mais ça montre le principe.
    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
    Option Compare Database
    Option Explicit
     
    Private Declare Function FNextHscr Lib "msaccess.exe" Alias "#22" _
        (ByVal hScr As Long, _
         ByVal fSkipBlank As Long, _
         pfEndOfScript As Long) As Long
     
    Private Declare Function ActidOfHscr Lib "msaccess.exe" Alias "#29" _
        (ByVal hScr As Long) As Long
     
    Private Declare Function IdsArgNameOfActidIarg Lib "msaccess.exe" Alias "#33" _
        (ByVal actid As Long, _
        ByVal iArg As Long) As Long
     
    Private Declare Sub CloseHscr Lib "msaccess.exe" Alias "#20" _
        (ByVal hScr As Long)
     
    Function GetStringFromId(id As Long) As String
    GetStringFromId = ""
    On Error Resume Next
    GetStringFromId = Application.AppLoadString(id)
    End Function
     
    Sub LireMacro(strMacro As String)
    Dim hscr As Long, EndOfScript As Long
    Dim lOpenMode As Long, lExtra As Long, lVersion As Long
    Dim ActionId As Long, lActionArgs As Long, lColumn As Long
    Dim ArgId As Long
    Dim strMacroName As String, strComment As String, strCondition As String
    Dim strAction As String, strArgName As String
    Dim strArg As String
     
        WizHook.Key = 51488399
        hscr = WizHook.OpenScript(strMacro, "", lOpenMode, lExtra, lVersion)
     
        If (hscr > 0) Then
            ' Parcours des lignes
            While (FNextHscr(hscr, False, EndOfScript))
                ' Identifiant de l'Action
                ActionId = ActidOfHscr(hscr)
                ' Nom de l'action
                strAction = WizHook.NameFromActid(ActionId)
                ' Colonne 0  = colonne Nom Macro
                Call WizHook.GetScriptString(hscr, 0, strMacroName)
                ' Colonne 1  = colonne Commentaire
                Call WizHook.GetScriptString(hscr, 1, strComment)
                ' Colonne 2  = colonne Condition
                Call WizHook.GetScriptString(hscr, 2, strCondition)
     
                If Len(strMacroName) > 0 Then Debug.Print "Nom       : " & strMacroName
                If Len(strCondition) > 0 Then Debug.Print "Condition : " & strCondition
                Debug.Print "Action    : " & strAction;
                If Len(strComment) > 0 Then
                   Debug.Print "        ** " & strComment & " **"
                Else
                   Debug.Print
                End If
                ' Nombre d'arguments de l'action
                lActionArgs = WizHook.ArgsOfActid(ActionId)
                If lActionArgs <> 0 Then
                    ' Colonne 3 et plus .... : arguments
                    For lColumn = 0 To (lActionArgs - 1)
                        ArgId = IdsArgNameOfActidIarg(ActionId, lColumn)
                        strArgName = GetStringFromId(ArgId)
                        Call WizHook.GetScriptString(hscr, lColumn + 3, strArg)
                        Debug.Print Tab(13); strArgName & " : " & strArg
                    Next lColumn
                End If
     
                Debug.Print
            Wend
            CloseHscr hscr
        End If
     
    End Sub
    A+

  7. #7
    jojo5650
    Invité(e)
    Par défaut merci pour les réponses, mais cela m'était sorti de la tête toutes mes excuses
    Citation Envoyé par LedZeppII Voir le message
    Bonsoir,

    Voici un code, adapté de ce que j'ai trouvé sur un forum allemand.
    C'est pas élaboré (sortie dans la fenêtre d'exécution), mais ça montre le principe.
    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
    Option Compare Database
    Option Explicit
     
    Private Declare Function FNextHscr Lib "msaccess.exe" Alias "#22" _
        (ByVal hScr As Long, _
         ByVal fSkipBlank As Long, _
         pfEndOfScript As Long) As Long
     
    Private Declare Function ActidOfHscr Lib "msaccess.exe" Alias "#29" _
        (ByVal hScr As Long) As Long
     
    Private Declare Function IdsArgNameOfActidIarg Lib "msaccess.exe" Alias "#33" _
        (ByVal actid As Long, _
        ByVal iArg As Long) As Long
     
    Private Declare Sub CloseHscr Lib "msaccess.exe" Alias "#20" _
        (ByVal hScr As Long)
     
    Function GetStringFromId(id As Long) As String
    GetStringFromId = ""
    On Error Resume Next
    GetStringFromId = Application.AppLoadString(id)
    End Function
     
    Sub LireMacro(strMacro As String)
    Dim hscr As Long, EndOfScript As Long
    Dim lOpenMode As Long, lExtra As Long, lVersion As Long
    Dim ActionId As Long, lActionArgs As Long, lColumn As Long
    Dim ArgId As Long
    Dim strMacroName As String, strComment As String, strCondition As String
    Dim strAction As String, strArgName As String
    Dim strArg As String
     
        WizHook.Key = 51488399
        hscr = WizHook.OpenScript(strMacro, "", lOpenMode, lExtra, lVersion)
     
        If (hscr > 0) Then
            ' Parcours des lignes
            While (FNextHscr(hscr, False, EndOfScript))
                ' Identifiant de l'Action
                ActionId = ActidOfHscr(hscr)
                ' Nom de l'action
                strAction = WizHook.NameFromActid(ActionId)
                ' Colonne 0  = colonne Nom Macro
                Call WizHook.GetScriptString(hscr, 0, strMacroName)
                ' Colonne 1  = colonne Commentaire
                Call WizHook.GetScriptString(hscr, 1, strComment)
                ' Colonne 2  = colonne Condition
                Call WizHook.GetScriptString(hscr, 2, strCondition)
     
                If Len(strMacroName) > 0 Then Debug.Print "Nom       : " & strMacroName
                If Len(strCondition) > 0 Then Debug.Print "Condition : " & strCondition
                Debug.Print "Action    : " & strAction;
                If Len(strComment) > 0 Then
                   Debug.Print "        ** " & strComment & " **"
                Else
                   Debug.Print
                End If
                ' Nombre d'arguments de l'action
                lActionArgs = WizHook.ArgsOfActid(ActionId)
                If lActionArgs <> 0 Then
                    ' Colonne 3 et plus .... : arguments
                    For lColumn = 0 To (lActionArgs - 1)
                        ArgId = IdsArgNameOfActidIarg(ActionId, lColumn)
                        strArgName = GetStringFromId(ArgId)
                        Call WizHook.GetScriptString(hscr, lColumn + 3, strArg)
                        Debug.Print Tab(13); strArgName & " : " & strArg
                    Next lColumn
                End If
     
                Debug.Print
            Wend
            CloseHscr hscr
        End If
     
    End Sub
    A+

Discussions similaires

  1. Lister le contenu d'un dossier dans une ListBox
    Par zidenne dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2005, 12h51
  2. Lister le contenu d'un répertoire
    Par rob_57 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/10/2005, 19h16
  3. Lister le contenu d'un répertoire distant
    Par dody dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 17h23
  4. lister le contenu d'un serveur ftp avec NMFTP
    Par jackson dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/02/2005, 17h42
  5. Lister le contenu d'une table sans connaitre ses champs
    Par Google.be dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 30/03/2004, 15h23

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