J'ai deux workbooks WKB1 et WKB2 avec une seule worksheet=20
chacun.
J'ai d=E9fini un bouton dans une cellule de la worksheet de=20
WKB1.
Par ailleurs, j'ai =E9crit plusieurs macros associ=E9es =E0 WKB2=20
(Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple)=20
invoquer Macro1 de WKB2 pour travailler sur le contenu de=20
la worksheet de WKB1.
1. Est-ce possible ?
2. Comment r=E9aliser l'invocation ?
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
Frédéric Sigonneau
Bonsoir,
Bonjour,
J'ai deux workbooks WKB1 et WKB2 avec une seule worksheet chacun. J'ai défini un bouton dans une cellule de la worksheet de WKB1. Par ailleurs, j'ai écrit plusieurs macros associées à WKB2 (Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple) invoquer Macro1 de WKB2 pour travailler sur le contenu de la worksheet de WKB1.
1. Est-ce possible ?
Oui
2. Comment réaliser l'invocation ?
Regarde l'aide de la méthode Application.Run (il est possible d'appeler des macros avec des paramètres). Par exemple, le code du bouton de classeur1.xls pourrait être :
Private Sub CommandButton1_Click() Application.Run "Classeur2.xls!macro1" End Sub
Ça suppose que les deux classeurs soient ouverts.
Une autre méthode consiste à établir une référence à Classeur2.xls dans Classeur1.xls (OutilsRéférences dans l'éditeur Visual Basic, après avoir renommé le VBAProject de CLasseur2.xls). Ensuite, tu peux appeler ses macros dans Classeur1.xls sans Run ou autre méthode, et sans te préoccuper de savoir s'il est ouvert ou non (il l'est automatiquement par Excel à l'ouverture de Classeur1.xls). Le code du bouton de Classeur1.xls pourrait être dans ce cas :
Private Sub CommandButton1_Click() Macro1 End Sub
FS -- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://perso.wanadoo.fr/frederic.sigonneau Si votre question sur Excel est urgente, évitez ma bal !
Merci d'avance.
Gégé
Bonsoir,
Bonjour,
J'ai deux workbooks WKB1 et WKB2 avec une seule worksheet
chacun.
J'ai défini un bouton dans une cellule de la worksheet de
WKB1.
Par ailleurs, j'ai écrit plusieurs macros associées à WKB2
(Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple)
invoquer Macro1 de WKB2 pour travailler sur le contenu de
la worksheet de WKB1.
1. Est-ce possible ?
Oui
2. Comment réaliser l'invocation ?
Regarde l'aide de la méthode Application.Run (il est possible d'appeler des
macros avec des paramètres). Par exemple, le code du bouton de classeur1.xls
pourrait être :
Private Sub CommandButton1_Click()
Application.Run "Classeur2.xls!macro1"
End Sub
Ça suppose que les deux classeurs soient ouverts.
Une autre méthode consiste à établir une référence à Classeur2.xls dans
Classeur1.xls (OutilsRéférences dans l'éditeur Visual Basic, après avoir
renommé le VBAProject de CLasseur2.xls). Ensuite, tu peux appeler ses macros
dans Classeur1.xls sans Run ou autre méthode, et sans te préoccuper de savoir
s'il est ouvert ou non (il l'est automatiquement par Excel à l'ouverture de
Classeur1.xls). Le code du bouton de Classeur1.xls pourrait être dans ce cas :
Private Sub CommandButton1_Click()
Macro1
End Sub
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai deux workbooks WKB1 et WKB2 avec une seule worksheet chacun. J'ai défini un bouton dans une cellule de la worksheet de WKB1. Par ailleurs, j'ai écrit plusieurs macros associées à WKB2 (Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple) invoquer Macro1 de WKB2 pour travailler sur le contenu de la worksheet de WKB1.
1. Est-ce possible ?
Oui
2. Comment réaliser l'invocation ?
Regarde l'aide de la méthode Application.Run (il est possible d'appeler des macros avec des paramètres). Par exemple, le code du bouton de classeur1.xls pourrait être :
Private Sub CommandButton1_Click() Application.Run "Classeur2.xls!macro1" End Sub
Ça suppose que les deux classeurs soient ouverts.
Une autre méthode consiste à établir une référence à Classeur2.xls dans Classeur1.xls (OutilsRéférences dans l'éditeur Visual Basic, après avoir renommé le VBAProject de CLasseur2.xls). Ensuite, tu peux appeler ses macros dans Classeur1.xls sans Run ou autre méthode, et sans te préoccuper de savoir s'il est ouvert ou non (il l'est automatiquement par Excel à l'ouverture de Classeur1.xls). Le code du bouton de Classeur1.xls pourrait être dans ce cas :
Private Sub CommandButton1_Click() Macro1 End Sub
FS -- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://perso.wanadoo.fr/frederic.sigonneau Si votre question sur Excel est urgente, évitez ma bal !
Merci d'avance.
Gégé
Jean-François Aubert
Salut Gégé, Je suppose que tu parles d'un bouton de la barre Boîte à outils Contrôle, car un bouton de la barre Formulaire ne pose pas de problème pour lui affecter une macro d'un autre classeur ouvert.
Le plus simple doit être de mettre tes macros dans le Perso.xls.
Mais pour le fun, j'ai pondu cette "horreur" qui ne manquera pas de faire hurler les pros.
Dans le classeur WKB1.xls - un CommandButton1 et coller dans le code du bouton: '**************************** Private Sub CommandButton1_Click() Dim wk2, tbl(), i Set wk2 = Workbooks("WKB2.xls")
' module1 est le nom du module contenant la macro2 ' du classeur WKB2.xls With wk2.VBProject.VBComponents("module1").CodeModule ReDim tbl(.CountOfLines - 1) For i = 1 To .CountOfLines tbl(i - 1) = .Lines(i, 1) Next End With
With ThisWorkbook.VBProject. _ VBComponents("moduleTemp").CodeModule
.DeleteLines 1, .CountOfLines For i = 1 To UBound(tbl) .InsertLines i, tbl(i) Next
With ThisWorkbook.VBProject. _ VBComponents("moduleRelais").CodeModule
' macro2 est la macro du classeur WKB2.xls .InsertLines 2, "macro2" procRelais .DeleteLines 2 End With
.DeleteLines 1, .CountOfLines End With Set wk2 = Nothing End Sub '********************
- créer un module nommé: moduleRelais
- vider complètement ce module et lui coller en ligne 1 et 2 (c'est important):
Sub procRelais()' ligne 1 End Sub' ligne 2
- créer un module nommé: moduleTemp
- le classeur WKB2.xls doit être ouvert. - adapter le nom: < "module1" > dans la proc du CommandButton1 - adapter le: < "macro2 " > dans la proc du CommandButton1
Et voilà, ça doit fonctionner.
-- Amicalement
Jean-François Aubert {Vaudois de la Côte Lémanique}
"Gégé" a écrit dans le message de news:4d0b01c3e4f4$7fa3cbe0$ Bonjour,
J'ai deux workbooks WKB1 et WKB2 avec une seule worksheet chacun. J'ai défini un bouton dans une cellule de la worksheet de WKB1. Par ailleurs, j'ai écrit plusieurs macros associées à WKB2 (Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple) invoquer Macro1 de WKB2 pour travailler sur le contenu de la worksheet de WKB1.
1. Est-ce possible ? 2. Comment réaliser l'invocation ?
Merci d'avance.
Gégé
Salut Gégé,
Je suppose que tu parles d'un bouton de la barre Boîte à outils Contrôle,
car un bouton de la barre Formulaire ne pose pas de problème pour
lui affecter une macro d'un autre classeur ouvert.
Le plus simple doit être de mettre tes macros dans le Perso.xls.
Mais pour le fun, j'ai pondu cette "horreur" qui ne manquera pas
de faire hurler les pros.
Dans le classeur WKB1.xls
- un CommandButton1 et coller dans le code du bouton:
'****************************
Private Sub CommandButton1_Click()
Dim wk2, tbl(), i
Set wk2 = Workbooks("WKB2.xls")
' module1 est le nom du module contenant la macro2
' du classeur WKB2.xls
With wk2.VBProject.VBComponents("module1").CodeModule
ReDim tbl(.CountOfLines - 1)
For i = 1 To .CountOfLines
tbl(i - 1) = .Lines(i, 1)
Next
End With
With ThisWorkbook.VBProject. _
VBComponents("moduleTemp").CodeModule
.DeleteLines 1, .CountOfLines
For i = 1 To UBound(tbl)
.InsertLines i, tbl(i)
Next
With ThisWorkbook.VBProject. _
VBComponents("moduleRelais").CodeModule
' macro2 est la macro du classeur WKB2.xls
.InsertLines 2, "macro2"
procRelais
.DeleteLines 2
End With
.DeleteLines 1, .CountOfLines
End With
Set wk2 = Nothing
End Sub
'********************
- créer un module nommé: moduleRelais
- vider complètement ce module et
lui coller en ligne 1 et 2 (c'est important):
Sub procRelais()' ligne 1
End Sub' ligne 2
- créer un module nommé: moduleTemp
- le classeur WKB2.xls doit être ouvert.
- adapter le nom: < "module1" > dans la proc du CommandButton1
- adapter le: < "macro2 " > dans la proc du CommandButton1
Et voilà, ça doit fonctionner.
--
Amicalement
Jean-François Aubert
{Vaudois de la Côte Lémanique}
"Gégé" <anonymous@discussions.microsoft.com> a écrit dans le message de
news:4d0b01c3e4f4$7fa3cbe0$a101280a@phx.gbl...
Bonjour,
J'ai deux workbooks WKB1 et WKB2 avec une seule worksheet
chacun.
J'ai défini un bouton dans une cellule de la worksheet de
WKB1.
Par ailleurs, j'ai écrit plusieurs macros associées à WKB2
(Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple)
invoquer Macro1 de WKB2 pour travailler sur le contenu de
la worksheet de WKB1.
1. Est-ce possible ?
2. Comment réaliser l'invocation ?
Salut Gégé, Je suppose que tu parles d'un bouton de la barre Boîte à outils Contrôle, car un bouton de la barre Formulaire ne pose pas de problème pour lui affecter une macro d'un autre classeur ouvert.
Le plus simple doit être de mettre tes macros dans le Perso.xls.
Mais pour le fun, j'ai pondu cette "horreur" qui ne manquera pas de faire hurler les pros.
Dans le classeur WKB1.xls - un CommandButton1 et coller dans le code du bouton: '**************************** Private Sub CommandButton1_Click() Dim wk2, tbl(), i Set wk2 = Workbooks("WKB2.xls")
' module1 est le nom du module contenant la macro2 ' du classeur WKB2.xls With wk2.VBProject.VBComponents("module1").CodeModule ReDim tbl(.CountOfLines - 1) For i = 1 To .CountOfLines tbl(i - 1) = .Lines(i, 1) Next End With
With ThisWorkbook.VBProject. _ VBComponents("moduleTemp").CodeModule
.DeleteLines 1, .CountOfLines For i = 1 To UBound(tbl) .InsertLines i, tbl(i) Next
With ThisWorkbook.VBProject. _ VBComponents("moduleRelais").CodeModule
' macro2 est la macro du classeur WKB2.xls .InsertLines 2, "macro2" procRelais .DeleteLines 2 End With
.DeleteLines 1, .CountOfLines End With Set wk2 = Nothing End Sub '********************
- créer un module nommé: moduleRelais
- vider complètement ce module et lui coller en ligne 1 et 2 (c'est important):
Sub procRelais()' ligne 1 End Sub' ligne 2
- créer un module nommé: moduleTemp
- le classeur WKB2.xls doit être ouvert. - adapter le nom: < "module1" > dans la proc du CommandButton1 - adapter le: < "macro2 " > dans la proc du CommandButton1
Et voilà, ça doit fonctionner.
-- Amicalement
Jean-François Aubert {Vaudois de la Côte Lémanique}
"Gégé" a écrit dans le message de news:4d0b01c3e4f4$7fa3cbe0$ Bonjour,
J'ai deux workbooks WKB1 et WKB2 avec une seule worksheet chacun. J'ai défini un bouton dans une cellule de la worksheet de WKB1. Par ailleurs, j'ai écrit plusieurs macros associées à WKB2 (Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple) invoquer Macro1 de WKB2 pour travailler sur le contenu de la worksheet de WKB1.
1. Est-ce possible ? 2. Comment réaliser l'invocation ?
Merci d'avance.
Gégé
Gégé
Merci à tous ceux qui m'ont répondu. En effet l'utilisation de Perso.xls est de loin la méthod ela plus simple, et celle que j'ai adoptée. Merci encore
-----Message d'origine----- Bonsoir,
Bonjour,
J'ai deux workbooks WKB1 et WKB2 avec une seule worksheet
chacun. J'ai défini un bouton dans une cellule de la worksheet de
WKB1. Par ailleurs, j'ai écrit plusieurs macros associées à WKB2
(Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple) invoquer Macro1 de WKB2 pour travailler sur le contenu de
la worksheet de WKB1.
1. Est-ce possible ?
Oui
2. Comment réaliser l'invocation ?
Regarde l'aide de la méthode Application.Run (il est possible d'appeler des
macros avec des paramètres). Par exemple, le code du bouton de classeur1.xls
pourrait être :
Private Sub CommandButton1_Click() Application.Run "Classeur2.xls!macro1" End Sub
Ça suppose que les deux classeurs soient ouverts.
Une autre méthode consiste à établir une référence à Classeur2.xls dans
Classeur1.xls (OutilsRéférences dans l'éditeur Visual Basic, après avoir
renommé le VBAProject de CLasseur2.xls). Ensuite, tu peux appeler ses macros
dans Classeur1.xls sans Run ou autre méthode, et sans te préoccuper de savoir
s'il est ouvert ou non (il l'est automatiquement par Excel à l'ouverture de
Classeur1.xls). Le code du bouton de Classeur1.xls pourrait être dans ce cas :
Private Sub CommandButton1_Click() Macro1 End Sub
FS -- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://perso.wanadoo.fr/frederic.sigonneau Si votre question sur Excel est urgente, évitez ma bal !
Merci d'avance.
Gégé
.
Merci à tous ceux qui m'ont répondu. En effet
l'utilisation de Perso.xls est de loin la méthod ela plus
simple, et celle que j'ai adoptée. Merci encore
-----Message d'origine-----
Bonsoir,
Bonjour,
J'ai deux workbooks WKB1 et WKB2 avec une seule
worksheet
chacun.
J'ai défini un bouton dans une cellule de la worksheet
de
WKB1.
Par ailleurs, j'ai écrit plusieurs macros associées à
WKB2
(Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple)
invoquer Macro1 de WKB2 pour travailler sur le contenu
de
la worksheet de WKB1.
1. Est-ce possible ?
Oui
2. Comment réaliser l'invocation ?
Regarde l'aide de la méthode Application.Run (il est
possible d'appeler des
macros avec des paramètres). Par exemple, le code du
bouton de classeur1.xls
pourrait être :
Private Sub CommandButton1_Click()
Application.Run "Classeur2.xls!macro1"
End Sub
Ça suppose que les deux classeurs soient ouverts.
Une autre méthode consiste à établir une référence à
Classeur2.xls dans
Classeur1.xls (OutilsRéférences dans l'éditeur Visual
Basic, après avoir
renommé le VBAProject de CLasseur2.xls). Ensuite, tu peux
appeler ses macros
dans Classeur1.xls sans Run ou autre méthode, et sans te
préoccuper de savoir
s'il est ouvert ou non (il l'est automatiquement par
Excel à l'ouverture de
Classeur1.xls). Le code du bouton de Classeur1.xls
pourrait être dans ce cas :
Private Sub CommandButton1_Click()
Macro1
End Sub
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Merci à tous ceux qui m'ont répondu. En effet l'utilisation de Perso.xls est de loin la méthod ela plus simple, et celle que j'ai adoptée. Merci encore
-----Message d'origine----- Bonsoir,
Bonjour,
J'ai deux workbooks WKB1 et WKB2 avec une seule worksheet
chacun. J'ai défini un bouton dans une cellule de la worksheet de
WKB1. Par ailleurs, j'ai écrit plusieurs macros associées à WKB2
(Macro1, Macro2,...).
En pressant le bouton sur je voudrais (par exemple) invoquer Macro1 de WKB2 pour travailler sur le contenu de
la worksheet de WKB1.
1. Est-ce possible ?
Oui
2. Comment réaliser l'invocation ?
Regarde l'aide de la méthode Application.Run (il est possible d'appeler des
macros avec des paramètres). Par exemple, le code du bouton de classeur1.xls
pourrait être :
Private Sub CommandButton1_Click() Application.Run "Classeur2.xls!macro1" End Sub
Ça suppose que les deux classeurs soient ouverts.
Une autre méthode consiste à établir une référence à Classeur2.xls dans
Classeur1.xls (OutilsRéférences dans l'éditeur Visual Basic, après avoir
renommé le VBAProject de CLasseur2.xls). Ensuite, tu peux appeler ses macros
dans Classeur1.xls sans Run ou autre méthode, et sans te préoccuper de savoir
s'il est ouvert ou non (il l'est automatiquement par Excel à l'ouverture de
Classeur1.xls). Le code du bouton de Classeur1.xls pourrait être dans ce cas :
Private Sub CommandButton1_Click() Macro1 End Sub
FS -- Frédéric Sigonneau [MVP Excel - né un sans-culottide] Gestions de temps, VBA pour Excel : http://perso.wanadoo.fr/frederic.sigonneau Si votre question sur Excel est urgente, évitez ma bal !