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

macro sur bouton de commande

15 réponses
Avatar
grodep
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le meme,
et lorsque je clike sur celui ci , j'ai un message d'erreur correspondant a
la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc de
boulot..
Merci d'avance pour vos suggestions

10 réponses

1 2
Avatar
Youky
Bonsoir,
En premier lieu, mettre la propriété du bouton en question....
TakeFocusOnClickúlse 'au lieu de true et ca roule...
Youky

"grodep" a écrit dans le message de news:
edJ$
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le meme,
et lorsque je clike sur celui ci , j'ai un message d'erreur correspondant
a la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc de
boulot..
Merci d'avance pour vos suggestions



Avatar
grodep
ok je vais checker ça. Mais si c'est sur false, la macro ne devrait pas du
tout se déclencher, si ?

"Youky" a écrit dans le message de news:
%
Bonsoir,
En premier lieu, mettre la propriété du bouton en question....
TakeFocusOnClickúlse 'au lieu de true et ca roule...
Youky

"grodep" a écrit dans le message de news:
edJ$
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le
meme, et lorsque je clike sur celui ci , j'ai un message d'erreur
correspondant a la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc
de boulot..
Merci d'avance pour vos suggestions







Avatar
MichDenis
Tu mets ton code dans un module standard
(dans la fenêtre de l'éditeur de code : Insertion / module)

à titre d'exemple :
'----------------------
Sub test()
Sheets(Array("Feuil1", "Feuil2", "feuil3")).Select
Range("A1").Select
Selection = ""
End Sub
'----------------------

Et dans la procédure de ton bouton de commande du module feuille, tu appelles
la macro "test"
'----------------------
Private Sub CommandButton1_Click()
Module1.test
End Sub
.'----------------------


"grodep" a écrit dans le message de news:
edJ$
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le meme,
et lorsque je clike sur celui ci , j'ai un message d'erreur correspondant a
la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc de
boulot..
Merci d'avance pour vos suggestions
Avatar
grodep
merci beaucoup, cette solution a parfaitement fonctionné.! Pour mon
information personnelle, si quelqu'un pouvait m'expliquer pourquoi celà
fonctionne de cette maniere alors que la simple recopie du code ne
fonctionnait pas, j'en serai ravi. simple question de curiosité
personnellle..
"MichDenis" a écrit dans le message de news:
eb$
Tu mets ton code dans un module standard
(dans la fenêtre de l'éditeur de code : Insertion / module)

à titre d'exemple :
'----------------------
Sub test()
Sheets(Array("Feuil1", "Feuil2", "feuil3")).Select
Range("A1").Select
Selection = ""
End Sub
'----------------------

Et dans la procédure de ton bouton de commande du module feuille, tu
appelles
la macro "test"
'----------------------
Private Sub CommandButton1_Click()
Module1.test
End Sub
.'----------------------


"grodep" a écrit dans le message de news:
edJ$
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le meme,
et lorsque je clike sur celui ci , j'ai un message d'erreur correspondant
a
la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc de
boulot..
Merci d'avance pour vos suggestions





Avatar
MichDenis
Quand tu fais fasse à une array de feuille comme ceci :
Sheets(Array("Feuil1", "Feuil2", "feuil3")).Select

Tu dois t'assurer si tu places le code directement dans le module
feuille, que la première feuille nommée dans l'array soit la feuille
où est placé de ton bouton de commande qu'il émane de la boîte
à outils formulaire ou contrôle.

La raison pour cela, c'est que pour sélectionner une cellule de
la feuille où est ton bouton de commande, c'est cette feuille qui
soit être la feuille active quand toutes les feullles sont sélectionnées
et c'est exactement ce qui se passe si tu prends le soin de nommer
cette feuille en premièr dans l'array. Il faut avoir de la suite dans les idées
;-))

Quand le code est dans un module "Standard" la cellule A1 est sensé
appartenir à la feuille active quelque soit cette dernière.

Même quand le code est dans un module feuille, et que tu appelles la
macro par le menu, Il n'y a pas de dichotomie entre la feuille sélectionnée,
et celle où est situé le bouton. Excel peut prendre celle qui lui convient car
elles sont toutes sélectionnées.






