Simuler un clic sur un bouton d'un autre classeur

PlugNplay

XLDnaute Nouveau
Bonjour tout le monde !

Le titre du message parle de lui-même :)
J'ai deux classeurs Excel, chacun avec du code VBA. Le classeur2 a un bouton VBA, sur une feuille, permettant de lancer une série de macros. J'aimerais pouvoir simuler, dans le code de mon classeur1, un clic sur ce bouton.

J'ai essayé de changer le
VB:
Private Sub CommandButton4_Click()
en
VB:
Public Sub CommandButton4_Click()
mais la "procédure" CommandButton4_Click reste inaccessible (en tout cas elle n'est pas reconnue) par mon classeur1.

J'ai également essayé de faire comme ça :
VB:
'CODE DU CLASSEUR2 :

Private Sub CommandButton4_Click()
    Amorcer
End Sub

Public Sub Amorcer()
'Les macros 1 à 3 sont définies dans le classeur2.
     Macro1
    Macro2
    Macro3
End Sub
VB:
'CODE DU CLASSEUR1 :

Sub AutreBtn()
    Classeur2.Amorcer
End Sub
mais ça ne fonctionne pas non plus.

Avez-vous une idée sur la façon dont je peux procéder ?


Merci d'avance

Plug&Play
 

PlugNplay

XLDnaute Nouveau
Re : Simuler un clic sur un bouton d'un autre classeur

Merci, mais cela ne fonctionne pas :(

Je n'ai pas précisé tout à l'heure que dans mon code de AutreBtn, je déclare mon classeur2 en tant que Workbook, je ne sais pas si c'est important. Enfin, dans l'instruction Run (que je ne connaissais pas), j'ai essayé de mettre le nom du classeur, avec ou sans son chemin d'accès, et aussi de mettre directement son nom d'objet (Autre), mais rien ne marche.

VB:
Sub AutreBtn()
    Set Actif = ThisWorkbook
    Set Autre = Workbooks.Open(ThisWorkbook.Path & "/Classeur2.xls")
    ...
    Run "Classeur2!Amorcer"
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : Simuler un clic sur un bouton d'un autre classeur

Peut être alors
VB:
Run "Classeur2.xls!Amorcer"
Je vais replonger dans l'aide de Run
Oui un exemple est donné avec l'extention de fichier précisée
À+
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Simuler un clic sur un bouton d'un autre classeur

Déplacer la sub Amorcer vers un module ordinaire, évidemment.
P.S. Il ne suffit de la déclarer Public si elle est dans un Excel Object et je ne crois pas avoir jamais réussi non plus à préciser le qualificateur de classe d'un tel objet pour un Run !
 
Dernière édition:

PlugNplay

XLDnaute Nouveau
Re : Simuler un clic sur un bouton d'un autre classeur

C'est vrai que je n'y avais pas pensé, il était dans une feuille.
Mais maintenant je l'ai déplacé et ça ne marche toujours pas
Je ne suis pas sûre que ce soit possible ce que je veux faire :confused:
 

Dranreb

XLDnaute Barbatruc
Re : Simuler un clic sur un bouton d'un autre classeur

Et en essayant d'enregistrer une macro, et pendant que ça enregistre, demander l'exécution de cette fameuse Amorcer par menu outil macros macro ?
Sinon joignez, enfin, deux fichiers qui reproduisent le problème.
 

PlugNplay

XLDnaute Nouveau
Re : Simuler un clic sur un bouton d'un autre classeur

Je viens d'essayer pour vérifier mais c'est bien ce qu'il me semblait : Excel ignore complètement le clic sur le bouton quand il enregistre la macro :
VB:
Sub Macro2()
'
' Macro2 Macro
' Macro enregistrée le 04/04/2011 par ***
'

'
    Range("F17").Select
   Windows("Classeur2.xls").Activate
   Range("E9").Select
   ActiveCell.FormulaR1C1 = "3"
   Range("E10").Select
   'A ce moment j'ai cliqué sur le bouton du classeur2...
    Windows("Classeur1.xls").Activate
   Range("F22").Select
End Sub

Je pense que je vais donc opter pour la dernière solution et essayer de rassembler tout ça dans un seul classeur. Avec un peu de chance, ça devrait peut-être même me permettre de réduire le temps d'exécution :)

Merci beaucoup pour le coup de main !
 

Dranreb

XLDnaute Barbatruc
Re : Simuler un clic sur un bouton d'un autre classeur

Je vous avais dit d'éxécuter votre "Amorcer" via le menu macro, pas d'exécuter le code du bouton en cliquant dessus, ça d'accord ça ne peut pas engendrez un Run puisque ça n'exécute aucune procédure d'un module standard.
À demain.
Bonne soirée.
 

Pierrot93

XLDnaute Barbatruc
Re : Simuler un clic sur un bouton d'un autre classeur

Bonjour,

ceci semble fonctionner chez moi, les 2 classeurs étant ouverts dans la même instance...

Code:
Run "classeur2.xls!Feuil1.CommandButton1_Click"

bonne fin d'après midi
@+
 

PlugNplay

XLDnaute Nouveau
Re : Simuler un clic sur un bouton d'un autre classeur

D'accord Dranreb, je n'avais pas compris. Je viens d'essayer, mais depuis un autre ordinateur et sur des classeurs exemples, et ça semble fonctionner. La macro enregistrée utilise bien l'instruction
VB:
Application.Run "Classeur2.xls!Amorcer"

Et merci à Pierrot93 aussi, qui vient de m'éclairer : je n'avais pas pensé à inclure la feuille dans l'instruction. Du coup j'ai compris :
  • si on veut exécuter quelque chose comme le CommandButton1_Click, il faut préciser la feuille puisque la procédure est privée et ne se trouve pas dans un module
    VB:
    Application.Run "Classeur2.xls!Feuil2.CommandButton4_Click"
  • par contre le nom de la procédure suffit si je souhaite par exemple exécuter uniquement Macro1 ou Amorcer
    VB:
    Application.Run "Classeur2.xls!Macro1"

Ca n'avait pas marché chez moi à cause du véritable nom de mon Classeur2, qui comporte des espaces. Apparemment, l'instruction Run n'apprécie pas :)


Merci beaucoup à tout le monde,

Plug&Play
 

Pierrot93

XLDnaute Barbatruc
Re : Simuler un clic sur un bouton d'un autre classeur

Bonjour,

Ca n'avait pas marché chez moi à cause du véritable nom de mon Classeur2, qui comporte des espaces. Apparemment, l'instruction Run n'apprécie pas
désolé, avais zappé, modifie ainsi :
Code:
Run "'classeur 2.xls'!Feuil1.CommandButton1_Click"

bonne journée
@+
 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 613
Membres
103 607
dernier inscrit
lolo1970