Microsoft 365 Protect/Unprotect

FCMLE44

XLDnaute Impliqué
Supporter XLD
Bonjour

Dans ce code, j'ai placé des Unprotect ainsi que de Protect
VB:
Option Explicit

Private Sub ComboBox1_Change()

End Sub

Private Sub CommandButton2_Click()
ActiveSheet.Unprotect
Unload Me
ActiveSheet.Protect
End Sub

Private Sub CommandButton3_Click()

ActiveSheet.Unprotect
Dim Choix%, ReponseIndem%, ReponseTP%
Dim fselection()
Dim TpsPart As Boolean
Dim Motif$

Choix = ComboBox1.ListIndex 'renvoie le choix sélectionné

'DEFINIT LES FEUILLES A IMPRIMER SELON LE CHOIX SELECTIONNE DANS USERFORM
Select Case Choix
'CHOIX INDEMNITE
    Case 0
        fselection = Array("Indemnités", "salariés") 'FEUILLES A IMPRIMER (A ADAPTER!)
        ReponseTP = MsgBox("Le salarié avait-il une période à temps partiel ?", vbYesNo, "Temps partiel") 'msg temps partiel
        Select Case ReponseTP
            Case vbNo: TpsPart = False 'si reponse non, variable TpsPart = faux
            Case vbYes: TpsPart = True 'si reponse oui, TpsPart = vrai
            Case Else: MsgBox "Procédure annulée !", , "Annulation": Exit Sub 'sinon, sortie procedure
        End Select
'CHOIX ENVOI SIMULATION
    Case 1
        fselection = Array("Simulations") 'feuille à imprimer
'CHOIX DOSSIER COMPLET
    Case 2
        ReponseIndem = MsgBox("AVEZ-VOUS CALCULE UNE INDEMNITE DE RUPTURE ?", vbYesNo, "Indemnités") 'msg indemnités
        Select Case ReponseIndem
            Case vbNo: fselection = Array("salariés", "DSN", "CP", "Courriers", "ES", "Asaisir") 'A ADAPTER (ici, sans "Indemnités" !!!) 'si non, feuilles sans "Indemn"
            Case vbYes
                fselection = Array("salariés", "Indemnités", "DSN", "CP", "Courriers", "ES", "Asaisir") 'si oui, feuilles avec "Indemn" PUIS :
                ReponseTP = MsgBox("Le salarié avait-il une période à temps partiel ?", vbYesNo, "Temps partiel") 'msg TP
                Select Case ReponseTP
                    Case vbNo: TpsPart = False 'voir cas 0
                    Case vbYes: TpsPart = True
                    Case Else: MsgBox "Procédure annulée !", , "Annulation": Exit Sub
                End Select
            Case Else: MsgBox "Procédure annulée !", , "Annulation": Exit Sub
        End Select
'CHOIX COURRIERS STC
    Case 3
        fselection = Array("Courriers") 'feuille à imprimer
'LISTE LAISSEE VIDE
    Case Else
        MsgBox "Procédure annulée, aucune donnée n'est renseignée!", vbCritical, "Erreur de sélection"
        Exit Sub 'sortie procédure
End Select

'EXECUTION DE LA MACRO EditionPDF (qui dépend du choix temps partiel)
Call EditionPDF(fselection, TpsPart) 'exécution EditionPDF (en fonction de fselection et de TpsPart)

'----------------LIGNES AJOUTEES------------------------
'-------------------------------------------------------
'-------------------------------------------------------
'ENVOI DU MAIL SOUS CONDITIONS
If Choix = 0 Then Call ChoixMultiFichiers_EnvoiMail_Simu_RG   'envoi mail sans condition si choix 0
If Choix = 1 Then Call ChoixMultiFichiers_EnvoiMail_SimuRH   'envoi mail sans condition si choix 1
If Choix = 2 Then 'si choix 2
    Motif = Join(Array("Licenciement Faute Grave", "Licenciement Autres", "Retraite", "Rupture Conventionnelle"))
    If InStr(Motif, Sheets("Salariés").Range("D18").Value) > 0 Or Sheets("Courriers").Range("E74").Value > 15000 Then
'si la cellule D18 de la feuille Salariés est = "Licenciement Faute Grave", "Licenciement Autres", "Retraite", "Rupture Conventionnelle" ou que la cellule E74 de la feuille Courriers est > à 15 000
        Call ChoixMultiFichiers_EnvoiMail_ValidSTC 'alors envoi systématique du mail via code ci-dessous
    End If
End If
'-------------------------------------------------------
'-------------------------------------------------------
'-------------------------------------------------------

'MSG POUR CONTINUER SUR UF OU FERMER
If Not MsgBox("Souhaitez-vous effectuer une autre action ?", vbYesNo, "Demande de confirmation") = vbYes Then 'si continuer non, on ferme
    Unload Me
    Exit Sub
End If

ComboBox1.ListIndex = -1 'si continuer oui, on définit la liste sur valeur vide
ActiveSheet.Protect
End Sub

Private Sub UserForm_Initialize()
ActiveSheet.Unprotect
  With Me.ComboBox1
    .AddItem "Validation Simulation indemnités de rupture"
    .AddItem "Envoi Simulation à la RH"
    .AddItem "Enregistrer mon dossier complet"
    .AddItem "Générer les courriers du STC"
  End With
ActiveSheet.Protect
End Sub

Il bloque lors de la sélection des feuilles

Sur ce feuilles aussi se trouve des Protect et Unprotect

Quelqu'un aurait il une idée de comment je pourrais faire ?

Merci
 

TooFatBoy

XLDnaute Barbatruc
Non, je n'ai pas d'exemple bidon car je n'ai plus d'ordinateur depuis quelques semaines... :(
Mais fais une recherche sur le forum ; tu devrais y trouver des informations intéressantes. ;)

Exemple :
VB:
Worksheets("Salariés").Protect Password:="MonMotDePasse", userinterfaceonly:=True
Ainsi ta feuille "Salariés" est protégée pour l'utilisateur, mais elle n'est pas protégée pour VBA qui peut donc la modifier sans la déprotéger.
 
Dernière édition:

FCMLE44

XLDnaute Impliqué
Supporter XLD
Je n'ai plus d'ordinateur depuis quelques semaines... :(

Exemple :
Code:
Worksheets("Salariés").Protect Password:="MonMotDePasse", userinterfaceonly:=True
Et ca je le mets sur chaque feuille dans le vba Project avant mes codes ?
Dois sélectionner protéger la feuille en amont ?
1610529333031.png

Si je ne rattache pas ce code à un sub, il ne va pas se déclencher ?
 

TooFatBoy

XLDnaute Barbatruc
J'ai déjà répondu précédemment : voir message #14 de ce fil de discussion. ;)

Tu peux protéger ta feuille dans la macro d'activation de la feuille si tu veux.
Ou tu peux protéger une seule fois, chacune des feuilles à protéger, dans la macro d'ouverture du classeur.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Attention : avant de supprimer tes Protect et Unprotect actuels, n'oublie pas de faire une sauvegarde de la version actuelle de ton classeur, et en suite de travailler sur une nouvelle version de ton classeur.

Comme ça, si cette solution ne te convient pas, tu n'auras pas à tout refaire ; il te suffira de repartir sur la sauvegarde de l'ancienne version. ;)
 

Discussions similaires