Comment faire référence à un bouton en VBA ?

Bonjour,

Dans le fichier ci-joint, j’ai déjà lancé la macro raccordée au bouton « Inscription de cas pour démo ». Lorsque je lance la macro raccordée au bouton « Sous-totaux et Tableau croisé dynamique », mon code bloque sur la troisième ligne du code ci-dessous :

    ActiveSheet.Shapes("Button 1").Select
    Selection.Delete
    ActiveSheet.Shapes("Button 3").Select
    Selection.Delete

Pourquoi le bouton 1 est effacé et le 3 non ? Savez-vous comment je dois y faire référence ?

J’ai fait des essais en remplaçant le 3 par un 2, mon bouton « Infos » est alors effacé, mais ce n’est pas ce que je désire ; ce bouton là devrait rester visible.

A vous lire.

Bonne journée.

289demo-journal-pks.zip (27.19 Ko)

Bonjour

Tu n'as pas de bouton 3 dans ta feuille mais :

Bouton 1 : Sous-totaux et TCD

Bouton 2 : Info

Bouton 10 : Inscription de cas pour démo

Amicalement

Nad

Salut Nad, merci beaucoup pour ta réponse.

J'avais pensé que ça devait être un problème semblable et j'avais essayé avec 4, 5, etc. mais je n'ai pas pensé que je devais aller jusqu'à 10.

Ceci d'autant plus que j'avais fait un autre fichier test - ci-joint - pour lequel j'avais essayé de créer 5 boutons puis d'en effacer deux (ceux que je pensais être 2 et 3, je crois), mais les boutons qui restaient étaient alors - semble-t-il - numérotés 1 à 3 ??!!

Peux-tu alors quand même me dire où j'aurais pu trouver cette information que mon bouton mentionné dans les messages ci-dessus était le 10 ??

A te relire.

234noms-des-boutons.zip (14.64 Ko)

Re

Fais un click droit sur le bouton "Inscrire 3" par exemple et regarde dans la zone de nom.

Amicalement

Nad

capture

Merci Nad pour cette information très intéressante.

Il y a quand même quelque chose qui m'échappe. Dans le premier dossier que j'ai envoyé, le code

ActiveSheet.Shapes("Button 3").Select
Selection.Delete

ne fonctionnait pas car il faisait référence au bouton 10. Par contre dans le deuxième fichier, le code

    ActiveSheet.Shapes("Button 1").Select
    Selection.Delete

    ActiveSheet.Shapes("Button 3").Select
    Selection.Delete

fait en fait référence aux boutons 1 et 5 et ça fonctionne !!!

Mais bon, tant que ça marche, je ne vais plus trop me poser de questions.

Merci encore une fois et bonnes salutations.

21gmao-qassim.xlsm (70.17 Ko)

Fait attention yvouille, en fait le nom que l'on peut voir dans la zone Nom est quelque peu différent du nom que tu as en VBA.

Quand tu crées un bouton, celui-ci a un nom par défaut. Par exemple, "Bouton 4". Cela signifie que le 4ème objet que tu as dessiné est un objet de type "Bouton". En VBA, le bouton s'appellera "Button 4". Si par la suite, tu dessines un trait par exemple, il s'appelera "Line 5" (en vba) car la 5è forme que tu auras dessinée est un trait ("line" en anglais).

Donc, si tu crées 10 boutons mais que tu effaces les boutons 3, 4, 5, 6, 7, 8, 9, tu "verras" bien 3 boutons sur ta feuille, mais excel va garder en mémoire le nom des boutons que tu as créés. Il te restera donc les boutons 1, 2 et 10 sur ta feuille et non 1, 2 et 3.

Si tu ne veux pas te tromper, pour supprimer un bouton, utilise le nom que tu vois à côté de la barre de formule.

Exemple : si ton "Button 3" s'appelle "azertyuiop", plutôt que d'utiliser:

ActiveSheet.Shapes("Button 3").Select
Selection.Delete

utilise le code suivant :

ActiveSheet.Shapes("azertyuiop").Delete

Si pas clair, demande !

Merci vba-new pour tes informations. En cherchant à les comprendre, je me suis rendu compte d'où venait ma confusion.

En fait, dans mon fichier "Noms_des_boutons", je fais une copie de ma feuille et les copies de mes boutons 1, 4 et 5 deviennent tout naturellement les boutons 1, 2 et 3 de la nouvelle feuille. Mais bon sang, mais c'est bien sûr !!!

Merci à tous ceux qui m'ont aidé sur ce fil.

Bonne fin de semaine.

Rechercher des sujets similaires à "comment reference bouton vba"