Je dois documenter un gros classeur Excel réalisé par quelqu'un qui a
quitté l'entreprise (une dizaine de feuilles, 200 macros) et j'ai
parfois du mal à trouver ce qui utilise ces macros.
C'est facile quand c'est du code ou quand c'est appelé depis un menu
créé dynamiquement dans le code.
Mais comment faire quand la macro est appelée depuis un bouton ?
Il y en a une centaine répartis un peu partout dans le classeur et je
procède en les éditant les uns après les autres pour voir quelle macro
ils appellent.
Y a-t-il un moyen de faire l'inverse et de connaître le ou les objets
qui appellent une macro ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Rai
Bonjour,
Tu peux peut-être lister tous les objets graphiques du classeur et les macros associées. Si uniqument les objets formulaire ont des macros affectéés, il faudra tester la propriété 'Type' :
Une base de travail :
Sub listmacros() Sheets.Add after:=Sheets(Sheets.Count) ActiveSheet.Name = "Listing"
For Each ws In Sheets For Each bt In ws.Shapes lig = lig + 1 'compteur de lignes pour le listing t = bt.Type 'type de contrôle m = bt.OnAction 'macro affectée n = bt.Name 'nom du contrôle ' si t = msoFormControl (c'est à dire 8) ' alors c'est un bouton ' ou autre objet de formulaire If t = msoFormControl And n <> "" Then With Sheets("Listing") .Cells(lig, 1) = ws.Name .Cells(lig, 2) = n .Cells(lig, 3) = m End With End If Next bt Next ws End Sub
Bon travail
Rai
Bonjour,
Je dois documenter un gros classeur Excel réalisé par quelqu'un qui a quitté l'entreprise (une dizaine de feuilles, 200 macros) et j'ai parfois du mal à trouver ce qui utilise ces macros.
C'est facile quand c'est du code ou quand c'est appelé depis un menu créé dynamiquement dans le code.
Mais comment faire quand la macro est appelée depuis un bouton ?
Il y en a une centaine répartis un peu partout dans le classeur et je procède en les éditant les uns après les autres pour voir quelle macro ils appellent.
Y a-t-il un moyen de faire l'inverse et de connaître le ou les objets qui appellent une macro ?
Merci d'avance
Bonjour,
Tu peux peut-être lister tous les objets graphiques du classeur et les
macros associées.
Si uniqument les objets formulaire ont des macros affectéés, il faudra
tester la propriété 'Type' :
Une base de travail :
Sub listmacros()
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = "Listing"
For Each ws In Sheets
For Each bt In ws.Shapes
lig = lig + 1 'compteur de lignes pour le listing
t = bt.Type 'type de contrôle
m = bt.OnAction 'macro affectée
n = bt.Name 'nom du contrôle
' si t = msoFormControl (c'est à dire 8)
' alors c'est un bouton
' ou autre objet de formulaire
If t = msoFormControl And n <> "" Then
With Sheets("Listing")
.Cells(lig, 1) = ws.Name
.Cells(lig, 2) = n
.Cells(lig, 3) = m
End With
End If
Next bt
Next ws
End Sub
Bon travail
Rai
Bonjour,
Je dois documenter un gros classeur Excel réalisé par quelqu'un qui a
quitté l'entreprise (une dizaine de feuilles, 200 macros) et j'ai
parfois du mal à trouver ce qui utilise ces macros.
C'est facile quand c'est du code ou quand c'est appelé depis un menu
créé dynamiquement dans le code.
Mais comment faire quand la macro est appelée depuis un bouton ?
Il y en a une centaine répartis un peu partout dans le classeur et je
procède en les éditant les uns après les autres pour voir quelle macro
ils appellent.
Y a-t-il un moyen de faire l'inverse et de connaître le ou les objets
qui appellent une macro ?
Tu peux peut-être lister tous les objets graphiques du classeur et les macros associées. Si uniqument les objets formulaire ont des macros affectéés, il faudra tester la propriété 'Type' :
Une base de travail :
Sub listmacros() Sheets.Add after:=Sheets(Sheets.Count) ActiveSheet.Name = "Listing"
For Each ws In Sheets For Each bt In ws.Shapes lig = lig + 1 'compteur de lignes pour le listing t = bt.Type 'type de contrôle m = bt.OnAction 'macro affectée n = bt.Name 'nom du contrôle ' si t = msoFormControl (c'est à dire 8) ' alors c'est un bouton ' ou autre objet de formulaire If t = msoFormControl And n <> "" Then With Sheets("Listing") .Cells(lig, 1) = ws.Name .Cells(lig, 2) = n .Cells(lig, 3) = m End With End If Next bt Next ws End Sub
Bon travail
Rai
Bonjour,
Je dois documenter un gros classeur Excel réalisé par quelqu'un qui a quitté l'entreprise (une dizaine de feuilles, 200 macros) et j'ai parfois du mal à trouver ce qui utilise ces macros.
C'est facile quand c'est du code ou quand c'est appelé depis un menu créé dynamiquement dans le code.
Mais comment faire quand la macro est appelée depuis un bouton ?
Il y en a une centaine répartis un peu partout dans le classeur et je procède en les éditant les uns après les autres pour voir quelle macro ils appellent.
Y a-t-il un moyen de faire l'inverse et de connaître le ou les objets qui appellent une macro ?