Workbook_SheetActivate & ruban
Bonsoir le forum,
Voilà j'ai depuis quelques temps le projet ambitieux ( à mon niveau
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)
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
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+
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
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 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+