OVH Cloud OVH Cloud

Connaître le nom de la procédure active.

12 réponses
Avatar
Clément Marcotte
Bonjour,

Étant en train de méditer sur la question de "bartez" sur la
possibilité de stocker à quelque part la date de modification d'une
procédure; je suis à la recherche d'un moyen, de retrouver, soit la
liste des procédures d'un module, soit le nom procédure de la
procédure active elle-même. J'ai trouvé le moyen de retrouver le nom
du module (du moins le "caption" de la fenêtre), mais pas le nom d'une
procédure.

Là, je commence à chercher chez Frédéric, et peut-être ailleurs
ensuite; mais si quelqu'un avait cela pas trop loin, cela pourrait
abréger mes souffrances.

Merci d'avance.

2 réponses

1 2
Avatar
Clément Marcotte
Bonjour,

Je l'avais téléchargé, mais je l'avais oublié. C'est intéressant, mais
j'ai de la misère avec l'idée de ne pas pourvoir ouvrir le classeur à
examiner à partir de la macro et aussi de la misère avec l'idée de
créer un nouveau classeur à chaque fois.

Cependant, l'aspect de "suivre le chemin" est intéressant. C'est
sûrement très approprié pour compléter la documentation qui devrait
accompagner tout développement informatique.


"GD" a écrit dans le message de
news:
Bonsour® Clément Marcotte,
en effet cela inscrit les noms de macro dans la zone commentaire...

mais je suis surpris que tu n'ai point essayé la proc de Stephen
Bullen

http://www.bmsltd.ie/DLCount/DLCount.asp?fileÊllTree97.exe
qui je t'assure fait un rapport circonstancié des macros d'un
classeur avec

l'arborescence des appels
ainsi que les liens proc appelée proc appelante...(nombre parent,
child)

je m'en sers depuis quelques temps déja pour mes dossiers de
maintenance,

il suffit d'activer la proc call tree après une modification de ton
projet

puis enregistrer le rapport à jour !!(doc_appli_truc_maj_le : )

Nb: bien que la proc soit marquée pour EXCEL 97( elle ne traite que
les

modules standards) et qu'il y ai un message d'erreur lors de
l'installation

il suffit d'activer le classeur à traiter
activer la xla qui est installée par défaut dans c:program
filesBMScall

tree 97calltree97.xla
(mieux se serait dans xlstart ;o))))
il apparait dans le menu excel > Outils > Procedure Call tree

j'effectue une visite régulière au cas ou Stephen adapterai pour xl
2000 et

+
;o)))
@+

Bonjour,

Juste un petit "rapport d'étape" sur l'avancement de mon projet.

Je ne suis pas encore rendu aux dates, mais cela progresse.

En fait, mon idée était (est) d'utiliser les propriétés des
fichiers


