XL 2010 Mémoriser l'action sur un bouton

Nounours_59

XLDnaute Nouveau
Bonjour à toutes et à tous.
Me revoilà, dans l'embarras malgré mes recherches et du haut de mon inexpérience.

Le contexte: 5 boutons sur une feuille: "bouton1 à bouton5".
J'ai cinq variables déclarées Public, "etat1 à etat5", correspondant à mes 5 boutons.

Ce que je voudrais:
DEPART:
- j'appuie sur un bouton quelconque, par exemple bouton3.
- Je lis "état3" = 0, donc je lance une présentation.
- Je mémorise l'action qui vient d'être effectuée: "etat3" passe de 0 à 1 (comme une bascule).

ARRÊT:
- J'appuie sur le bouton3.
- Je lis "etat3" qui est égal à 1 donc j'arrête la présentation.
- Je passe "etat3" à 0 pour le coup d'après.

FIN.

Là ou je galère, c'est avec la variable "etat3", et plus généralement avec la mémorisation de l'état du bouton. Je n'arrive pas à réaliser cette bascule. Je n'ai rien à proposer car rien ne fonctionne.
Bien entendu, je voudrais n'utiliser qu'une seule macro pour mes 5 boutons.

Merci à celles et ceux qui pourront me venir en aide.
Bonne journée.
 
Solution
Dans l'ordre :
1- Bouton "Aide3" s'appelait Bouton01 donc pb de nommage, il y a deux Bouton01.

2- Les indices dans les Cases n'ont pas été remis à jour :
Regarde la pièce jointe 1210315

3- Le Resize n'était que sur 5 au lieu de 15 :
Regarde la pièce jointe 1210316

4- La macro Workbook_Open n'a pas été mise à jour
Regarde la pièce jointe 1210317


L'optimisation n'est possible que que si les actions sur plusieurs boutons sont les "mêmes" à quelques paramètres près. ( comme par ex ouvrir fichier 1 ou 2 ou 3 ... )
Donc quand vous aurez avancez, on pourra regardez comment optimiser.
Merci.
Pour ce qui est des boutons 😔 😔 😔
Pour le resize, ide.
Par contre, je n'avais même pas vu qu'il y avait une macro dans Workbook Open !!! 😯
Encore merci pour tout. Bonne soirée et bon dimanche.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Nounours,
Un essai en PJ. Les états des boutons sont déclarés en Public pour être mémorisés, je les ai mis sous forme d'array pour être plus simple.
Les boutons s'appellent Bouton1 à Bouton5, ce qui permet avec une seule macro de récupérer quel bouton a été appuyé.
VB:
Public Bouton(1 To 5)
Sub Clic()
N = CInt(Right(Application.Caller, 1)) ' Récupération du N° du bouton
If Bouton(N) <> 1 Then Bouton(N) = 1 Else Bouton(N) = 0
' Affichage pour test
[C15].Resize(5, 1).Value = Application.Transpose(Bouton)
' Lancement macro
If Bouton(1) = 1 Then Macro1
If Bouton(2) = 1 Then Macro2
If Bouton(3) = 1 Then Macro3
If Bouton(4) = 1 Then Macro4
If Bouton(5) = 1 Then Macro5
End Sub
 

Pièces jointes

  • Classeur1.xlsm
    15.3 KB · Affichages: 4

Nounours_59

XLDnaute Nouveau
Bonjour Nounours,
Un essai en PJ. Les états des boutons sont déclarés en Public pour être mémorisés, je les ai mis sous forme d'array pour être plus simple.
Les boutons s'appellent Bouton1 à Bouton5, ce qui permet avec une seule macro de récupérer quel bouton a été appuyé.
VB:
Public Bouton(1 To 5)
Sub Clic()
N = CInt(Right(Application.Caller, 1)) ' Récupération du N° du bouton
If Bouton(N) <> 1 Then Bouton(N) = 1 Else Bouton(N) = 0
' Affichage pour test
[C15].Resize(5, 1).Value = Application.Transpose(Bouton)
' Lancement macro
If Bouton(1) = 1 Then Macro1
If Bouton(2) = 1 Then Macro2
If Bouton(3) = 1 Then Macro3
If Bouton(4) = 1 Then Macro4
If Bouton(5) = 1 Then Macro5
End Sub
MERCI pour cette aide.
Trop top.
Bon, maintenant, j'essaie de comprendre et ... c'est pas gagné.
Peut-être que je te demanderai un peu d'aide :rolleyes:
Nounours.
 

Nounours_59

XLDnaute Nouveau
MERCI pour cette aide.
Trop top.
Bon, maintenant, j'essaie de comprendre et ... c'est pas gagné.
Peut-être que je te demanderai un peu d'aide :rolleyes:
Nounours.
J'avais prévenu (lol)
Sans vouloir être trop "collant":
- Pourquoi je trouve "Option Explicit" dans "feuil1"?
- Voici ce que j'ai compris:
Grâce à la "Application.Caller", tu lis le nom du bouton;
Grace à CInt, tu en extraits le numéro que tu affectes à une variable;
Tu testes le bouton pour affecter les valeurs 1 ou 0;
Tu affiche le résultat;
Puis tu lance les macros.

J'ai ajouté des conditions pour traiter les boutons = 0.
J'ai placé des MsgBox pour voir le comportement de la macro. Elles sont simplifiées car je ne sais afficher la vrai valeur du bouton.
Mes problèmes:
Quand j'ai actionné le bouton 2, par exemple, il m'affiche que le bouton 1 = 0, le bouton2 = 1, ...
Cela veut dire que la macro lance toutes les macros selon la valeur du bouton correspondant et non la seule macro bouton2 = 1.

