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

5 réponses

1 2
Avatar
MichDenis
Je joins un fichier exemple afin de s'assurer que l'on parle de la même chose.

Si ta version Excel passe le test, c'est que ta version est supérieure à la mienne
autrement, il faudra relire l'explication que j'ai donnée à la problématique du demandeur.


http://cjoint.com/?fbvhnq5Hz2





"Frédéric Sigonneau" a écrit dans le message de news:
%
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












Avatar
Frédéric Sigonneau
Quand les données d'un problème changent, il est logique que sa (ou ses)
solution(s) change(nt) aussi :)
Que dire de plus ?

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

Je joins un fichier exemple afin de s'assurer que l'on parle de la même chose.

Si ta version Excel passe le test, c'est que ta version est supérieure à la mienne
autrement, il faudra relire l'explication que j'ai donnée à la problématique du demandeur.


http://cjoint.com/?fbvhnq5Hz2





"Frédéric Sigonneau" a écrit dans le message de news:
%
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














Avatar
Youky
Bonsoir Frédéric,
J'ai pensé immédiatement à cette propriété car il y a maintenant plus de 10
ans j'avais posé une question similaire, tu m'avais répondu de changer
TakeFocusOnClick et qui avait parfaitement marché.
Je me suis dit ....Mais où .???....il a été chercher ce truc ce gars là.
J'étais fier de la ressortir aprés plus de 10 ans ....sans préciser ton
nom>> il y a prescription!
Amicalement Youky
Avatar
MichDenis
| tu m'avais répondu de changer TakeFocusOnClick

à ma connaissance c'est un "bug" qui s'applique seulement à la version Excel 97.
Si j'erre, j'aimerais que quelqu'un mette en ligne un petit exemple
sur cjoint.com.


"Youky" a écrit dans le message de news:
%
Bonsoir Frédéric,
J'ai pensé immédiatement à cette propriété car il y a maintenant plus de 10
ans j'avais posé une question similaire, tu m'avais répondu de changer
TakeFocusOnClick et qui avait parfaitement marché.
Je me suis dit ....Mais où .???....il a été chercher ce truc ce gars là.
J'étais fier de la ressortir aprés plus de 10 ans ....sans préciser ton
nom>> il y a prescription!
Amicalement Youky
Avatar
Frédéric Sigonneau
il y a prescription!


D'autant plus que je n'avais pas trouvé ça tout seul non plus ! Au bout d'un
moment (court..), savoir qui a trouvé quoi n'a plus grande importance ni intérêt
et bien souvent il y a beaucoup plus d'un auteur à une solution.
"Voler" du code (comme le dit quelque part Chip Pearson) est le meilleur moyen
d'apprendre. Reste que citer ses sources (surtout concernant des bouts de code
"tout faits" que l'on retrouve aux quatre coins de la toile) est une pratique
courtoise toujours appréciée !

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

Bonsoir Frédéric,
J'ai pensé immédiatement à cette propriété car il y a maintenant plus de 10
ans j'avais posé une question similaire, tu m'avais répondu de changer
TakeFocusOnClick et qui avait parfaitement marché.
Je me suis dit ....Mais où .???....il a été chercher ce truc ce gars là.
J'étais fier de la ressortir aprés plus de 10 ans ....sans préciser ton
nom>> il y a prescription!
Amicalement Youky




1 2