Office pour faire une liste facilement accessible (Clic-droit
dans


l'Explorateur Windows - Propriétés) des procédures VBA pouvant se
trouver dans un fichier particulier. (À force de répondre aux
questions et de ne pas vouloir encombrer mes classeurs existants
de


macros qui ne fonctionnent pas, j'ai accumulé un tas de classeurs
avec


des macros, et je m'aperçois que des fois je refais du déjà fait.)

Dans VBA seul, on peut seulement lire les propriétés "de base", et
on


peut lire/écrire (du moins je pense) les propriétés "custom".

Par contre, avec DSOFile,

http://support.microsoft.com/default.aspx?scid=kb;FR;q224351

on peut lire/écrire toutes les propriétés. Mais, car il y a
toujours


un mais, le fichier doit être fermé pour que DSOFile puisse agir,
et


être ouvert pour que les procédures de manipulation des modules
puissent être utilisées.

Avec un peu de gymnastique, des procédures du site de Frédéric, un
exemple microsoftien pour VB et DSOFile; j'ai réussi à mettre dans
la


propriété "Commentaires" d'un classeur Excel, les procédures VBA
de ce


classeur.

Pour ceux que cela intéresse, voici donc les procédures, dans
leur


état actuel. C'est la fonction microsoftienne (allégée)
OpenDocumentProperties qui permet de lire l'ensemble des
propriétés.



Ne pas oublier de cocher les références à la bibliothèque
Extensibility et à la bibliothèque DSOFile. Les noms sont donnés
en


commentaires dans la macro. Cependant, la bibliothèque DSOFile ne
sera


pas forcément dans Windowssystem. Chez moi, le programme
d'installation l'a mise (ou je l'ai peut-être fait mettre là),
dans


C:DSOFile. Il se pourrait donc que vous deviez vous promener un
peu


(parcourir) sur votre disque pour la retrouver et l'ajouter aux
références.



Sub ListeMacrosModule()
'nécessite une référence à la bibliothèque
'Microsoft Visual Basic For Application Extensibility 5.3
'et à la bibliothèque DsoFile (DSOleFile.CustomProperty)
'renvoie dans les propriétés du classeur la liste
'des procédures et
'fonctions d'un module standard
Dim oCustProp As DSOleFile.CustomProperty, oFilePropReader
Dim oDocProp As DSOleFile.DocumentProperties
Dim VBCodeMod As CodeModule, liste As Object
Dim StartLine As Long
Dim ProcName As String
Dim Wbk As Workbook
Dim i As Long, fenetre, lenom
Dim letexte As String, lefichier As String
Set oFilePropReader = New DSOleFile.PropertyReader
lefichier = "C:Mes Documentstestregex1.xls"
Set oDocProp = oFilePropReader.GetDocumentProperties(lefichier)
letexte = oDocProp.Comments
Set oDocProp = Nothing
Set Wbk = Workbooks.Open(lefichier)
For Each fenetre In Wbk.VBProject.VBComponents
lenom = fenetre.Name
Set VBCodeMod = Wbk.VBProject.VBComponents(lenom).CodeModule
i = 1
With VBCodeMod
StartLine = .CountOfDeclarationLines + 1
Do Until StartLine >= .CountOfLines
letexte = letexte & .ProcOfLine(StartLine, vbext_pk_Proc) &
vbNewLine
StartLine = StartLine +
.ProcCountLines(.ProcOfLine(StartLine, _


vbext_pk_Proc), vbext_pk_Proc)
i = i + 1
Loop
End With
Next
Wbk.Close
Set Wbk = Nothing
Set VBCodeMod = Nothing
Set oDocProp = oFilePropReader.GetDocumentProperties(lefichier)
oDocProp.Comments = letexte
Set oDocProp = Nothing

End Sub

Public Function OpenDocumentProperties(lefichier) As Boolean
Dim oCustProp As DSOleFile.CustomProperty
Dim sTmp As String


' If the user cancels the dialog, exit out.
If Len(sFile) = 0 Then Exit Function

' Here is where we load the document properties for the file
' selected. The function will return a DocumentProperties object.
' We must have exclusive access to the storage of the file. If
' another app has the file open, this function will raise an
error


Set oDocProp = oFilePropReader.GetDocumentProperties(sFile)

On Error Resume Next
cProp.PresentationFormat


' The HasMacros property only works for Excel & Word files
' and raises error if document is not one of these. Ignore
' any error for this sample.
Dim sItem As String
sItem = CStr(oDocProp.HasMacros)
If Err Then sItem = "<unknown>"
lstNormalProps.AddItem "Macros Attached: " & sItem

' We'll get the thumnail image of the document (if available)...
Dim oPicDisp As StdPicture
Set oPicDisp = oDocProp.Thumbnail
If oPicDisp Is Nothing Then
chkShowPreview.Enabled = False
Else
Set picPreview.Picture = oPicDisp
chkShowPreview.Enabled = True
End If

On Error GoTo Err_Trap

txtCustName.Text = ""
txtCustValue.Text = ""
lstCustType.ListIndex = 0


' The operation was successful.
OpenDocumentProperties = True
Exit Function

Err_Trap:
' Trap common errors returned from componenet...
Select Case Err.Number
Case &H80040203
' The file is open by another program
MsgBox Err.Description & " Please choose another file."
Err.Clear: Resume GetFileFromUser
Case &H80040202
' The file selected is not an OLE structured storage file
MsgBox Err.Description & " Please choose another file."
Err.Clear: Resume GetFileFromUser
Case &H80040201
' DCOM is not installed -- fall through to MsgBox below
End Select

MsgBox "Error: " & Err.Description, vbCritical, "Err: " &
CStr(Err.Number)
End Function






Avatar
Clément Marcotte
Oupss! Je n'avais pas remarqué (pas regardé) que le code n'est pas
protégé.



"GD" a écrit dans le message de
news:
Bonsour® Clément Marcotte,
en effet cela inscrit les noms de macro dans la zone commentaire...

mais je suis surpris que tu n'ai point essayé la proc de Stephen
Bullen

http://www.bmsltd.ie/DLCount/DLCount.asp?fileÊllTree97.exe
qui je t'assure fait un rapport circonstancié des macros d'un
classeur avec

l'arborescence des appels
ainsi que les liens proc appelée proc appelante...(nombre parent,
child)

je m'en sers depuis quelques temps déja pour mes dossiers de
maintenance,

il suffit d'activer la proc call tree après une modification de ton
projet

puis enregistrer le rapport à jour !!(doc_appli_truc_maj_le : )

Nb: bien que la proc soit marquée pour EXCEL 97( elle ne traite que
les

modules standards) et qu'il y ai un message d'erreur lors de
l'installation

il suffit d'activer le classeur à traiter
activer la xla qui est installée par défaut dans c:program
filesBMScall

tree 97calltree97.xla
(mieux se serait dans xlstart ;o))))
il apparait dans le menu excel > Outils > Procedure Call tree

