Workbook_SheetActivate & ruban

Bonsoir le forum,

Voilà j'ai depuis quelques temps le projet ambitieux ( à mon niveau ) de mettre dans mon ruban personnalisé un tooglebouton ( TB3) qui me permettrait dans Workbook_SheetActivate selon l'etat "pressed," ou non, du tooglebouton de protéger, ou non, la feuille active

j'ai fait un code ressemblant a ceci

Option Explicit
Private TB3 As Boolean
Private Sub Workbook_SheetActivate(ByVal Sh As Object, control As IRibbonControl)

Spoiler

If Not (MonRuban Is Nothing) Then

MonRuban.ActivateTab "Stock"

ResetRibbon

End If

If ActiveSheet.Name = "ETAT DES STOCKS" Then

Range("A1:G25").Select

Else

Range("F4:AB29").Select

End If

ActiveWindow.Zoom = True

    If TB3 = pressed Then
    ActiveSheet.Protect Password:="xx"
    Else
    ActiveSheet.Unprotect Password:="xx"
    End If
    ActiveSheet.Cells(1, 1).Select

End Sub 

Bon évidement ça fonctionne pas, j'ai du louper quelques marches ou peut être est-ce incompatible ?

Si quelqu'un comprend ma demande je reste à disposition pour toutes questions complémentaires, et si vous avez des idées, voir des solutions

16wbativruban.xlsm (244.05 Ko)

Bonjour Edlede

Tu nous parles du TB3, mais pour le moment, celui-ci te permet d'afficher ou non les autres menus d'Excel

Je pense qu'il te faut un TB4 ?

A+

Bonjour,

Suis pas sur d'avoir tout compris mais... regarde !

A+

18rubanedlede-vg.xlsm (244.55 Ko)

Heureusement que tu n'a pas tous compris sinon je n'aurai eu plus rien à faire.

En tous cas ta solution fonctionne globalement bien, Mais ce genre de code

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim a As String
a = ActiveSheet.Name
     If YMASK Then
    Sheets(a).Unprotect Password:="xx"
    Else
    Sheets(a).Protect Password:="xx"
    End If

End Sub

ca me fou en boule je suppose que le fait que YMASK soit booléen doit jouer, mais je comprend pas pourquoi le IF sans test logique fonctionne car la valeur de YMASK varie de true à False mais la macro fonctionne t elle ainsi :

if YMASK = true / If not YMASK = False?

ta solution est impeccable ( tu était partie sur activeSheet.protectPassword ) sauf pour l'onglet déjà sélectionné car je suppose il doit y avoir une nuance entre un onglet déjà activé et un en cours d'activation.

Du coup j'ai remis dans mon toogle bouton

i = ActiveSheet.Name

Sheets(i).Unprotect Password:="xx"

Else

Sheets(i).Protect Password:="xx"

End If

Sheets(1).Activate

Merci,

Bonne Soirée et a bientôt

Bonjour,

La syntaxe de If... Then ...c'est :

If (ConditionSiVrai) Then

'...

Else '(YMASK = False)

'...

End If

Que tu mettes YMASK ou YMASK = True... ConditionSiVrai est toujours True

Que tu mettes YMASK ou YLumièreAllumée n'y change rien :

If YLumièreAllumée Then
'...Eteindre la lumière
Else 
'...Allumer la lumière !
End If

Je m'étonnes que tu t'amuses encore avec tes Protect/Unprotect... J'ai pourtant déjà du te parler de UserInterfaceOnly ! ?

A+

Parlé non mais tu me l'a déjà "collé," dans un exemple de planning, de mémoire, et je suis tombé sur plusieurs forum qui évoquaient le sujet.

Mais de plus en plus je verrouille le bouton qui donne accès à l'onglet, plutôt que de verrouillé les données.... mais bon les auditeurs qui valident nos logiciels tiennent absolument à avoir un verrouillage de la feuille....pfff bande de N....;

Mais si tu as des liens vers des sites compréhensibles expliquant l' UserInterfaceOnly . car j'avoue c'est comme le Ubound ou les whiles je suis depuis longtemps en dehors de mes connaissances.

Avec UserInterfaceOnly = True plus besoin de Protéger / Déprotéger pour chaque macro.

UserInterfaceOnly laisse les macros s'exécuter librement.

La déprotection n'est nécessaire que pendant la période ou tu programmes et/ou tu construis ton fichier.

L'utilisateur lambda étant censé ne faire que de la saisie ou des opérations autorisées. (sur des cellules déverrouillées...)

UserInterfaceOnly = True s'initialise au moment du Workbook_Open pour la feuille active et dans le ThisWorkbook

Private Sub Workbook_SheetActivate(ByVal Sh As Object) pour les autres feuilles...

Selon les cas (comme pour les vaccins...) des piqures de rappel peuvent s'avérer nécessaires. (me consulter...)

De même lors de l'utilisation de plusieurs classeurs simultanément s'il y a Activation/Désactivation de certaines fenêtres, il peut être utile de repréciser cette propriété dans :

Private Sub Workbook_WindowActivate(ByVal Wn As Window)

Le principal avantage est que les feuilles n'étant jamais déprotégées l'utilisateur ne peut pas exécuter d'actions interdites...

Le principal inconvénient -pour le programmeur- est que tu n'as pas le droit à l'erreur... (car en cas d'erreur imprévue (débogage) le processus peut-être volatile) Il faut alors repasser par une phase de SheetActivate pour que le système se rappelle qui commande ici...

A+

Rechercher des sujets similaires à "workbook sheetactivate ruban"