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é de support Microsoft. Vous pouvez voter pour savoir si c’est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ou suivre la question.

0 commentaires Aucun commentaire

91 réponses

Trier par : Le plus utile
  1. Anonyme
    2016-03-18T14:21:44+00:00

    Droopy, c'est encore Patrick,

    Vous pourriez énormément simplifier votre code (nous pouvons en discuter...): essayez de coller ça dans le code d'une nouvelle feuille:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

        Colonne = ActiveCell.Column

        Ligne = ActiveCell.Row

        MsgBox "cellule " & ActiveCell.Column & ActiveCell.Row

        Select Case Colonne & Ligne

        Case "31"

            ActiveCell.Value = "j't'ai eu"

        Case "35"

            ActiveCell.Value = "j't'aurai"

        End Select

    End Sub

    puis cliquez dans la cellule C1 ou C5 de la feuille

    Nous pouvons voir plus tard comment paramétrer l'application de la protection

    à plus tard

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

    0 commentaires Aucun commentaire
  2. Anonyme
    2016-03-18T14:14:15+00:00

    Après vérification:

    1. Oui, les cellules peuvent être formatées.
    2. C'est bien ce que je crois...
    3. Les options de protection sont les mêmes que sur l'image.

    Après le retrait de la protection j'ai bien accès au format de cellule, y compris à l'onglet permettant de les "locker".

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

    0 commentaires Aucun commentaire
  3. Anonyme
    2016-03-18T13:24:40+00:00

    Re bonjour Droopy,

    C'est rare que ça marche du premier coup; voulez-vous vérifier:

    1. après avoir lancé Protection_Ôter, que les cellules peuvent être formatées,
    2. si oui, il y a quelque chose à faire (c'est à voir plus tard) dans votre procédure,
    3. si non, vérifiez vos options de protection:

    A tout de suite

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

    0 commentaires Aucun commentaire
  4. Anonyme
    2016-03-18T12:56:54+00:00

    Bonjour Patrick,

    Merci pour la proposition, mais ça ne fonctionne pas...

    J'obtiens le même message d'erreur.

    J'appelle bien la fonction Protection_Ôter en début de code et je ferme par Protection_activer.

    Je peux voir que la feuille est effectivement protégée à la fin, donc il semble que la macro fonctionne.

    Par contre, ça ne règle pas mon problème.

    Je ne comprend pas... parce que si je déprotège la feuille manuellement, mon code fonctionne!

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

    0 commentaires Aucun commentaire
  5. Anonyme
    2016-03-18T10:59:39+00:00

    Bonjour Droopy,

    On commence par l'intervention sur des cellules protégées...

    Si vous voulez, vous pouvez activer/désactiver la protection par macro, avant et après le lancement de votre programme ci-dessus:

    je vous donne un code qui permet de faire les deux:

    ' Protection_activer Macro

    ' Applique la protection sur les formules et les formats des cellules

    '

        feuille_actuelle = ActiveSheet.Name

        no_feuille = 1

        Do While no_feuille <= Sheets.Count

        '

            Sheets(no_feuille).Select

            ActiveSheet.Protect Password:=ThisWorkbook.Mot_de_Passe, DrawingObjects:=False, Contents:=True, Scenarios:= _

            False

            ActiveSheet.EnableSelection = xlUnlockedCells

            no_feuille = no_feuille + 1

        Loop

        Sheets(feuille_actuelle).Select

    Application.ScreenUpdating = True

    End Sub

    Sub Protection_Ôter()

    Application.ScreenUpdating = False

    '

    ' Protection_Ôter Macro

    ' Retire la protection de toutes les cellules protégées du classeur

    '

        feuille_actuelle = ActiveSheet.Name

        no_feuille = 1

        Do While no_feuille <= Sheets.Count

    '

            Sheets(no_feuille).Select

            ActiveSheet.Unprotect Password:=ThisWorkbook.Mot_de_Passe

            no_feuille = no_feuille + 1

        Loop

        Sheets(feuille_actuelle).Select

    Application.ScreenUpdating = False

    End Sub

    Essayez de voir si ça convient

    Pour la 2° question, je la regarde

    A tout à l'heure

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

    0 commentaires Aucun commentaire