j'effectue une visite régulière au cas ou Stephen adapterai pour xl
2000 et

+
;o)))
@+

Bonjour,

Juste un petit "rapport d'étape" sur l'avancement de mon projet.

Je ne suis pas encore rendu aux dates, mais cela progresse.

En fait, mon idée était (est) d'utiliser les propriétés des
fichiers


Office pour faire une liste facilement accessible (Clic-droit
dans


l'Explorateur Windows - Propriétés) des procédures VBA pouvant se
trouver dans un fichier particulier. (À force de répondre aux
questions et de ne pas vouloir encombrer mes classeurs existants
de


macros qui ne fonctionnent pas, j'ai accumulé un tas de classeurs
avec


des macros, et je m'aperçois que des fois je refais du déjà fait.)

Dans VBA seul, on peut seulement lire les propriétés "de base", et
on


peut lire/écrire (du moins je pense) les propriétés "custom".

Par contre, avec DSOFile,

http://support.microsoft.com/default.aspx?scid=kb;FR;q224351

on peut lire/écrire toutes les propriétés. Mais, car il y a
toujours


un mais, le fichier doit être fermé pour que DSOFile puisse agir,
et


être ouvert pour que les procédures de manipulation des modules
puissent être utilisées.

Avec un peu de gymnastique, des procédures du site de Frédéric, un
exemple microsoftien pour VB et DSOFile; j'ai réussi à mettre dans
la


propriété "Commentaires" d'un classeur Excel, les procédures VBA
de ce


classeur.

Pour ceux que cela intéresse, voici donc les procédures, dans
leur


état actuel. C'est la fonction microsoftienne (allégée)
OpenDocumentProperties qui permet de lire l'ensemble des
propriétés.



Ne pas oublier de cocher les références à la bibliothèque
Extensibility et à la bibliothèque DSOFile. Les noms sont donnés
en


commentaires dans la macro. Cependant, la bibliothèque DSOFile ne
sera


pas forcément dans Windowssystem. Chez moi, le programme
d'installation l'a mise (ou je l'ai peut-être fait mettre là),
dans


C:DSOFile. Il se pourrait donc que vous deviez vous promener un
peu


(parcourir) sur votre disque pour la retrouver et l'ajouter aux
références.



Sub ListeMacrosModule()
'nécessite une référence à la bibliothèque
'Microsoft Visual Basic For Application Extensibility 5.3
'et à la bibliothèque DsoFile (DSOleFile.CustomProperty)
'renvoie dans les propriétés du classeur la liste
'des procédures et
'fonctions d'un module standard
Dim oCustProp As DSOleFile.CustomProperty, oFilePropReader
Dim oDocProp As DSOleFile.DocumentProperties
Dim VBCodeMod As CodeModule, liste As Object
Dim StartLine As Long
Dim ProcName As String
Dim Wbk As Workbook
Dim i As Long, fenetre, lenom
Dim letexte As String, lefichier As String
Set oFilePropReader = New DSOleFile.PropertyReader
lefichier = "C:Mes Documentstestregex1.xls"
Set oDocProp = oFilePropReader.GetDocumentProperties(lefichier)
letexte = oDocProp.Comments
Set oDocProp = Nothing
Set Wbk = Workbooks.Open(lefichier)
For Each fenetre In Wbk.VBProject.VBComponents
lenom = fenetre.Name
Set VBCodeMod = Wbk.VBProject.VBComponents(lenom).CodeModule
i = 1
With VBCodeMod
StartLine = .CountOfDeclarationLines + 1
Do Until StartLine >= .CountOfLines
letexte = letexte & .ProcOfLine(StartLine, vbext_pk_Proc) &
vbNewLine
StartLine = StartLine +
.ProcCountLines(.ProcOfLine(StartLine, _


vbext_pk_Proc), vbext_pk_Proc)
i = i + 1
Loop
End With
Next
Wbk.Close
Set Wbk = Nothing
Set VBCodeMod = Nothing
Set oDocProp = oFilePropReader.GetDocumentProperties(lefichier)
oDocProp.Comments = letexte
Set oDocProp = Nothing

End Sub

Public Function OpenDocumentProperties(lefichier) As Boolean
Dim oCustProp As DSOleFile.CustomProperty
Dim sTmp As String


' If the user cancels the dialog, exit out.
If Len(sFile) = 0 Then Exit Function

' Here is where we load the document properties for the file
' selected. The function will return a DocumentProperties object.
' We must have exclusive access to the storage of the file. If
' another app has the file open, this function will raise an
error


Set oDocProp = oFilePropReader.GetDocumentProperties(sFile)

On Error Resume Next
cProp.PresentationFormat


' The HasMacros property only works for Excel & Word files
' and raises error if document is not one of these. Ignore
' any error for this sample.
Dim sItem As String
sItem = CStr(oDocProp.HasMacros)
If Err Then sItem = "<unknown>"
lstNormalProps.AddItem "Macros Attached: " & sItem

' We'll get the thumnail image of the document (if available)...
Dim oPicDisp As StdPicture
Set oPicDisp = oDocProp.Thumbnail
If oPicDisp Is Nothing Then
chkShowPreview.Enabled = False
Else
Set picPreview.Picture = oPicDisp
chkShowPreview.Enabled = True
End If

On Error GoTo Err_Trap

txtCustName.Text = ""
txtCustValue.Text = ""
lstCustType.ListIndex = 0


' The operation was successful.
OpenDocumentProperties = True
Exit Function

Err_Trap:
' Trap common errors returned from componenet...
Select Case Err.Number
Case &H80040203
' The file is open by another program
MsgBox Err.Description & " Please choose another file."
Err.Clear: Resume GetFileFromUser
Case &H80040202
' The file selected is not an OLE structured storage file
MsgBox Err.Description & " Please choose another file."
Err.Clear: Resume GetFileFromUser
Case &H80040201
' DCOM is not installed -- fall through to MsgBox below
End Select

MsgBox "Error: " & Err.Description, vbCritical, "Err: " &
CStr(Err.Number)
End Function






1 2