VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Staple1600

XLDnaute Barbatruc
Bonjour

Avec cette macro:
Sub test()
Application.VBE.VBProjects.VBE.MainWindow.Visible = True
End Sub

on ouvre VBE

Comment faire pour ouvrir VBE sur un module précis?

Le but étant de pouvoir afficher le code d'une macro
que l'on vient d'éxécuter

(cf. compilation aide VBA)
 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Re

J'avance à petits pas
Sub test()
'Application.VBE.VBProjects.VBE.MainWindow.Visible = True
Application.VBE.ActiveVBProject.VBComponents(3).CodeModule.CodePane.Show
'si j'ai bien compris 1=code dans ThisWorkBook
'2=code dans Feuil1
'3=code dans Module1
End Sub

Ce que je voudrais faire
Exemple il y 20 macros dans le Module1
On lance la macro
sub macro5()
'
end sub

Puis on veut afficher le code
Si j'utilise
Application.VBE.ActiveVBProject.VBComponents(3).CodeModule.CodePane.Show
VBE s'ouvre,pointe sur le Module1 et macro1
or je voudrais dans ce cas qu'il pointe sur macro5

Quelqu'un a une idée?
 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Personne pour m'aiguiller...

En attendant votre aide précieuse

J'ai encore progresser

Sub test2()
Application.Goto "Nomdelaprocédure"
End Sub

Maintenant comment faire quelquechose du genre

sub AfficherMacro()
x="Procédure que l'on vient d'éxécuter"
Application.Goto "x"
End sub
 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Bon bah puisque personne ne semble interessé par le problème

je vais m'aider tout seul

voila ma solution
'code dans la feuille
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Dim L As Byte 'Byte à adapter si plus de 255
'je ne sais pas pourquoi il y a cette ligne MichelXLD
Dim voirlecode
If Not Application.Intersect(ActiveCell, Range("B6:B19")) Is Nothing Then
' a chaque nouvelle macro insérée , adapter la plage de cellule svp
Application.Run "Macro" & ActiveCell.Row - 5
voirlecode = MsgBox("Voulez-vous voir le code de la macro dans VBE?", vbYesNo, "Visualisation du code source dans VBE")
If voirlecode = vbYes Then
'une solution pour ouvrir VBE sur la macro que l'on vient d'éxécuter
Application.Goto "Macro" & ActiveCell.Row - 5
Else
End
End If
End If
End Sub

Je me remercie donc pour l'aide que je me suis apporté

Mais quelquepart je trouve ca frustant

J'aurai préféré remercier quelqu'un du forum...

(Je ne désespère pas de voir d'autres solutions
ca me ferait plaisir...)

Merci.

Bonne fin de week-end

