Problème instructions bouton
Bonjour,
Pour commencer, merci à vous qui prenez le temps de lire ce post et d'y répondre, vous m'extirpez d'un sacré casse-tête !
But de l'exercice:
Le fichier est composé d'une feuille d'information client de base "BASE" + Une feuille récapitulative "Créances"
->Lors d'un clic sur le bouton "nouveau client" se situant sur la feuille "Créances" lancement d'une grande procédure qui fait:
-Récupération du nom du client via un inputBox
-Dupliquer de la feuille "BASE" et la renommer avec le nom du client
-Création d'un bouton "Masquer" sur cette nouvelle feuille qui permettra de masquer cette feuille lorsqu'elle ne sera pas utilisée
C'est cette dernière partie qui me pose problème:
-Création sur la feuille "Créances" d'un bouton qui porte le nom du client et qui affiche et rend active la feuille nouvellement créée lorsque l'on clique dessus
-Revenir à la feuille nouvellement créée
J'ai essayé plusieurs choses mais sans succès. Le nom du client est stocké dans la variable "nomFeuil" et je ne sais pas comment: soit faire passer cette variable à la procédure que suit le bouton; soit comment adresser une commande au bouton sans passer par une procédure; soit trouver une autre manière de faire..
Bonjour,
Le problème que vous avez est du à 2 choses : la "scope"/portée des variables, ainsi que le moment d'exécution. Vous définissez nomFeuil dans la macro nv_Client, c'est bien, mais la macro af_client n'y a pas accès, nomFeuil n'est utilisable QUE DANS nv_client. C'est la portée.
Ensuite, meme si vous faites une variable publique ça ne fonctionnera pas. Pour 2 raisons. De 1, la variable est différente pour chaque client, de 2, la variable est "oubliée" à la fin de la macro nv_client.
Pour contourner cela, j'ai vu que vous mettiez dans le bouton créé le nom de la feuille. C'est top, car on peut le réutiliser !
Comme ceci, avec Application.Caller, on retrouve le nom de la feuille. Voiçi la correction de votre sub Aff_client.
Public Sub aff_client()
Dim nomFeuil As String
nomFeuil = ActiveSheet.Buttons(Application.Caller).Caption
Worksheets(nomFeuil).Visible = True
Worksheets(nomFeuil).Activate
End SubNotez que la macro doit être publique puisque vous l'utilisez depuis le classeur.
Enfin, vous devriez mettre vos macros dans un module plutot que dans le workbook.
Incroyable, merci pour cette réponse rapide et pour cette solution, tout fonctionne parfaitement. Je vais de ce pas aller me renseigner plus en profondeur sur comment utiliser Application.caller pour pouvoir le réutiliser !
Un grand merci
Je vous en prie, bonne journée.
Voilà la doc officielle si jamais. Application.Caller property (Excel) | Microsoft Learn
Je dois avouer qu'elle n'est vraiment pas claire, dites-vous juste que ça renvoie une sorte d'ID de l'objet qui a lancé la macro. Mais il faut quand meme savoir quel type d'objet c'est. Comme on sait que c'est un bouton, on peut le retrouver dans la liste des boutons de la feuille avec
ActiveSheet.Buttons(Application.Caller)Et ensuite on prend son texte ".Caption".