"grodep" a écrit dans le message de news:
eMMQ%
merci beaucoup, cette solution a parfaitement fonctionné.! Pour mon
information personnelle, si quelqu'un pouvait m'expliquer pourquoi celà
fonctionne de cette maniere alors que la simple recopie du code ne
fonctionnait pas, j'en serai ravi. simple question de curiosité
personnellle..
"MichDenis" a écrit dans le message de news:
eb$
Tu mets ton code dans un module standard
(dans la fenêtre de l'éditeur de code : Insertion / module)

à titre d'exemple :
'----------------------
Sub test()
Sheets(Array("Feuil1", "Feuil2", "feuil3")).Select
Range("A1").Select
Selection = ""
End Sub
'----------------------

Et dans la procédure de ton bouton de commande du module feuille, tu
appelles
la macro "test"
'----------------------
Private Sub CommandButton1_Click()
Module1.test
End Sub
.'----------------------


"grodep" a écrit dans le message de news:
edJ$
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le meme,
et lorsque je clike sur celui ci , j'ai un message d'erreur correspondant
a
la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc de
boulot..
Merci d'avance pour vos suggestions





Avatar
MichDenis
| tu fais fasse

Farce ou Face ... ou comment perdre la face ?
Je crois bien que je vais prendre congé...
J'ai plus besoin de revoir mes règles de grammaire
que vous avez besoin de mes explications. (-;
Avatar
grodep
Merci d'avoir pris le temps de m'expliquer tout ceci, c'est vrai que ça
parait presque logique en fait :)
"MichDenis" a écrit dans le message de news:

Quand tu fais fasse à une array de feuille comme ceci :
Sheets(Array("Feuil1", "Feuil2", "feuil3")).Select

Tu dois t'assurer si tu places le code directement dans le module
feuille, que la première feuille nommée dans l'array soit la feuille
où est placé de ton bouton de commande qu'il émane de la boîte
à outils formulaire ou contrôle.

La raison pour cela, c'est que pour sélectionner une cellule de
la feuille où est ton bouton de commande, c'est cette feuille qui
soit être la feuille active quand toutes les feullles sont sélectionnées
et c'est exactement ce qui se passe si tu prends le soin de nommer
cette feuille en premièr dans l'array. Il faut avoir de la suite dans les
idées
;-))

Quand le code est dans un module "Standard" la cellule A1 est sensé
appartenir à la feuille active quelque soit cette dernière.

Même quand le code est dans un module feuille, et que tu appelles la
macro par le menu, Il n'y a pas de dichotomie entre la feuille
sélectionnée,
et celle où est situé le bouton. Excel peut prendre celle qui lui convient
car
elles sont toutes sélectionnées.