PS: je remercie (mais je l'avais deja fait) MichelXLD et Myta
pour leur aide dans le "post père" de celui-ci
 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Bonjour Staple1600, le Forum


Un moyen vraiment simple, mais non valable pour les Private Modules de Feuille, Workbook ou de UserForm, ainsi que pour les Private Sub...

Application.Goto Reference:="Macro5"

Pour les Privates Sub, j'ai pas eu vraiment besoin de trafiquer mes démos au point de mettre des Bouton pour accéder directement à une Sub ou Function Précise, mais on pourrait s'orienter sur ce genre de codes, bien lourds quand même...

Code:
Sub GotoAPrivateSubOnSheet()
Dim WB As Workbook
Dim Code As Object
Dim NomProc As String, NomModule As String
Dim DebCode As Integer, VBext_Pk_Proc As Long
Dim Test As Boolean
 
Set WB = ThisWorkbook
NomProc = "CommandButton22_Click"
NomModule = "Interface"
 
 
Set Code = WB.VBProject.VBComponents(WB.Sheets(NomModule).CodeName).CodeModule
Test = Code.Find(NomProc, 1, 1, -1, -1, True, False)
    If Test = True Then
        With Code
            .CodePane.Show
            DebCode = .ProcStartLine(NomProc, VBext_Pk_Proc) + 1
            .CodePane.SetSelection DebCode, 1, DebCode, 1
        End With
    End If
End Sub


Pour se simplifier la vies on peut faire ceci aussi :

Code:
Sub GotoAPrivateSubOnSheetWithCodeName()
Dim WB As Workbook
Dim Code As Object
Dim NomProc As String, NomModule As String
Dim DebCode As Integer, VBext_Pk_Proc As Long
Dim Test As Boolean
 
Set WB = ThisWorkbook
NomProc = "CommandButton2_Click"
NomModule = "Feuil1" [COLOR=green][B]'NB on emploit le CodeName de Feuille Directement....[/B][/COLOR]
 
 
Set Code = WB.VBProject.VBComponents(NomModule).CodeModule
Test = Code.Find(NomProc, 1, 1, -1, -1, True, False)
    If Test = True Then
        With Code
            .CodePane.Show
            DebCode = .ProcStartLine(NomProc, VBext_Pk_Proc) + 1
            .CodePane.SetSelection DebCode, 1, DebCode, 1
        End With
    End If
End Sub

Ceci c'est surtout si ensuite on veut aussi aller pointer sur des Private Sub de UserForm car là on aura pas grand chose à changer (Voire même passer les Strings "NomProc" et NomModule" en tant qu'argument pour n'avoir qu'un code "Moteur"... :


Code:
Sub GotoAPrivateSubOnUserForm()
Dim WB As Workbook
Dim Code As Object
Dim NomProc As String, NomModule As String
Dim DebCode As Integer, VBext_Pk_Proc As Long
Dim Test As Boolean
 
Set WB = ThisWorkbook
NomProc = "CommandButton2_Click"
NomModule = "UserForm1"
 
 
Set Code = WB.VBProject.VBComponents(NomModule).CodeModule
Test = Code.Find(NomProc, 1, 1, -1, -1, True, False)
    If Test = True Then
        With Code
            .CodePane.Show
            DebCode = .ProcStartLine(NomProc, VBext_Pk_Proc) + 1
            .CodePane.SetSelection DebCode, 1, DebCode, 1
        End With
    End If
End Sub


... Et Idem pour des Privates Sub dans "ThisWorkBook"....

Code:
Sub GotoAPrivateSubOnThisWorkBook()
Dim WB As Workbook
Dim Code As Object
Dim NomProc As String, NomModule As String
Dim DebCode As Integer, VBext_Pk_Proc As Long
Dim Test As Boolean
 
Set WB = ThisWorkbook
NomProc = "Workbook_WindowActivate"
NomModule = "ThisWorkBook"
 
 
Set Code = WB.VBProject.VBComponents(NomModule).CodeModule
Test = Code.Find(NomProc, 1, 1, -1, -1, True, False)
    If Test = True Then
        With Code
            .CodePane.Show
            DebCode = .ProcStartLine(NomProc, VBext_Pk_Proc) + 1
            .CodePane.SetSelection DebCode, 1, DebCode, 1
        End With
    End If
End Sub

Et puis pour "standardiser"... Pour une macro normale cela fonctionne aussi....

Code:
Sub GotoAPrivateSubOnModuleStandard()
Dim WB As Workbook
Dim Code As Object
Dim NomProc As String, NomModule As String
Dim DebCode As Integer, VBext_Pk_Proc As Long
Dim Test As Boolean
 
Set WB = ThisWorkbook
NomProc = "Macro5"
NomModule = "Module2"
 
 
Set Code = WB.VBProject.VBComponents(NomModule).CodeModule
Test = Code.Find(NomProc, 1, 1, -1, -1, True, False)
    If Test = True Then
        With Code
            .CodePane.Show
            DebCode = .ProcStartLine(NomProc, VBext_Pk_Proc) + 1
            .CodePane.SetSelection DebCode, 1, DebCode, 1
        End With
    End If
End Sub


NB : Remarque Importante de L'aide :
Une procédure commence à la première ligne figurant sous l'instruction End Sub de la procédure précédente. Si la procédure est la première, elle commence à la fin de la section Déclarations générale. (Ici je considère une ligne de vide entre chaque Procédure... d'où le "+ 1")


Bon Aprèm

@+Thierry

 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Bonsoir

Bah voila donc je remercie _ Thierry

pour ce conséquent exemple


Précision:

La démarche est quand on éxécute une macro "demonstrative"
on puisse aller voir le code dans VBE

Quelles sont les limites de procédures dans un même module?

Je cherche à trouver la meilleure ergonomie

si je mets 100 macros dans un module
et 50 modules dans un classeur (valeurs prises au hasard)
ca risque de ne pas le faire non?

Comment s'y prendre pour rendre la navigation dans le classeur
et VBE agréables?

En tout cas merci encore pour ta réponse, Thierry

Je vais aller étudier cela à tête reposée.

Bonne soirée à tous
 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Bonjour Staple, le Forum

Tu n'as pas du avoir l'attention attirée par cette phrase au milieu de mon long post :

Voire même passer les Strings "NomProc" et NomModule" en tant qu'argument pour n'avoir qu'un code "Moteur"... :

En effet, je m'imagine bien que tu ne vas pas répéter 50 x 100 fois ce code "Moteur" lol

Regarde ceci :


Code:
Option Explicit
Sub TheStarter()
Dim StrProc As String
Dim StrMod As String
StrMod = InputBox("Indiquez le nom du Module", "Module Name", "Module2")
StrProc = InputBox("Indiquez le nom de la Procédure", "Sub or Function Name", "Macro5")

GotoAnyProcOrFunction StrMod, StrProc [B][COLOR=green]'[/COLOR][COLOR=green]<<< [I]Ici passage d'Arguments[/I][/COLOR][/B]
End Sub

Le "Moteur" recevant les arguments :

Code:
Sub GotoAnyProcOrFunction([COLOR=green][B]NomModule As String, NomProc As String[/B][/COLOR])
Dim WB As Workbook
Dim Code As Object
Dim DebCode As Integer, VBext_Pk_Proc As Long
Dim Test As Boolean

Set WB = ThisWorkbook

Set Code = WB.VBProject.VBComponents(NomModule).CodeModule
Test = Code.Find(NomProc, 1, 1, -1, -1, True, False)
    If Test = True Then
        With Code
            .CodePane.Show
            DebCode = .ProcStartLine(NomProc, VBext_Pk_Proc) + 1
            .CodePane.SetSelection DebCode, 1, DebCode, 1
        End With
    End If
End Sub

En fait tu pourrais même simplifier si tu as une structure relativement simple du nom de tes Macro et Module (Macro1, 2, 3... Module1, 2, 3...)

Code:
Option Explicit
Sub TheStarter()
Dim StrProc As String
Dim StrMod As String
StrMod = InputBox("Indiquez le Numéro du Module", "Module Name", "2")
StrProc = InputBox("Indiquez le Numéro de la Procédure", "Sub or Function Name", "5")

GotoAnyProcOrFunction StrMod, StrProc [COLOR=green][B]'<<< Ici passage d'Arguments[/B][/COLOR]
End Sub
 
Sub GotoAnyProcOrFunction([B][COLOR=green]StrMod As String, StrProc As String[/COLOR][/B])
Dim WB As Workbook
Dim NomProc As String, NomModule As String
Dim Code As Object
Dim DebCode As Integer, VBext_Pk_Proc As Long
Dim Test As Boolean

Set WB = ThisWorkbook
NomModule = "Module" & StrMod
NomProc = "Macro" & StrProc

Set Code = WB.VBProject.VBComponents(NomModule).CodeModule
Test = Code.Find(NomProc, 1, 1, -1, -1, True, False)
    If Test = True Then
        With Code
            .CodePane.Show
            DebCode = .ProcStartLine(NomProc, VBext_Pk_Proc) + 1
            .CodePane.SetSelection DebCode, 1, DebCode, 1
        End With
    End If
End Sub

Dans une telle configuration de noms, il est clair que "TheStarter" ne pourrait se résumer qu'à une ligne de code à la fin d'une autre macro, ainsi :

Code:
GotoAnyProcOrFunction 2, 5[B][I][COLOR=green] '<<< Ici passage d'Arguments[/COLOR][/I][/B]


Bonne Journée

@+Thierry
 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Bonjour


j'avais bien précisé que j'allais étudié cela a tête reposée


