Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment appeler une macro d 'un autre dossier

3 réponses
Avatar
Gégé
Bonjour,

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 ?

Merci d'avance.

G=E9g=E9

3 réponses

Avatar
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é


Avatar
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é
Avatar
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é


.