Macro pour accéder à VBE ?

  • Initiateur de la discussion Initiateur de la discussion Blandine
  • Date de début Date de début

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 !

B

Blandine

Guest
Salut à tous

Quel code de macro permet de lancer Visual Basic d'Excel
et de pointer sur le module1 ?

MERCI...
Blandine
 
Avec cette procédure tu peux accéder directement au module indiqué en activant sa fenêtre, sans passer par les SendKeys

Sub AccesModule()
Dim VBComps As VBComponents
Set VBComps = ThisWorkbook.VBProject.VBComponents
VBComps("Module2").Activate
End Sub

Pour lister tous les modules de code du fichier :

Dim VBComps As VBComponents
Dim Comp As VBComponent
Set VBComps = ThisWorkbook.VBProject.VBComponents
For Each Comp In VBComps
'on ne liste que les modules de code standard
If Comp.Type = vbext_ct_StdModule Then
'initialise par exemple un listbox pour lister les modules présents
ListBox1.AddItem Comp.Name
End If
Next Comp
 
MERCI à vous 3 et surtout Ti, ces 2 procédures sont superbes !

2 questions se posent maintenant :

1 - Avec ce dernier exemple, j'ai essayé d'ouvrir le code d'un UserForm existe-t-il un moyen pour voir directement le code sans passer par l'affichage de l'objet ?

2 - Je fais un prog. qui me permet de mettre à jour un autre prog. par l'intermédaire de remplacement de Userform :
Les actions pour remplacer un UserForm existant sont :

Set MiseAjour = "UserForm1"

.REMOVE.....VBComponents("MiseAjour ")
.IMPORT......Chemin & "\" & MiseAjour & ".frm"

2a - Si j'ouvre en premier le fichier de mise à jour puis j'ouvre le fichier à mettre à jour et je lance la procédure, tout ce passe bien

2b -Tandis que je souhaite ouvrir le fichier à mettre à jour, j'ai programmé que si il existait un fichier de mise à jour, l'ouvrir et exécuter la procédure...
Et bien dans ce dernier cas il sort une erreur :

Erreur au cours du chargement, reportez-vous à UserForm1.log
pour plus de détail.
...et dans ce fichier .log il est dit :
Le nom UserForm de la feuille est déjà utilisé ; impossible de charger cette feuille.

et en effet dans le cas 2b, l'action .REMOVE du UserForm1 ne s'est pas effectué!

MERCI à ceux qui connaissent...
BLandine
 
Pour répondre à ta question 1, voici ma procédure modifiée :

Sub AccesModule2(Module As String)
Dim VBComps As VBComponents
Set VBComps = ThisWorkbook.VBProject.VBComponents
VBComps(Module).CodeModule.CodePane.Show
End Sub

Sub AppelModule3()
AccesModule2 "Module3"
End Sub

Sub AppelForm()
AccesModule2 "UserForm1"
End Sub

Pour ta question 2, difficile de répondre comme ça, il faudrait voir avec un exemple réel, donc si tu peux joindre un fichier...
 
Bon, ben voilà, en fait il s'agit probablement d'un bug gênant d'Excel, qui garde en mémoire le module qui vient d'être supprimé (j'ai déjà eu à batailler ferme contre le même problème en utilisant EnvelopeVisible). Pour contourner le problème, je renomme le module avant de le supprimer et de l'importer depuis le fichier mis à jour, comme ça tout se passe bien.
Ci joint le fichier corrigé
 

Pièces jointes

Superbe Ti,

MERCI pour t'être penché sur ce programme et c'est très sympa d'avoir modifié du code ailleurs et les différents commentaires.

J'ai testé avec succès les 2 fichier OLD et MAJ

Mais appliqué sur un autre fichier, lors du Remplacement d'un module le fait de le renomer...temp je me trouve avec 2 modules portant des noms différents VarGlobal et le fameux VarGlobaltemp
et bien naturellement excel plante puisqu'il trouve des noms ambigus puisque leurs contenus sont quasiemment les mêmes...

Vois-tu quelle modif apportées afin d'éliminer à coup sûr le module ainsi renommer ?

MERCI encore merci...
Blandine
 
De plus de mon soucis actuel, j'en ai un autre :

Quel modification du code pour remplacer un
module dans un VBAProject protéger par MOT DE PASSE ?

J'ai essayé en vain le code :

Workbooks(Fichier_OLD).VBProject.Unprotect Password:="TEST"


MERCI...
BLandine
 
bonjour

il y a moyen tordu de le faire, vous pourrez trouver un exemple je pense chez fréd sigonneau

je pense avoir mis une des premières versions de cette bidouille également sur mon site il y a fort longtemps



bye
stephane
 
Il doit certainement s'agir de ce code
'=================================================
'Laurent Longre, mpfe
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function GetForegroundWindow Lib "User32" () As Long

Private Declare Function SetForegroundWindow Lib "User32" _
(ByVal hWnd As Long) As Long

Function Déprotège(Classeur As String, MdP As String) As Boolean

Dim XLhWnd As Long, VBEhWnd As Long, CurhWnd As Long
Dim Wbk As Workbook

On Error Resume Next
Set Wbk = Workbooks(Dir$(Classeur))
On Error GoTo Fin
If Not Wbk Is Nothing Then
If Wbk.FullName <> Classeur Then Exit Function
If Not Wbk.Saved Then Wbk.Save
Else: Application.ScreenUpdating = False
End If

CurhWnd = GetForegroundWindow
XLhWnd = FindWindowA(vbNullString, Application.Caption)

With Application.VBE
VBEhWnd = FindWindowA(vbNullString, .MainWindow.Caption)
If CurhWnd = XLhWnd Then SetForegroundWindow VBEhWnd
.CommandBars.FindControl(ID:=2557).Execute
' NE PAS EFFACER, même si le classeur est déjà ouvert !!!!!!
Workbooks.Open Classeur
If ActiveWorkbook.VBProject.Protection = vbext_pp_locked Then
SendKeys "~" & MdP & "~", True
.ActiveCodePane.Window.Close
End If
End With

SetForegroundWindow CurhWnd
Déprotège = True
Exit Function

Fin:
End Function

Sub test()

' Déprotection du projet VBA C:\Temp\Test.xls (mot de passe "Zaza"),
' Ajout d'un module standard dans ce projet, puis rétablissement
' de la protection

Const Classeur = "C:\Temp\Test.xls"
If Not Déprotège(Classeur, "zaza") Then
MsgBox "Erreur"
Else
MsgBox "Projet VBA déprotégé."
With Workbooks(Dir$(Classeur))
.VBProject.VBComponents.Add vbext_ct_StdModule
.Close True
End With
Workbooks.Open Classeur
MsgBox "Projet reprotégé, ajout d'un module standard."
End If

End Sub

'=================================================

'Sub essai()
'Fichier = Workbooks("Classeur3.xls").FullName
'MsgBox Fichier
'End Sub
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Réponses
7
Affichages
370
Réponses
6
Affichages
430
Réponses
4
Affichages
283
Réponses
4
Affichages
375
Réponses
20
Affichages
309
  • Question Question
Microsoft 365 macro TCD
Réponses
4
Affichages
272
Retour