(ce qui n'était pas le cas hier)

Donc aujourd'hui je devrasi être plus attentif

En tout cas merci pour tes réponses
 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Bonsoir

Elle est reposée

Maiis aujourdh'hui je me suis focalisé
sur SumProduct (en vba)
pour un post auquel d'ailleurs tu as fourni une réponse
(Stats de winnie)

Mais je ne manquerais pas d'utiliser ton code
(une fois que je l'aurais compris)
pour la compilation aide VBA
(qui avance à pas trés lents par ailleurs)

Question subsidiaire:
Comment d'années de VBA as tu derrière toi?
(autodidacte ou formation professionnelle?)

J'espère d'être pas indiscret.

Bonne nuit à tous.
 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Re bonsoir Stapple, le Forum

Heureux pour ta tête ! 🙄

Pour ce qui est de la question Subsidiaire...

Disons que tout à commencé par une soirée pluvieuse au détour d'un chemin quand ma voiture est tombée en panne, je les ai vu, ils étaient là avec leur petit doigt en l'air !!!

Arf non ça c'est David Vincent !!!

Non en fait il devait aussi pleuvoir le jour ou j'ai ramené un Commodore 64 flambant neuf à la maison... Tout était en Basic sur des K7 en guise de Disques Durs !

Ensuite, des nuits et des nuits blanche pour faire mon premier BioRythme !
Tout seul avec des magasines qui ressemblaient à l'époque plus à des journaux, et bien entendu sans Disquette à pomper mais tout à taper à la mimine...

Ensuite, et bien j'ai eu l'opportunité de rentrer dans un domaine professionnel qui m'a permit de joindre une chose rare dans le monde d'aujourd'hui, ma passion et mon boulot... Toujours en étant 100% autodidacte... le VBA n'est qu'un des outils que j'emploie professionnellement tout autant que des requêtes SQL à rallonge sur des gros systèmes AS400 ou, comme plus récemment, des bases Oracle via InfoMaker de Sybase, mais pour VBA et Excel j'y trouve toujours autant de plaisir par son coté très ludique de la programmation et son énorme souplesse et rapidité de déploiement.

Pour donner une idée espace-temps, disons que j'ai commencé le VBA sous dès son apparition sous Excel 5 en 93, à cette époque je ne fesais qu'enregistrer des macro et je me contentais de détruire le superflu et d'arranger un peu.

Avec Excel 97, en 1997, avec l'apparation d"'un véritable Editeur Visual Basic et d'une aide conséquente, là, j'ai construit mes toutes premières boucles avec mes premières Variables non-déclarées et des Select de partout !

Puis j'ai eu accès à Internet vers 1998/9 et j'ai haluciné en découvrant les travaux des Laurent Longre, Frédérique Sigonneau, STéphane Royer et autres John Walkenbach, Chip Pearson et bien d'autres... Puis j'ai un peu participé au MPFE...

En 2002 j'ai fait mes premières apparitions sur XLD et j'ai découvert Magic _Ti, qui, quant à lui, m'a fait définitivement repousser pratiquement à l'infinie tous mes doutes quand à la puissance d'Excel lié à VBA !

Pour conclure, je pense qu'un site comme celui-ci est le meileur prof pour comprendre, apprendre, se remettre en question, comparer ses solutions, s'améliorer........

Enfin disons que David nous offre ce qu'il y a de mieux pour nous permettre nous tous de progresser dans notre passion !

Sacré long Post désolé pour ta tête lol

Bonne Nuit

@+Thierry
 
Re : VBA Ouvrir VBE (Application.VBE.VBProjects.VBE.MainWindow)

Bonjour

Mes amitiés a Roy Thinnes et son monde incrédule...

Pour ce me qui concerne

Premiers emois avec un TRS80 (Tandy)
puis un Alice (Thomson)
et enfin un MSX puis un ST (Atari)

Je vois que ton bagage VBA et ta culture informatique sont des plus imposants
et je mesure mieux le chemin qu'il me reste à parcourir...

Ce qui du coup "dérepose" ma pauvre tête...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Réponses
7
Affichages
511
  • Question Question
Microsoft 365 affichage userform
Réponses
4
Affichages
522
Réponses
6
Affichages
641
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
452
Retour