Modifier les attributs du texte d'une cellule dans un document protégé.

Anonyme
2016-03-18T10:12:35+00:00

Bonjour,

J'espère que vous pourrez m'aider à comprendre pourquoi ma macro ne fonctionne pas comme je voudrais et que faire pour y arriver.

J'ai une feuille excel qui me sert de "formulaire" pour  enregistrer les réponses à un certain nombre de questions.

Certaines cellules sont utilisées pour des choix multiples alors que d'autres font appel à des réponses ouvertes.

Ces cellules "ouvertes"  sont "unlock" et je veux y faire apparaître un texte consigne: "Insert comments here" qui disparaît dès que l'on introduit son texte de réponse.

Le texte consigne a une taille et une couleur propre, le texte de la réponse a une autre couleur et une autre taille. 

Tout cela fonctionne avec un code VBA.

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target = Range("D1") Then

        If Target.Text = "" Then

            Target.Value = "Insert Application's Name Here"

            Target.Font.Size = 14

            Target.Font.ColorIndex = 48

            Target.Font.Italic = True

        Else

            Target.Font.Size = 18

            Target.Font.Color = vbBlack

        End If        

    End If

    If Target = Range("D17") Then       

        If Target.Text = "" Then

            Target.Value = "Insert comments here"

            Target.Font.Size = 14

            Target.Font.ColorIndex = 48

            Target.Font.Italic = True

        Else

            Target.Font.Size = 14

            Target.Font.Color = vbBlack

        End If       

    End If

    If Target = Range("D19") Then      

        If Target.Text = "" Then

            Target.Value = "Insert comments here"

            Target.Font.Size = 14

            Target.Font.ColorIndex = 15

            Target.Font.Italic = True

        Else

            Target.Font.Size = 14

            Target.Font.Color = vbBlack

        End If       

    End If

    If Target = Range("D35") Then      

        If Target.Text = "" Then

            Target.Value = "Insert comments here"

            Target.Font.Size = 14

            Target.Font.ColorIndex = 15

            Target.Font.Italic = True

        Else

            Target.Font.Size = 14

            Target.Font.Color = vbBlack

        End If      

    End If

End Sub

Tout roule (presque) tant que je n'ai pas protégé la feuille.

Dès que je met la protection, j'ai un message d'erreur :

" Run-time error '1004':

Unable to set the Size property of the Font class."

Ce message n'apparait plus si j'autorise l'accès au format des cellules dans la boîte de dialogue de protection de la feuille, ce que je ne souhaite pas car cela donne la possibilité de modification du format de toutes les cellules par l'utilisateur.

Je voudrais donc pouvoir uniquement autoriser le formatage de la cellule (ou du Font dans la cellule) par mon code VBA lorsque la cellule concernée est sélectionnée.

J'ai un deuxième problème:

Le changement de couleur et d'attributs de Font fonctionne très bien sur 2 cellules (D1 et D35) et, par contre, pour les 2 autres, j'ai un premier changement qui s'effectue lors de la frappe de texte, puis lors de l'effacement, la cellule ne reprend pas les attributs de départ... 

Merci de m'aider à comprendre...

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

91 réponses

  1. DanielCo 107.7K Points de réputation
    2016-03-29T12:56:15+00:00

    A voir ton message, tu n'as pas changé le nom de la feuille. Par ailleurs, le paramètre important est "userinterfaceonly:=True".

    Il faudrait donc que je fasse en sorte de "déprotéger" la feuille en début de macro et la "reprotéger" à la fin de manière à ne pas devoir cocher la case permettant la modification du format de cellule dans la feuille protégée...

    Non. Tu exécutes cette macro à l'ouverture du classeur. C'est tout question protection. Ne coche pas la case permettant la modification du format de cellule. Si tu as un problème, on peut adapter ton code.

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2016-03-29T12:43:01+00:00

    Droopy,

    Il y a quelque chose de très bizarre: je n'ai reçu ce matin aucune de vos questions; je poserai la question sur le Hub

    Pour la protection, vous devez:

    • Ôter la protection de la feuille
    • sélectionner toutes les cellules
    • les verrouiller (Format cellule, onglet protection, cocher verrouillé)
    • sélectionner d1, 17, 19, 35
    • les déverrouiller (Format cellule, onglet protection, décocher verrouillé)
    • Protéger la feuille

    Dans ces conditions:

    • le programme peut modifier le format
    • pas l'opérateur

    Cordialement

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2016-03-29T12:26:08+00:00

    Bonjour Droopy,

    Avez-vous ouvert le Pdf joint?

    Il y a dedans l'option qui résout le problème de la protection sui vous dérange!

    A plus tard

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2016-03-29T12:08:40+00:00

    J'ai essayé le code proposé dans ThisWorkbook de "Microsoft Excel Objects" et j'obtiens un message d'erreur:

    Je n'ai pas de module "ThisWorkbook".

    Cela ne fonctionne pas, la feuille n'est pas protégée et, donc, les modifications peuvent se faire par l'utilisateur.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  5. Anonyme
    2016-03-29T11:47:40+00:00

    Tu peux essayer d'exécuter :

    Sub test()

    Sheets("xxx").Select

    ActiveSheet.Protect Password:="nnn", userinterfaceonly:=True

    End Sub

    en remplaçant le nom de la feuille et le mot de passe (s'il y en a un). Cette instruction permet d'intervenir avec une macro sur une feuille protégée.

    Daniel

    Bonjour Daniel,

    J'ai déjà essayé la solution ActiveSheet.Protect et ActiveSheet.Unprotect, mais... sans succès.

    Sans doute que je ne met pas la commande au bon endroit dans mon code.

    Voici le code qui fonctionne pour l'instant, au détail près de ce que j'ai mis en commentaire pour Patrick dans mon précédent post:

     Private Sub Worksheet_Change(ByVal Target As Range)

        Cellule = ActiveCell.Column & ActiveCell.Row

        If IsEmpty(Target) Then

        Select Case Cellule

            Case "41"

    Target.Value = "Insert Application's Name Here"

            Case "417"

    Target.Value = "Insert comments here"

            Case "419"

    Target.Value = "Insert comments here"

            Case "435"

    Target.Value = "Insert comments here"

            End Select

            Target.Font.Size = 14

    Target.Font.ColorIndex = 15

    Target.Font.Italic = True

        Else

    Target.Font.Size = 18

    Target.Font.Color = vbBlack

        End If

    End Sub

    Il faudrait donc que je fasse en sorte de "déprotéger" la feuille en début de macro et la "reprotéger" à la fin de manière à ne pas devoir cocher la case permettant la modification du format de cellule dans la feuille protégée...

    Ou une autre solution que je ne vois pas pour l'instant...! ;-)

    Merci

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire