Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Retour sur Macro Proteger/ Deprotéger Formules

4 réponses
Avatar
michir
Bonjour,
Je reviens sur une macro que j'utilise pour prot=E9ger/ d=E9prot=E9ger les
formules de 20 feuilles dont le nom commence par "Jour" (MichD)
Elle fonctionne parfaitement 8 fois sur 10, mais 2 fois elle bogue de
mani=E8re al=E9atoire me semble-t-il pour une raison inconnue (sans doute
conflit interne de mon application)
Pour la d=E9bloquer, je le fais manuellement (Outils, "=D4ter la
protection de la feuille" et clique deux fois sur le bouton)
Bref, j'aimerais la simplifier et la fiabiliser en lui demandant de ne
Prot=E9ger/ D=E9prot=E9ger que les formules de la feuille active
Je souhaiterais =E9galement l'affecter =E0 un Bouton ActiveX
(CommandButton)
Pourriez vous m'aider
Merci
Michel

Voici la macro en question:

Sub test_Protect_deprotect()
Application.ScreenUpdating =3D False
Dim Sh As Worksheet
On Error Resume Next
With Worksheets("Jour 3").Shapes("Bouton 4") '=E0 adapter
If .OLEFormat.Object.Caption =3D "Formules prot=E9g=E9es" Then
For Each Sh In ThisWorkbook.Worksheets
Select Case LCase(Left(Sh.Name, 4))
Case Is =3D "jour"
Sh.Unprotect
Sh.Range("F3").FormulaR1C1 =3D "Formules
D=E9prot=E9g=E9es"
End Select
Next
.OLEFormat.Object.Caption =3D "Formules d=E9prot=E9g=E9es"
Else
.OLEFormat.Object.Caption =3D "Formules prot=E9g=E9es"
For Each Sh In ThisWorkbook.Worksheets
With Sh
Select Case LCase(Left(.Name, 4))
Case Is =3D "jour"
.Unprotect 'Mot de passe si n=E9cessaire
With .Cells
.Locked =3D False
With .SpecialCells(xlCellTypeFormulas)
.Locked =3D True
End With
End With
.Range("F3").FormulaR1C1 =3D "Formules
Prot=E9g=E9es"
.Protect 'Mot de passe si n=E9cessaire
End Select
End With
Next
End If
End With
End Sub

4 réponses

Avatar
MichD
Bonjour,

| dont le nom commence par "Jour"

*** Le nom de l'onglet ne doit pas y avoir de lettres majuscules selon la procédure : "jour"

| Elle fonctionne parfaitement 8 fois sur 10,

*** Tu dois avoir quelque chose qui cloche dans ton application car elle fonctionne 10/10
Je joins un fichier exemple disponible à cette adresse : http://cjoint.com/?1dBog8YbqgD

| j'aimerais la simplifier et la fiabiliser en lui demandant de ne
| Protéger/ Déprotéger que les formules de la feuille active
| Je souhaiterais également l'affecter à un Bouton ActiveX
| (CommandButton)

*** Cela suppose que tu auras un bouton de commande par feuille.
Voir fichier joint.


MichD
--------------------------------------------
"michir" a écrit dans le message de groupe de discussion :


Bonjour,
Je reviens sur une macro que j'utilise pour protéger/ déprotéger les
formules de 20 feuilles dont le nom commence par "Jour" (MichD)
Elle fonctionne parfaitement 8 fois sur 10, mais 2 fois elle bogue de
manière aléatoire me semble-t-il pour une raison inconnue (sans doute
conflit interne de mon application)
Pour la débloquer, je le fais manuellement (Outils, "Ôter la
protection de la feuille" et clique deux fois sur le bouton)
Bref, j'aimerais la simplifier et la fiabiliser en lui demandant de ne
Protéger/ Déprotéger que les formules de la feuille active
Je souhaiterais également l'affecter à un Bouton ActiveX
(CommandButton)
Pourriez vous m'aider
Merci
Michel

Voici la macro en question:

Sub test_Protect_deprotect()
Application.ScreenUpdating = False
Dim Sh As Worksheet
On Error Resume Next
With Worksheets("Jour 3").Shapes("Bouton 4") 'à adapter
If .OLEFormat.Object.Caption = "Formules protégées" Then
For Each Sh In ThisWorkbook.Worksheets
Select Case LCase(Left(Sh.Name, 4))
Case Is = "jour"
Sh.Unprotect
Sh.Range("F3").FormulaR1C1 = "Formules
Déprotégées"
End Select
Next
.OLEFormat.Object.Caption = "Formules déprotégées"
Else
.OLEFormat.Object.Caption = "Formules protégées"
For Each Sh In ThisWorkbook.Worksheets
With Sh
Select Case LCase(Left(.Name, 4))
Case Is = "jour"
.Unprotect 'Mot de passe si nécessaire
With .Cells
.Locked = False
With .SpecialCells(xlCellTypeFormulas)
.Locked = True
End With
End With
.Range("F3").FormulaR1C1 = "Formules
Protégées"
.Protect 'Mot de passe si nécessaire
End Select
End With
Next
End If
End With
End Sub
Avatar
isabelle
bonjour Michel,

quel est le message d'erreur, et sur quel ligne le problème survient-il ?

isabelle
------------------------------------------------------------------

Le 2011-03-27 03:21, michir a écrit :
Bonjour,
Je reviens sur une macro que j'utilise pour protéger/ déprotéger les
formules de 20 feuilles dont le nom commence par "Jour" (MichD)
Elle fonctionne parfaitement 8 fois sur 10, mais 2 fois elle bogue de
manière aléatoire me semble-t-il pour une raison inconnue (sans doute
conflit interne de mon application)
Pour la débloquer, je le fais manuellement (Outils, "Ôter la
protection de la feuille" et clique deux fois sur le bouton)
Bref, j'aimerais la simplifier et la fiabiliser en lui demandant de ne
Protéger/ Déprotéger que les formules de la feuille active
Je souhaiterais également l'affecter à un Bouton ActiveX
(CommandButton)
Pourriez vous m'aider
Merci
Michel

Voici la macro en question:

Sub test_Protect_deprotect()
Application.ScreenUpdating = False
Dim Sh As Worksheet
On Error Resume Next
With Worksheets("Jour 3").Shapes("Bouton 4") 'à adapter
If .OLEFormat.Object.Caption = "Formules protégées" Then
For Each Sh In ThisWorkbook.Worksheets
Select Case LCase(Left(Sh.Name, 4))
Case Is = "jour"
Sh.Unprotect
Sh.Range("F3").FormulaR1C1 = "Formules
Déprotégées"
End Select
Next
.OLEFormat.Object.Caption = "Formules déprotégées"
Else
.OLEFormat.Object.Caption = "Formules protégées"
For Each Sh In ThisWorkbook.Worksheets
With Sh
Select Case LCase(Left(.Name, 4))
Case Is = "jour"
.Unprotect 'Mot de passe si nécessaire
With .Cells
.Locked = False
With .SpecialCells(xlCellTypeFormulas)
.Locked = True
End With
End With
.Range("F3").FormulaR1C1 = "Formules
Protégées"
.Protect 'Mot de passe si nécessaire
End Select
End With
Next
End If
End With
End Sub

Avatar
michir
Bonjour,
Merci à MichD, sa macro fonctionne parfaitement, c'est moi qui me suis
prise les pieds dans les numéros des boutons de formulaire
J'aimerais à ce propos savoir comment on retrouve le numéro d'un
bouton une fois qu'on l'a affecté à une macro et renommé ???...
Merci encore à MichD
Michel



On 27 mar, 14:07, "MichD" wrote:
Bonjour,

| dont le nom commence par "Jour"

*** Le nom de l'onglet ne doit pas y avoir de lettres majuscules selon la proc dure : "jour"

| Elle fonctionne parfaitement 8 fois sur 10,

*** Tu dois avoir quelque chose qui cloche dans ton application car elle fonctionne 10/10
        Je joins un fichier exemple disponible cette adresse :htt p://cjoint.com/?1dBog8YbqgD

|  j'aimerais la simplifier et la fiabiliser en lui demandant de ne
| Prot ger/ D prot ger que les formules de la feuille active
| Je souhaiterais galement l'affecter un Bouton ActiveX
| (CommandButton)

*** Cela suppose que tu auras un bouton de commande par feuille.
       Voir fichier joint.

MichD
--------------------------------------------
"michir"  a crit dans le message de groupe de discussion :


Bonjour,
Je reviens sur une macro que j'utilise pour prot ger/ d prot ger les
formules de 20 feuilles dont le nom commence par "Jour" (MichD)
Elle fonctionne parfaitement 8 fois sur 10, mais 2 fois elle bogue de
mani re al atoire me semble-t-il pour une raison inconnue (sans doute
conflit interne de mon application)
Pour la d bloquer, je le fais manuellement (Outils, " ter la
protection de la feuille" et clique deux fois sur le bouton)
Bref, j'aimerais la simplifier et la fiabiliser en lui demandant de ne
Prot ger/ D prot ger que les formules de la feuille active
Je souhaiterais galement l'affecter un Bouton ActiveX
(CommandButton)
Pourriez vous m'aider
Merci
Michel

Voici la macro en question:

Sub test_Protect_deprotect()
Application.ScreenUpdating = False
Dim Sh As Worksheet
On Error Resume Next
With Worksheets("Jour 3").Shapes("Bouton 4") ' adapter
    If .OLEFormat.Object.Caption = "Formules prot g es" Then
        For Each Sh In ThisWorkbook.Worksheets
             Select Case LCase(Left(Sh.Name, 4))
                Case Is = "jour"
                    Sh.Unprotect
                    Sh.Range("F3").FormulaR1C1 = "F ormules
D prot g es"
            End Select
        Next
        .OLEFormat.Object.Caption = "Formules d prot g es"
    Else
        .OLEFormat.Object.Caption = "Formules prot g es"
            For Each Sh In ThisWorkbook.Worksheets
                With Sh
                    Select Case LCase(Left(.Name, 4))
                        Case Is = "jour"
                            .Unprotect 'Mot d e passe si n cessaire
                            With .Cells
                                .Locked = False
                                With .Spe cialCells(xlCellTypeFormulas)
                                    . Locked = True
                                End With
                            End With
                            .Range("F3").Form ulaR1C1 = "Formules
Prot g es"
                            .Protect  'Mot de passe si n cessaire
                    End Select
                End With
            Next
    End If
End With
End Sub
Avatar
MichD
| J'aimerais à ce propos savoir comment on retrouve le numéro d'un
| bouton une fois qu'on l'a affecté à une macro et renommé ???...

De quel numéro parles-tu ?



MichD
--------------------------------------------