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.

10 réponses

1 2
Avatar
jps
tu me fais penser, clément, à ces deux types qui marchent dans le désert
(pas les pêcheurs, non, non, deux autres) ; l'un des deux se fait mordre par
la plus venimeuse des vipères du coin en une partie de son anatomie que la
décence m'interdit de nommer ici (twinley a déjà compris) ; l'autre part à
la recherche de la cabine téléphonique qui se trouve 3 km plus loin, appelle
le docteur, explique ce qui est arrivé, demande ce qu'il y a lieu de faire,
ce à quoi le praticien répond "la seule chose qui puisse sauver votre ami
d'une mort certaine, c'est la sucion" et l'autre de refaire les 3 km dans
l'autre sens, de retrouver son compagnon de plus en plus souffrant qui a
encore la force de demander "alors, qu'est-ce qu'il a dit le docteur?" "il a
dit que tu allais mourir"
jps

"Clément Marcotte" a écrit dans le message
de news:
cela pourrait abréger mes souffrances.


Avatar
Clément Marcotte
:-)))))))))))))))))))

"jps" a écrit dans le
message de news:
tu me fais penser, clément, à ces deux types qui marchent dans le
désert

(pas les pêcheurs, non, non, deux autres) ; l'un des deux se fait
mordre par

la plus venimeuse des vipères du coin en une partie de son anatomie
que la

décence m'interdit de nommer ici (twinley a déjà compris) ; l'autre
part à

la recherche de la cabine téléphonique qui se trouve 3 km plus loin,
appelle

le docteur, explique ce qui est arrivé, demande ce qu'il y a lieu de
faire,

ce à quoi le praticien répond "la seule chose qui puisse sauver
votre ami

d'une mort certaine, c'est la sucion" et l'autre de refaire les 3 km
dans

l'autre sens, de retrouver son compagnon de plus en plus souffrant
qui a

encore la force de demander "alors, qu'est-ce qu'il a dit le
docteur?" "il a

dit que tu allais mourir"
jps

"Clément Marcotte" a écrit dans le
message

de news:
cela pourrait abréger mes souffrances.





Avatar
GD
Bonsour® Clément,
Là tu m'étonnes....
va sur le site de stephen Bullen :

This routine reads all of the modules in selected open workbooks, extracting
a complete list of procedures and the calls between them. From this it
generates some pivot tables, enabling you to easily identify which
procedures call, or are called by another procedure and how many calls there
are between the modules. Finally, it displays a procedure flow diagram for
the workbook in a tree structure. The zip file contains a single xls file,
which is hidden when opened. This update fixes a few problems reported by
some users and also handles multi-workbook projects (when referenced using
Tools, References). Documentation is included in the zip file.
http://www.bmsltd.ie/DLCount/DLCount.asp?fileÊllTree97.exe

quant à connaitre le nom de la procédure active :
un truc dans ce genre :
'-------------------
Public P_CurProc as String
Sub toto()
on error goto trterr
P_CurProc="toto"
application.statusbar=P_CurProc
'-----bla-bla code
exit sub
trterr:
msgbox "planté dans " & P_CurProc
End
End Sub
il suffit dans chaque proc d'affecter son nom à une variable public !
j'avais utilisé ça pour tracer un bug, sauf que j'avais oublié 2 procs ;o)))
je n'ai trouvé mon bug qu'en restructurant mon programme et en m'apercevant
que la variable public citée ci-dessus n'était pas utilisée..

NB : grace à l'arbre issu du prog de Bullen il est relativement facile de
verifier la correcte structuration d'un développement !!!



Clément Marcotte wrote:
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.


Avatar
michdenis
Bonjour Clément,

En supposant que cette date est la deuxième ligne d'une procédure contenu dans le classeur.
Sinon, on peut adapter et boucler sur chacune des lignes de la procédure....au choix !


'------------------------------
Sub TrouverLaDateProcédure()

MsgBox TrouverLaDateModificationProcédure("Fermer_le_Classeurs")

End Sub

'------------------------------
Function TrouverLaDateModificationProcédure(SonNom As String)
Dim A As Integer, Ok As Integer

On Error Resume Next
With ThisWorkbook.VBProject
For Each vbcomp In .VBComponents
With vbcomp.CodeModule
A = .ProcBodyLine(SonNom, 0)
If Err <> 0 Then
Err = 0
Ok = 1
Else
Ok = 0
Res = .Lines(A + 1, 1)
Exit For
End If
End With
Next
End With

If Ok = 1 Then
TrouverLaDateModificationProcédure = _
"Procédure non trouvée"
ElseIf Res <> "" Then
TrouverLaDateModificationProcédure = Res
Else
TrouverLaDateModificationProcédure = _
"date non trouvée"
End If
End Function
'-------------------------------


Salutations!




"Clément Marcotte" a écrit dans le message de news:

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.
Avatar
twinley
Bsr à tous,

c'est vrai que je comprend plus vite ce que tu écris, que le VBA.
J'aime souvent raconter comment du temps où pour s'assurer de la mort
d'un client, les croques-mort mordait cruellement le gros orteil du défunt.
Un jour, deux d'entre eux furent appelés et constatant qu'il s'agissait
d'un cul de jatte, il y eu un moment de flottement.
Mais l'un des deux trouva une solution pour vérifier la mort du pauvre
bonhomme.
Et depuis on les appelle les pompes funèbres...

twinley


jps wrote:
tu me fais penser, clément, à ces deux types qui marchent dans le désert
(pas les pêcheurs, non, non, deux autres) ; l'un des deux se fait mordre par
la plus venimeuse des vipères du coin en une partie de son anatomie que la
décence m'interdit de nommer ici (twinley a déjà compris) ; l'autre part à
la recherche de la cabine téléphonique qui se trouve 3 km plus loin, appelle
le docteur, explique ce qui est arrivé, demande ce qu'il y a lieu de faire,
ce à quoi le praticien répond "la seule chose qui puisse sauver votre ami
d'une mort certaine, c'est la sucion" et l'autre de refaire les 3 km dans
l'autre sens, de retrouver son compagnon de plus en plus souffrant qui a
encore la force de demander "alors, qu'est-ce qu'il a dit le docteur?" "il a
dit que tu allais mourir"
jps

"Clément Marcotte" a écrit dans le message
de news:

cela pourrait abréger mes souffrances.






Avatar
michdenis
Bonjour Clément,


MsgBox TrouverLaDateModificationProcédure("Fermer_le_Classeur")


tu auras compris que "Fermer_le_Classeur" est le nom de la procédure dont tu recherches la date en deuxième ligne !


Salutations!


"Clément Marcotte" a écrit dans le message de news:

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.
Avatar
jps
:-)))))))))))))))
jps
"twinley" a écrit dans le message de
news:%23mIl%

Bsr à tous,

c'est vrai que je comprend plus vite ce que tu écris, que le VBA.
J'aime souvent raconter comment du temps où pour s'assurer de la mort
d'un client, les croques-mort mordait cruellement le gros orteil du
défunt.

Un jour, deux d'entre eux furent appelés et constatant qu'il s'agissait
d'un cul de jatte, il y eu un moment de flottement.
Mais l'un des deux trouva une solution pour vérifier la mort du pauvre
bonhomme.
Et depuis on les appelle les pompes funèbres...

twinley





Avatar
Clément Marcotte
Bonjour,

Merci à tous. J'ai du différer quelque peu ce projet, mais je garde
tout cela en réserve.


"Clément Marcotte" a écrit dans le
message de news:
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.



Avatar
Clément Marcotte
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
GD
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