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-29T11:47:35+00:00

    Bonjour,

    Je suppose qu'il doit être possible, soit de "libérer" les cellules indépendamment  ou encore, dans le code, d'autoriser le formatage pendant que la macro se déroule et l'empêcher en dehors... ?

    D'une manière générale, il suffit de mettre cette macro (exemple, changer le nom de la feuille et le mot de passe) dans le module ThisWorkbook :

    Private Sub Workbook_Open()

    ThisWorkbook.Sheets("Feuil1").Protect Password:="XXX", userinterfaceonly:=True

    End Sub

    La protection n'est valable que pour les opérations manuelles. Pour une macro, la feuille est considérée comme non protégée.

    Cordialement.

    Daniel

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

    0 commentaires Aucun commentaire
  2. Anonyme
    2016-03-29T11:32:53+00:00

    Patrick,

    Après test, il y a encore quelques points qui demandent un "réglage fin"...!

    J'ai bien suivi les directives du fichier PDF et, donc, coché la case  "Format cell" dans la fenêtre de dialogue de protection de la feuille.

    Par contre, cela a pour effet de permettre à tout utilisateur de modifier le format des cellules, ce que je ne souhaite pas.

    Bien sûr, cela permet à la macro de faire son job en modifiant les attributs du texte dans les cellules concernées, mais les autres cellules sont elles aussi ouvertes aux changements éventuels et je voudrais éviter cela.

    C'est exactement le problème devant lequel je me trouvais au début de la discussion.

    Je suppose qu'il doit être possible, soit de "libérer" les cellules indépendamment  ou encore, dans le code, d'autoriser le formatage pendant que la macro se déroule et l'empêcher en dehors... ?

    Comme je l'ai déjà mentionné, j'ai bien essayé avec "Protect" et "UnProtect", mais je dois sans doute mal les placer dans mon code car  dès que j'introduis ces commandes, il bugge...

    Merci

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

    0 commentaires Aucun commentaire
  3. Anonyme
    2016-03-29T10:19:16+00:00

    Bonjour Droopy,

    Merci de votre réponse,

    Effectivement, l'évènement Sur changement se produit après la validation de la saisie et j'ai cru que vous confirmiez par "Enter", or:

    • par défaut "Enter" vous positionne sur la ligne suivante
    • la macro remonte donc d'une ligne pour vous repositionner sur la cellule de saisie
    • si vous procédez par la touche "valider", vous restez sur la cellule
    • dans ce cas, il n'est pas nécessaire de remonter

    J'ai travaillé sur une hypothèse actuellement en réserve, basée sur un formulaire de saisie; je ne l'ai pas jointe parce que je n'avais pas assez d'info pour, justement, gérer la suite.

    De toutes façons, vous avez certainement à redire après lecture du PDF.

    Prenez votre temps

    Cordialement

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

    0 commentaires Aucun commentaire
  4. Anonyme
    2016-03-29T09:05:40+00:00

    Bonsoir Droopy,

    Je crois que vous êtes parti...

     Je retire le fichier

    Faites mis signe à votre retour

    Cordialement

    Bonjour A. User,

    J'étais effectivement déjà parti lorsque vous avez posté votre fichier.

    Désolé...

    Je suis revenu et reprend là où j'en étais resté.

    Comme vous pouvez le voir, Patrick a posté une solution également.

    Je l'ai testée et, comme expliqué dans ma réponse, cela correspond bien à mon besoin, à quelques détails près.

    Peut-être votre solution me permettra-t-elle de solutionner ces petits détails... ou d'optimiser le code...

    Je suis de toutes façons preneur de toutes propositions, ne fût-ce que pour la lecture du code, ce qui m'instruit toujours un peu plus.

    A vous de voir.

    Merci de vos efforts quoi qu'il en soit.

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

    0 commentaires Aucun commentaire
  5. Anonyme
    2016-03-29T08:59:39+00:00

    Bonjour Patrick,

    Je rentre de déplacement à l'étranger et je trouve votre proposition de solution.

    Je l'ai téléchargée et lancée et cela m'a l'air de bien correspondre à ce que je souhaite mettre en place.

    Je viens de tester  et cela semble fonctionner, à quelques détails près:

    • une fois la feuille protégée, il faut impérativement appuyer sur "Enter" pour que le format du texte introduit soit modifié; un simple changement de sélection de cellule ne suffit pas.
    • Le texte consigne ne réapparait pas immédiatement lorsqu'on supprime le contenu de la cellule. Il faut revenir une seconde fois dessus  pour l'afficher.

    Il ne s'agit vraiment que de petits détails sans importance.

    Je vais maintenant étudier le code afin de comprendre ce qui "clochait" dans le mien et le modifier en conséquence.

    Merci.

    Un grand merci à tous pour votre aide.

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

    0 commentaires Aucun commentaire