J'ai voulu commencer petit pour défricher. A l'avenir, je pourrais avoir jusque 15 boutons. Il me semble que je ne pourrai extraire de numéro à deux chiffres avec la ligne "N = CInt(Right(Application.Caller, 1)) ' Récupération du N° du bouton". Vrai?

Encore merci beaucoup pour ton aide,

Nounours.
 

Nounours_59

XLDnaute Nouveau
J'avais prévenu (lol)
Sans vouloir être trop "collant":
- Pourquoi je trouve "Option Explicit" dans "feuil1"?
- Voici ce que j'ai compris:
Grâce à la "Application.Caller", tu lis le nom du bouton;
Grace à CInt, tu en extraits le numéro que tu affectes à une variable;
Tu testes le bouton pour affecter les valeurs 1 ou 0;
Tu affiche le résultat;
Puis tu lance les macros.

J'ai ajouté des conditions pour traiter les boutons = 0.
J'ai placé des MsgBox pour voir le comportement de la macro. Elles sont simplifiées car je ne sais afficher la vrai valeur du bouton.
Mes problèmes:
Quand j'ai actionné le bouton 2, par exemple, il m'affiche que le bouton 1 = 0, le bouton2 = 1, ...
Cela veut dire que la macro lance toutes les macros selon la valeur du bouton correspondant et non la seule macro bouton2 = 1.

J'ai voulu commencer petit pour défricher. A l'avenir, je pourrais avoir jusque 15 boutons. Il me semble que je ne pourrai extraire de numéro à deux chiffres avec la ligne "N = CInt(Right(Application.Caller, 1)) ' Récupération du N° du bouton". Vrai?

Encore merci beaucoup pour ton aide,

Nounours.
Avec le fichier!!!
 

Pièces jointes

  • AIDE BOUTONS.xlsm
    19.2 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
(comme une bascule).
J'ai suivi ça. Quand on appuie sur un bouton il passe à 1 au second appui il passe à 0.
Chaque bouton est indépendant.
En fait il semblerait, si j'ai bien compris, que l'appui sur un bouton soit traité, et tous les autres remis à 0. C'est ça ?
Si j'ai bien compris, en PJ un essai.
Sur appui sur un bouton, on arrête la macro en cours et on lance la nouvelle.
La structure peut changer suivant votre besoin. Là j'ai fait au plus explicite.

Deuxième point : s'il y a plus de 9 boutons, et pour faire simple il faut les appeler Bouton01...Bouton09, Bouton10... Bouton15, comme ça il suffit de faire :
VB:
N = CInt(Right(Application.Caller, 2))
J'ai fait ainsi dans la PJ.
 

Pièces jointes

  • AIDE BOUTONS V2.xlsm
    18.2 KB · Affichages: 2

Nounours_59

XLDnaute Nouveau
et avec des couleurs pour savoir dans quel phase on est.
Ouh la la !!!
D'abord merci pour le truc des noms de boutons. J'adopte.
Pour le reste, je n'ai pas été très clair semble-t-il. Vraiment désolé.
Je reformule:
- Tout les boutons sont indépendants. Une action sur l'un laisse les autres "de marbre". Seul le bouton sollicité entraîne une réponse.
- Les boutons peuvent avoir des états différents, sans interférence avec les autres.
- Chaque bouton, au premier clic commande l'ouverture d'un seul fichier. Il bascule alors à 1 pour témoigner de l'ouverture de ce fichier. Au second clic, il commande la fermeture du fichier et bascule à 0.
Encore merci pour votre aide, que dire de plus?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Un nouvel essai d'après ce que j'ai compris.
Il faut aussi dans Thisworkbook mettre une macro Workbook_Open pour initialiser tout à l'ouverture du fichier.
Evidemment tout est à adapter mais la structure est la plus souple possible.
 

Pièces jointes

  • AIDE BOUTONS V5.xlsm
    21.3 KB · Affichages: 2

Nounours_59

XLDnaute Nouveau
Et bien, c'est moi 😔.
J'ai tenté d'étendre à 15 boutons = cata 🥺
- J'ai modifié la première ligne "Public Bouton(1 To 15)", le 5 est devenu 15.
- En adaptant "[C15].Resize(5, 1).Value = Application.Transpose(Bouton) " en "[C15].Resize(15, 1).Value = Application.Transpose(Bouton) " ou pas.
- Jai créé les 10 "Case" manquant et les macros lancer et arrêter associées.
- Alors les 5 premiers boutons fonctionnent et le reste c'est la cata.
Je ne comprends pas.

Quant à l'optimisation, bien entendu, je suis preneur 😞.

Merci.
 

Pièces jointes

  • AIDE BOUTONS V5_1.xlsm
    26.8 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dans l'ordre :
1- Bouton "Aide3" s'appelait Bouton01 donc pb de nommage, il y a deux Bouton01.

2- Les indices dans les Cases n'ont pas été remis à jour :
1736010857750.png


3- Le Resize n'était que sur 5 au lieu de 15 :
1736010902947.png


4- La macro Workbook_Open n'a pas été mise à jour
1736010957593.png


Quant à l'optimisation, bien entendu, je suis preneur
L'optimisation n'est possible que que si les actions sur plusieurs boutons sont les "mêmes" à quelques paramètres près. ( comme par ex ouvrir fichier 1 ou 2 ou 3 ... )
Donc quand vous aurez avancez, on pourra regardez comment optimiser.
 

Pièces jointes

  • AIDE BOUTONS V5_2.xlsm
    25.5 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
315 260
Messages
2 117 850
Membres
113 350
dernier inscrit
manu_mileco