"grodep" a écrit dans le message de news:
eMMQ%
merci beaucoup, cette solution a parfaitement fonctionné.! Pour mon
information personnelle, si quelqu'un pouvait m'expliquer pourquoi celà
fonctionne de cette maniere alors que la simple recopie du code ne
fonctionnait pas, j'en serai ravi. simple question de curiosité
personnellle..
"MichDenis" a écrit dans le message de news:
eb$
Tu mets ton code dans un module standard
(dans la fenêtre de l'éditeur de code : Insertion / module)

à titre d'exemple :
'----------------------
Sub test()
Sheets(Array("Feuil1", "Feuil2", "feuil3")).Select
Range("A1").Select
Selection = ""
End Sub
'----------------------

Et dans la procédure de ton bouton de commande du module feuille, tu
appelles
la macro "test"
'----------------------
Private Sub CommandButton1_Click()
Module1.test
End Sub
.'----------------------


"grodep" a écrit dans le message de news:
edJ$
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le
meme,
et lorsque je clike sur celui ci , j'ai un message d'erreur correspondant
a
la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc
de
boulot..
Merci d'avance pour vos suggestions










Avatar
Frédéric Sigonneau
Tu aurais peut-être du te pencher un peu plus plus sur la proposition de Youki, AMA.
Le nom de la propriété TakeFocusOnClick est assez parlant : lorsque tu cliques
sur un bouton (CommandButton) c'est lui qui, par défaut, prend le focus, cad
qu'il devient l'objet par défaut auquel Excel essaye d'appliquer les
instructions demandées. Comme un bouton n'a pas de feuilles de calcul, le code
ne peut s'exécuter -> erreur.
En mettant cette propriété sur False, l'objet qui avait le focus avant le clic
sur le bouton (une feuille de calcul probablement) le garde et le code peut
s'exécuter...
Ceci dit, il n'y a pas qu'un chemin pour aller à Rome !

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

merci beaucoup, cette solution a parfaitement fonctionné.! Pour mon
information personnelle, si quelqu'un pouvait m'expliquer pourquoi celà
fonctionne de cette maniere alors que la simple recopie du code ne
fonctionnait pas, j'en serai ravi. simple question de curiosité
personnellle..
"MichDenis" a écrit dans le message de news:
eb$
Tu mets ton code dans un module standard
(dans la fenêtre de l'éditeur de code : Insertion / module)

à titre d'exemple :
'----------------------
Sub test()
Sheets(Array("Feuil1", "Feuil2", "feuil3")).Select
Range("A1").Select
Selection = ""
End Sub
'----------------------

Et dans la procédure de ton bouton de commande du module feuille, tu
appelles
la macro "test"
'----------------------
Private Sub CommandButton1_Click()
Module1.test
End Sub
.'----------------------


"grodep" a écrit dans le message de news:
edJ$
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le meme,
et lorsque je clike sur celui ci , j'ai un message d'erreur correspondant
a
la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc de
boulot..
Merci d'avance pour vos suggestions









Avatar
MichDenis
Bonjour Frédéric,

C'est gentil d'insister sur l'approche de Youki, mais elle ne
règle pas le problème lorsqu'il s'agit d'un array de feuille.

Pour que cela fonctionne, (avec ou pas la propriété
"TakeFocusOnClick" à True or False) il faut que le nom de
la première feuille apparaissant dans l'énumération du Array
soit celle où apparaît le nom du bouton de commande que celui-ci
provienne de la barre d'outils formulaire ou contrôle.

Jusqu'à preuve du contraire, je maintiens l'explication que j'ai donnée
puisque c'est la seule qui "tient la route" compte tenu des tests effectués.


Salutations.



"Frédéric Sigonneau" a écrit dans le message de news:

Tu aurais peut-être du te pencher un peu plus plus sur la proposition de Youki, AMA.
Le nom de la propriété TakeFocusOnClick est assez parlant : lorsque tu cliques
sur un bouton (CommandButton) c'est lui qui, par défaut, prend le focus, cad
qu'il devient l'objet par défaut auquel Excel essaye d'appliquer les
instructions demandées. Comme un bouton n'a pas de feuilles de calcul, le code
ne peut s'exécuter -> erreur.
En mettant cette propriété sur False, l'objet qui avait le focus avant le clic
sur le bouton (une feuille de calcul probablement) le garde et le code peut
s'exécuter...
Ceci dit, il n'y a pas qu'un chemin pour aller à Rome !

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

merci beaucoup, cette solution a parfaitement fonctionné.! Pour mon
information personnelle, si quelqu'un pouvait m'expliquer pourquoi celà
fonctionne de cette maniere alors que la simple recopie du code ne
fonctionnait pas, j'en serai ravi. simple question de curiosité
personnellle..
"MichDenis" a écrit dans le message de news:
eb$
Tu mets ton code dans un module standard
(dans la fenêtre de l'éditeur de code : Insertion / module)

à titre d'exemple :
'----------------------
Sub test()
Sheets(Array("Feuil1", "Feuil2", "feuil3")).Select
Range("A1").Select
Selection = ""
End Sub
'----------------------

Et dans la procédure de ton bouton de commande du module feuille, tu
appelles
la macro "test"
'----------------------
Private Sub CommandButton1_Click()
Module1.test
End Sub
.'----------------------


"grodep" a écrit dans le message de news:
edJ$
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le meme,
et lorsque je clike sur celui ci , j'ai un message d'erreur correspondant
a
la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc de
boulot..
Merci d'avance pour vos suggestions









Avatar
Frédéric Sigonneau
Ce n'est pas pure gentillesse si j'ai rappelé la proposition de Youky après la
tienne..
Pour être certain que mon intervention était bien justifiée, j'ai copié/collé
ton bout de code dans un classeur comportant 3 feuilles et
Si TakeFocusOnClick n'est pas sur False, ta procédure test sélectionne toutes
les cellules A1 de toutes les feuilles de ton Array _sauf_ celle où se trouve le
CommandButton, qui, lui, garde le focus (pointillés tout autour).
Si TakeFocusOnClick est sur False, toutes les cellules A1 de toutes les feuilles
sont bien sélectionnées.

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

Bonjour Frédéric,

C'est gentil d'insister sur l'approche de Youki, mais elle ne
règle pas le problème lorsqu'il s'agit d'un array de feuille.

Pour que cela fonctionne, (avec ou pas la propriété
"TakeFocusOnClick" à True or False) il faut que le nom de
la première feuille apparaissant dans l'énumération du Array
soit celle où apparaît le nom du bouton de commande que celui-ci
provienne de la barre d'outils formulaire ou contrôle.

Jusqu'à preuve du contraire, je maintiens l'explication que j'ai donnée
puisque c'est la seule qui "tient la route" compte tenu des tests effectués.


Salutations.



"Frédéric Sigonneau" a écrit dans le message de news:

Tu aurais peut-être du te pencher un peu plus plus sur la proposition de Youki, AMA.
Le nom de la propriété TakeFocusOnClick est assez parlant : lorsque tu cliques
sur un bouton (CommandButton) c'est lui qui, par défaut, prend le focus, cad
qu'il devient l'objet par défaut auquel Excel essaye d'appliquer les
instructions demandées. Comme un bouton n'a pas de feuilles de calcul, le code
ne peut s'exécuter -> erreur.
En mettant cette propriété sur False, l'objet qui avait le focus avant le clic
sur le bouton (une feuille de calcul probablement) le garde et le code peut
s'exécuter...
Ceci dit, il n'y a pas qu'un chemin pour aller à Rome !

FS
---
Frédéric Sigonneau
http://frederic.sigonneau.free.fr

merci beaucoup, cette solution a parfaitement fonctionné.! Pour mon
information personnelle, si quelqu'un pouvait m'expliquer pourquoi celà
fonctionne de cette maniere alors que la simple recopie du code ne
fonctionnait pas, j'en serai ravi. simple question de curiosité
personnellle..
"MichDenis" a écrit dans le message de news:
eb$
Tu mets ton code dans un module standard
(dans la fenêtre de l'éditeur de code : Insertion / module)

à titre d'exemple :
'----------------------
Sub test()
Sheets(Array("Feuil1", "Feuil2", "feuil3")).Select
Range("A1").Select
Selection = ""
End Sub
'----------------------

Et dans la procédure de ton bouton de commande du module feuille, tu
appelles
la macro "test"
'----------------------
Private Sub CommandButton1_Click()
Module1.test
End Sub
.'----------------------


"grodep" a écrit dans le message de news:
edJ$
Bonsoir a tous, je me tourne de nouveau vers vous pour un probleme sans
doute tres simple : j'ai une macro très simple qui me permet de
réinitialiser certaines plages de données sur plusieurs feuilles d'un
classeur
du style
Sheets(array("XX", "yy",....)
RAnge(A1:J45). Select


etc,etc,

quand je lance cette macro par le biais du menu outils/macro/exécuter :
aucun probleme, elle fonctionne parfaitement.
Je l''ai associé a un bouton de commande, le code est strictement le meme,
et lorsque je clike sur celui ci , j'ai un message d'erreur correspondant
a
la ligne de sélection de la plage...
Désolé de ne pas avoir le message d'erreur exact, mais c'est sur mon pc de
boulot..
Merci d'avance pour vos suggestions












1 2