Résolu [VBA] Savoir si le classeur contient des macros

Solutions (5)
Tags :
  • Visual basic
  • Standard
  • Programmation
|
Bonjour,

J'aimerai savoir si mon classeur contient au moin une macro, j'ai ce code ci :
  1. Sub Test()
  2.  
  3. 'Nécéssite d'activer la référence
  4. '"Visual basic For Application Extensibility 5.3"
  5.  
  6. Dim VBComp As VBComponents
  7. Dim VBTest As VBComponent
  8.  
  9. Set VBComp = ActiveWorkbook.VBProject.VBComponents
  10. For Each VBTest In VBComp
  11. 'Vérification de la présence d'un module standard
  12. If VBTest.Type = vbext_ct_StdModule Then
  13. MsgBox "Il existe un module"
  14. Else
  15. MsgBox "Aucune macros"
  16. End If
  17. Next
  18.  
  19. End Sub

Mais mon probleme est qu'il me liste tout les composants donc j'ai un messagebox a chaque fois , moi j'aimerai avoir un message box a la fin qui dit: "Le classeur contient au moin une macro" ou " Le classeur ne contient pas de macro".

Une idée ?
SVP
Contenus similaires
Meilleure solution
partage
|
Bonjour,

il faudrait déclarer une variable du genre iNbProc (=0)
l'incrémenter à la place du msgbox (ligne 39)
en fin de traitement, si iNbProc>0 c'est qu'il y a au moins une sub
  • Commenter cette solution |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par jacouille35.
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci c'est nickel !!
  • Commenter cette réponse |
Score
0
òh
òi
|
Comment pourrai je faire avec ceci :
  1. Sub test()
  2.  
  3. ' Declare variables to access the Excel workbook.
  4. Dim objXLApp As Excel.Application
  5. Dim objXLWorkbooks As Excel.Workbooks
  6. Dim objXLABC As Excel.Workbook
  7.  
  8. ' Declare variables to access the macros in the workbook.
  9. Dim objProject As VBIDE.VBProject
  10. Dim objComponent As VBIDE.VBComponent
  11. Dim objCode As VBIDE.CodeModule
  12.  
  13. ' Declare other miscellaneous variables.
  14. Dim iLine As Integer
  15. Dim sProcName As String
  16. Dim pk As vbext_ProcKind
  17.  
  18. ' Open Excel, and open the workbook.
  19. Set objXLApp = New Excel.Application
  20. Set objXLWorkbooks = objXLApp.Workbooks
  21. Set objXLABC = objXLWorkbooks.Open("U:\..\Classeur.xls")
  22.  
  23. ' Get the project details in the workbook.
  24. Set objProject = objXLABC.VBProject
  25.  
  26. ' Iterate through each component in the project.
  27. For Each objComponent In objProject.VBComponents
  28.  
  29. ' Find the code module for the project.
  30. Set objCode = objComponent.CodeModule
  31.  
  32. ' Scan through the code module, looking for procedures.
  33. iLine = 1
  34. Do While iLine < objCode.CountOfLines
  35. sProcName = objCode.ProcOfLine(iLine, pk)
  36. If sProcName <> "" Then
  37. ' Found a procedure. Display its details, and then skip
  38. ' to the end of the procedure.
  39. Msgbox sProcName
  40. iLine = iLine + objCode.ProcCountLines(sProcName, pk)
  41. Else
  42. ' This line has no procedure, so go to the next line.
  43. iLine = iLine + 1
  44. End If
  45. Loop
  46.  
  47. Set objCode = Nothing
  48. Set objComponent = Nothing
  49. Next
  50.  
  51. Set objProject = Nothing
  52.  
  53. ' Clean up and exit.
  54. objXLABC.Close
  55. objXLApp.Quit
  56. End Sub


Pour le moment le Msgbox m'indique le nom de mes macros, mais j'aimerai avoir un Msgbox qui m'indique, soit " Il y a au moin une macro" , soit " Il n'y a pas de macro".
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Salut,

Si tu as une messagebox à chaque fois, il te suffit de t'arrêter une fois que tu as vu la 1ère.

  1. Sub Test()
  2. 'Nécéssite d'activer la référence
  3. '"Visual basic For Application Extensibility 5.3"
  4.  
  5. Dim VBComp As VBComponents
  6. Dim VBTest As VBComponent
  7. Set VBComp = ActiveWorkbook.VBProject.VBComponents
  8. For Each VBTest In VBComp
  9. 'Vérification de la présence d'un module standard
  10. If VBTest.Type = vbext_ct_StdModule Then
  11. MsgBox "Il existe un module"
  12. Exit For
  13. End If
  14. Next
  15.  
  16. End Sub
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS