Je cherche le moyen de pouvoir rendre inactif le bouton afficher la liste des macros à l'ouverture du classeur afin d'empêcher l'utilisation de certaines macros par des joueurs, car ce classeur sera dispo en téléchargement.
Dans la liste des macros il y a des macros qui inversent la première et il ne faut pas que les joueurs puissent inverser en cliquant sur la liste des macros ou alt+F8 et inverser en faisant exécuter la macro !
Le bouton afficher la liste des macros est dispo dans le menu développeur ainsi que dans le menu affichage.
donc ce bouton :
Est-ce possible ? c'est pour mettre dans Workbook_Open()
ah non, c'est pas bon : là, la sub Onglet_visible() fait appel à elle-même ! car Call Onglet_visible(True) est dans le corps de la sub Onglet_visible() ; en fait, c'est pas interdit qu'une sub s'appelle elle-même ; mais dans ce cas c'est des subs spéciales car elles sont récursives ; exemple : une sub de Tri QuickSort.
une sub récursive s'appelle donc elle-même, mais elle doit être écrite de telle façon qu'il y ait « un point de sortie » ; sans cela, ça bouclerait indéfiniment !
Sub Onglet_visible(Flg As Boolean)
ActiveWindow.DisplayWorkbookTabs = True
End Sub
Sub Essai()
Onglet_visible True
End Sub
autre possibilité :
VB:
Sub Onglet_visible(dummy As Byte)
ActiveWindow.DisplayWorkbookTabs = True
End Sub
Sub Essai()
Onglet_visible 0
End Sub
dummy signifie « stupide » ; c'est un bon moyen pour se rappeler que l'argument est bidon car cet argument n'est pas utilisé dans la sub Onglet_visible() ; l'argument est utilisé uniquement pour que la macro n'apparaisse pas dans la liste des macros.
tu as pu remarquer que j'ai changé le type de la variable : ce n'est plus un Boolean mais un Byte.
j'ai vu ton post précédent qui disait que maintenant tu as bien compris.
Sub Onglet_visible(Flg As Boolean)
ActiveWindow.DisplayWorkbookTabs = True
End Sub
Sub Essai()
Onglet_visible True
End Sub
autre possibilité :
VB:
Sub Onglet_visible(dummy As Byte)
ActiveWindow.DisplayWorkbookTabs = True
End Sub
Sub Essai()
Onglet_visible 0
End Sub
dummy signifie « stupide » ; c'est un bon moyen pour se rappeler que l'argument est bidon car cet argument n'est pas utilisé dans la sub Onglet_visible() ; l'argument est utilisé uniquement pour que la macro n'apparaisse pas dans la liste des macros.
Alors, j'ai bien compris maintenant cela, mais ce n'est pas ce que je recherche ! ton système d'appel de la sub d'origine et bien il retrouve la possibilité d'inverser dans la liste des macros Alt+F8 ! Et moi je ne veux pas qu'on puisse trouver la macro dans la liste des macros !
Donc en faisant juste
VB:
Sub Onglet_visible(Flg As Boolean)
ActiveWindow.DisplayWorkbookTabs = True
End Sub
Là la macro n'est plus affichée dans la liste des macros, cependant, moi le créateur du fichier, dans le module du VBA je peux l'inverser, mais avec le flg, ben je ne peu plus l'inverser, il faut que j'enlève Flg As Boolean pour l'exécuter dans le module !
Vais pas m'amuser à chaque fois retirer Flg As Boolean et ensuite le remettre et ce pour chaque macro lol.
??? ben non, pour l'exécuter dans le module, tu écris bien une instruction qui appelle la sub Onglet_visible() ; cette instruction, c'est : Onglet_visible True ; mais cette instruction, tu ne peux pas la mettre en dehors d'une sub, et tu ne peux pas la mettre dans la même sub Onglet_visible() sinon elle sera récursive (ce qui n'est pas ce qu'on veut) ; donc seule solution : faut mettre cette instruction dans une autre sub, par exemple dans la sub Essai() : regarde de nouveau la 1ère possibilité que j'avais indiquée dans mon post #8.
maintenant, si vraiment tu veux inverser, tu peux mettre :
VB:
Sub Onglet_visible(Flg As Boolean)
ActiveWindow.DisplayWorkbookTabs = Not ActiveWindow.DisplayWorkbookTabs
End Sub
Sub Essai()
Onglet_visible 0
End Sub
à chaque fois que tu exécuteras la sub Essai(), les onglets seront successivement masqués puis affichés ; remarque : le 0 n'est pas une erreur : c'est l'équivalent de False ; j'aurais aussi pu mettre Onglet_visible -1 car -1 est l'équivalent de True ; et de toutes façons, 0 ou 1, peu importe puisque Flg est un argument bidon car non utilisé dans la sub Onglet_visible().
re
bonsoir
et ben c'est simple c'est function à la place de sub mais tu l’appelle comme une sub
a pas besoins d'arguments optionels ou pas
terminé c'est pas compliqué
??? ben non, pour l'exécuter dans le module, tu écris bien une instruction qui appelle la sub Onglet_visible() ; cette instruction, c'est : Onglet_visible True ; mais cette instruction, tu ne peux pas la mettre en dehors d'une sub, et tu ne peux pas la mettre dans la même sub Onglet_visible() sinon elle sera récursive (ce qui n'est pas ce qu'on veut) ; donc seule solution : faut mettre cette instruction dans une autre sub, par exemple dans la sub Essai() : regarde de nouveau la 1ère possibilité que j'avais indiquée dans mon post #8.