Eviter l'ouverture de VBE lors de la copie d'un module
5 réponses
Eric RENAUD
Bonjour,
Je colle du code VBA (depuis perso.xls) vers le module de la feuille active
du classeur actif.
Cela fonctionne très bien mais lorsque le programme a fini de copier le
code, il m'ouvre systématiquement l'éditeur VBE ce qui n'est pas mon
souhait.
Existe t'il une astuce pour éviter ce phénomène d'ouverture ?
D'avance merci
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
michdenis
Bonjour Éric,
Tu as essayé quelque chose dans le genre :
Copie le module d'un classeur à l'autre
'---------------------------------- Sub CopieCodeModule()
With Workbooks("Perso.xls").VBProject.VBComponents("Module1") .Export ("c:test.bas") End With With Workbooks(ThisWorkbook.Name).VBProject.VBComponents .Import "c:test.bas" End With
'Détruit le fichier intermédiaire Kill "C:test.bas" End Sub '----------------------------------
Salutations!
"Eric RENAUD" a écrit dans le message de news: Bonjour,
Je colle du code VBA (depuis perso.xls) vers le module de la feuille active du classeur actif. Cela fonctionne très bien mais lorsque le programme a fini de copier le code, il m'ouvre systématiquement l'éditeur VBE ce qui n'est pas mon souhait. Existe t'il une astuce pour éviter ce phénomène d'ouverture ? D'avance merci
Bonjour Éric,
Tu as essayé quelque chose dans le genre :
Copie le module d'un classeur à l'autre
'----------------------------------
Sub CopieCodeModule()
With Workbooks("Perso.xls").VBProject.VBComponents("Module1")
.Export ("c:test.bas")
End With
With Workbooks(ThisWorkbook.Name).VBProject.VBComponents
.Import "c:test.bas"
End With
'Détruit le fichier intermédiaire
Kill "C:test.bas"
End Sub
'----------------------------------
Salutations!
"Eric RENAUD" <erenaud@normandet.fr> a écrit dans le message de news:OsLIB0GVEHA.584@TK2MSFTNGP09.phx.gbl...
Bonjour,
Je colle du code VBA (depuis perso.xls) vers le module de la feuille active
du classeur actif.
Cela fonctionne très bien mais lorsque le programme a fini de copier le
code, il m'ouvre systématiquement l'éditeur VBE ce qui n'est pas mon
souhait.
Existe t'il une astuce pour éviter ce phénomène d'ouverture ?
D'avance merci
'---------------------------------- Sub CopieCodeModule()
With Workbooks("Perso.xls").VBProject.VBComponents("Module1") .Export ("c:test.bas") End With With Workbooks(ThisWorkbook.Name).VBProject.VBComponents .Import "c:test.bas" End With
'Détruit le fichier intermédiaire Kill "C:test.bas" End Sub '----------------------------------
Salutations!
"Eric RENAUD" a écrit dans le message de news: Bonjour,
Je colle du code VBA (depuis perso.xls) vers le module de la feuille active du classeur actif. Cela fonctionne très bien mais lorsque le programme a fini de copier le code, il m'ouvre systématiquement l'éditeur VBE ce qui n'est pas mon souhait. Existe t'il une astuce pour éviter ce phénomène d'ouverture ? D'avance merci
Eric RENAUD
Ton exemple crée un module standard mais dans mon cas, je veux ajouter le code au niveau Worksheet de la feuille active pour avoir un évenement sur SelectionChang Je copie donc le code ci-dessous dans la feuille active pour avoir l'évenement Private Sub WorkSheet_SelectionChange(ByVal Target As Range) Le code à insérer est stocké dans la variable S (pas de problème) Mon code : With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule ' nom de l'événement, type de module concerné ("Worksheet") 'n° ligne du début de la proc DebutCode = .CreateEventProc("SelectionChange", "WorkSheet") 'insérer le texte du code .InsertLines DebutCode + 1, S End With Tout marche parfaitement sauf que l'éditeur VBE s'ouvre à la fin de la copie (mais pas dan ton exemple car c'est un module standard)
"michdenis" a écrit dans le message de news: #
Bonjour Éric,
Tu as essayé quelque chose dans le genre :
Copie le module d'un classeur à l'autre
'---------------------------------- Sub CopieCodeModule()
With Workbooks("Perso.xls").VBProject.VBComponents("Module1") .Export ("c:test.bas") End With With Workbooks(ThisWorkbook.Name).VBProject.VBComponents .Import "c:test.bas" End With
'Détruit le fichier intermédiaire Kill "C:test.bas" End Sub '----------------------------------
Salutations!
"Eric RENAUD" a écrit dans le message de news:
Bonjour,
Je colle du code VBA (depuis perso.xls) vers le module de la feuille active
du classeur actif. Cela fonctionne très bien mais lorsque le programme a fini de copier le code, il m'ouvre systématiquement l'éditeur VBE ce qui n'est pas mon souhait. Existe t'il une astuce pour éviter ce phénomène d'ouverture ? D'avance merci
Ton exemple crée un module standard mais dans mon cas, je veux ajouter le
code au niveau Worksheet de la feuille active pour avoir un évenement sur
SelectionChang
Je copie donc le code ci-dessous dans la feuille active pour avoir
l'évenement Private Sub WorkSheet_SelectionChange(ByVal Target As Range)
Le code à insérer est stocké dans la variable S (pas de problème)
Mon code :
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
' nom de l'événement, type de module concerné ("Worksheet")
'n° ligne du début de la proc
DebutCode = .CreateEventProc("SelectionChange", "WorkSheet")
'insérer le texte du code
.InsertLines DebutCode + 1, S
End With
Tout marche parfaitement sauf que l'éditeur VBE s'ouvre à la fin de la copie
(mais pas dan ton exemple car c'est un module standard)
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news:
#sy4FfHVEHA.584@TK2MSFTNGP09.phx.gbl...
Bonjour Éric,
Tu as essayé quelque chose dans le genre :
Copie le module d'un classeur à l'autre
'----------------------------------
Sub CopieCodeModule()
With Workbooks("Perso.xls").VBProject.VBComponents("Module1")
.Export ("c:test.bas")
End With
With Workbooks(ThisWorkbook.Name).VBProject.VBComponents
.Import "c:test.bas"
End With
'Détruit le fichier intermédiaire
Kill "C:test.bas"
End Sub
'----------------------------------
Salutations!
"Eric RENAUD" <erenaud@normandet.fr> a écrit dans le message de
news:OsLIB0GVEHA.584@TK2MSFTNGP09.phx.gbl...
Bonjour,
Je colle du code VBA (depuis perso.xls) vers le module de la feuille
active
du classeur actif.
Cela fonctionne très bien mais lorsque le programme a fini de copier le
code, il m'ouvre systématiquement l'éditeur VBE ce qui n'est pas mon
souhait.
Existe t'il une astuce pour éviter ce phénomène d'ouverture ?
D'avance merci
Ton exemple crée un module standard mais dans mon cas, je veux ajouter le code au niveau Worksheet de la feuille active pour avoir un évenement sur SelectionChang Je copie donc le code ci-dessous dans la feuille active pour avoir l'évenement Private Sub WorkSheet_SelectionChange(ByVal Target As Range) Le code à insérer est stocké dans la variable S (pas de problème) Mon code : With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule ' nom de l'événement, type de module concerné ("Worksheet") 'n° ligne du début de la proc DebutCode = .CreateEventProc("SelectionChange", "WorkSheet") 'insérer le texte du code .InsertLines DebutCode + 1, S End With Tout marche parfaitement sauf que l'éditeur VBE s'ouvre à la fin de la copie (mais pas dan ton exemple car c'est un module standard)
"michdenis" a écrit dans le message de news: #
Bonjour Éric,
Tu as essayé quelque chose dans le genre :
Copie le module d'un classeur à l'autre
'---------------------------------- Sub CopieCodeModule()
With Workbooks("Perso.xls").VBProject.VBComponents("Module1") .Export ("c:test.bas") End With With Workbooks(ThisWorkbook.Name).VBProject.VBComponents .Import "c:test.bas" End With
'Détruit le fichier intermédiaire Kill "C:test.bas" End Sub '----------------------------------
Salutations!
"Eric RENAUD" a écrit dans le message de news:
Bonjour,
Je colle du code VBA (depuis perso.xls) vers le module de la feuille active
du classeur actif. Cela fonctionne très bien mais lorsque le programme a fini de copier le code, il m'ouvre systématiquement l'éditeur VBE ce qui n'est pas mon souhait. Existe t'il une astuce pour éviter ce phénomène d'ouverture ? D'avance merci
Alain CROS
Bonjour
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
Sub test() Dim S$, DebutCode& S = "MsgBox ""Bonjour""" LockWindowUpdate GetDesktopWindow With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule ' nom de l'événement, type de module concerné ("Worksheet") 'n° ligne du début de la proc DebutCode = .CreateEventProc("SelectionChange", "WorkSheet") 'insérer le texte du code .InsertLines DebutCode + 1, S End With Application.VBE.MainWindow.Visible = False LockWindowUpdate 0& End Sub
Alain CROS
Bonjour
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&)
Private Declare Function GetDesktopWindow& Lib "user32" ()
Sub test()
Dim S$, DebutCode&
S = "MsgBox ""Bonjour"""
LockWindowUpdate GetDesktopWindow
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
' nom de l'événement, type de module concerné ("Worksheet")
'n° ligne du début de la proc
DebutCode = .CreateEventProc("SelectionChange", "WorkSheet")
'insérer le texte du code
.InsertLines DebutCode + 1, S
End With
Application.VBE.MainWindow.Visible = False
LockWindowUpdate 0&
End Sub
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
Sub test() Dim S$, DebutCode& S = "MsgBox ""Bonjour""" LockWindowUpdate GetDesktopWindow With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule ' nom de l'événement, type de module concerné ("Worksheet") 'n° ligne du début de la proc DebutCode = .CreateEventProc("SelectionChange", "WorkSheet") 'insérer le texte du code .InsertLines DebutCode + 1, S End With Application.VBE.MainWindow.Visible = False LockWindowUpdate 0& End Sub
Alain CROS
michdenis
Bonjour Alain,
J'ai testé les API avec ceci : Une procédure qui ne fait qu'ajouter un " module standard " au projet. Le résultat est que ce module devient la fenêtre active à la fin de la procédure ... Est-ce que j'ai raté quelque chose ?
'---------------------------- Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
'---------------------------- Sub InsérerUnmodule()
"Alain CROS" a écrit dans le message de news: Bonjour
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
Sub test() Dim S$, DebutCode& S = "MsgBox ""Bonjour""" LockWindowUpdate GetDesktopWindow With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule ' nom de l'événement, type de module concerné ("Worksheet") 'n° ligne du début de la proc DebutCode = .CreateEventProc("SelectionChange", "WorkSheet") 'insérer le texte du code .InsertLines DebutCode + 1, S End With Application.VBE.MainWindow.Visible = False LockWindowUpdate 0& End Sub
Alain CROS
Bonjour Alain,
J'ai testé les API avec ceci : Une procédure qui ne fait qu'ajouter un " module standard " au projet. Le résultat est
que ce module devient la fenêtre active à la fin de la procédure ... Est-ce que j'ai raté quelque chose ?
'----------------------------
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&)
Private Declare Function GetDesktopWindow& Lib "user32" ()
'----------------------------
Sub InsérerUnmodule()
"Alain CROS" <Personne@ICI> a écrit dans le message de news:OtIVQlIVEHA.1164@tk2msftngp13.phx.gbl...
Bonjour
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&)
Private Declare Function GetDesktopWindow& Lib "user32" ()
Sub test()
Dim S$, DebutCode&
S = "MsgBox ""Bonjour"""
LockWindowUpdate GetDesktopWindow
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
' nom de l'événement, type de module concerné ("Worksheet")
'n° ligne du début de la proc
DebutCode = .CreateEventProc("SelectionChange", "WorkSheet")
'insérer le texte du code
.InsertLines DebutCode + 1, S
End With
Application.VBE.MainWindow.Visible = False
LockWindowUpdate 0&
End Sub
J'ai testé les API avec ceci : Une procédure qui ne fait qu'ajouter un " module standard " au projet. Le résultat est que ce module devient la fenêtre active à la fin de la procédure ... Est-ce que j'ai raté quelque chose ?
'---------------------------- Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
'---------------------------- Sub InsérerUnmodule()
"Alain CROS" a écrit dans le message de news: Bonjour
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
Sub test() Dim S$, DebutCode& S = "MsgBox ""Bonjour""" LockWindowUpdate GetDesktopWindow With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule ' nom de l'événement, type de module concerné ("Worksheet") 'n° ligne du début de la proc DebutCode = .CreateEventProc("SelectionChange", "WorkSheet") 'insérer le texte du code .InsertLines DebutCode + 1, S End With Application.VBE.MainWindow.Visible = False LockWindowUpdate 0& End Sub
Alain CROS
michdenis
Une solution trouvée sur le site de http://www.cpearson.com. Existe-t-il une autre façon de procéder ?
'------------------------- Sub AjouterUnModule()
Dim VBComp As Object Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(1) VBComp.Name = "Denis" Application.Visible = True
End Sub '-------------------------
Avec cette note explicative :
When you run this code from Excel while the VBE is open, you will be taken to the new module's code module, and the macro will terminate. When you run this code while the VBE is not open, your Excel application will be visible, but will not have focus. The statement returns focus back to the Excel application
Salutations!
"michdenis" a écrit dans le message de news:% Bonjour Alain,
J'ai testé les API avec ceci : Une procédure qui ne fait qu'ajouter un " module standard " au projet. Le résultat est que ce module devient la fenêtre active à la fin de la procédure ... Est-ce que j'ai raté quelque chose ?
'---------------------------- Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
'---------------------------- Sub InsérerUnmodule()
"Alain CROS" a écrit dans le message de news: Bonjour
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
Sub test() Dim S$, DebutCode& S = "MsgBox ""Bonjour""" LockWindowUpdate GetDesktopWindow With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule ' nom de l'événement, type de module concerné ("Worksheet") 'n° ligne du début de la proc DebutCode = .CreateEventProc("SelectionChange", "WorkSheet") 'insérer le texte du code .InsertLines DebutCode + 1, S End With Application.VBE.MainWindow.Visible = False LockWindowUpdate 0& End Sub
Alain CROS
Une solution trouvée sur le site de http://www.cpearson.com. Existe-t-il une autre façon de procéder ?
'-------------------------
Sub AjouterUnModule()
Dim VBComp As Object
Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(1)
VBComp.Name = "Denis"
Application.Visible = True
End Sub
'-------------------------
Avec cette note explicative :
When you run this code from Excel while the VBE is open, you will be taken to the new module's code module, and the
macro will terminate. When you run this code while the VBE is not open, your Excel application will be visible, but
will not have focus. The statement returns focus back to the Excel application
Salutations!
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news:%23YlbxOKVEHA.2972@TK2MSFTNGP11.phx.gbl...
Bonjour Alain,
J'ai testé les API avec ceci : Une procédure qui ne fait qu'ajouter un " module standard " au projet. Le résultat est
que ce module devient la fenêtre active à la fin de la procédure ... Est-ce que j'ai raté quelque chose ?
'----------------------------
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&)
Private Declare Function GetDesktopWindow& Lib "user32" ()
'----------------------------
Sub InsérerUnmodule()
"Alain CROS" <Personne@ICI> a écrit dans le message de news:OtIVQlIVEHA.1164@tk2msftngp13.phx.gbl...
Bonjour
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&)
Private Declare Function GetDesktopWindow& Lib "user32" ()
Sub test()
Dim S$, DebutCode&
S = "MsgBox ""Bonjour"""
LockWindowUpdate GetDesktopWindow
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
' nom de l'événement, type de module concerné ("Worksheet")
'n° ligne du début de la proc
DebutCode = .CreateEventProc("SelectionChange", "WorkSheet")
'insérer le texte du code
.InsertLines DebutCode + 1, S
End With
Application.VBE.MainWindow.Visible = False
LockWindowUpdate 0&
End Sub
Une solution trouvée sur le site de http://www.cpearson.com. Existe-t-il une autre façon de procéder ?
'------------------------- Sub AjouterUnModule()
Dim VBComp As Object Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(1) VBComp.Name = "Denis" Application.Visible = True
End Sub '-------------------------
Avec cette note explicative :
When you run this code from Excel while the VBE is open, you will be taken to the new module's code module, and the macro will terminate. When you run this code while the VBE is not open, your Excel application will be visible, but will not have focus. The statement returns focus back to the Excel application
Salutations!
"michdenis" a écrit dans le message de news:% Bonjour Alain,
J'ai testé les API avec ceci : Une procédure qui ne fait qu'ajouter un " module standard " au projet. Le résultat est que ce module devient la fenêtre active à la fin de la procédure ... Est-ce que j'ai raté quelque chose ?
'---------------------------- Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
'---------------------------- Sub InsérerUnmodule()
"Alain CROS" a écrit dans le message de news: Bonjour
Private Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&) Private Declare Function GetDesktopWindow& Lib "user32" ()
Sub test() Dim S$, DebutCode& S = "MsgBox ""Bonjour""" LockWindowUpdate GetDesktopWindow With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule ' nom de l'événement, type de module concerné ("Worksheet") 'n° ligne du début de la proc DebutCode = .CreateEventProc("SelectionChange", "WorkSheet") 'insérer le texte du code .InsertLines DebutCode + 1, S End With Application.VBE.MainWindow.Visible = False LockWindowUpdate 0& End Sub