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

Trier par : Les plus récents
  1. Supprimé

    Cette réponse a été supprimée en raison d’une violation de notre Code de conduite. La réponse a été signalée manuellement ou identifiée via la détection automatisée avant que l’action ne soit entreprise. Pour obtenir plus d’informations, veuillez consulter notre Code de conduite.


    Les commentaires ont été désactivés. En savoir plus

  2. Anonyme
    2016-04-29T07:58:41+00:00

    Bonjour Droopy,

    J'ai peut-être fait une fausse manip' dans ma dernière réponse, que je ne retrouve pas.

    En principe, je t'indiquais que:

    • La solution que je t'ai proposée est beaucoup plus simple que tu ne sembles le supposer,
    • Elle fait appel à la mise en forme conditionnelle, avec laquelle tu n'es peut-être pas familier (?), et celle-ci ne permet pas tous les raffinements que tu souhaitais, mais:
    • Elle permet d'éviter les messages d'erreur que tu connais déjà,
    • Donc, elle doit te procurer la fiabilité dont tu as besoin.

    Prends le temps dont tu as besoin, et signale-toi le moment venu.

    Excuse-nous de te mêler à nos différends.

    Bon courage

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

    0 commentaires Aucun commentaire
  3. Anonyme
    2016-04-27T12:19:02+00:00

    Merci Droopy,

    • On ne peut pas être célibataire et marié, salarié et toujours en vacances: j'espère seulement pour toi que tu es payé de retour
    • Tu n'es pour rien dans un différend qui ne te concerne pas, "il se nourrit de lui-même".

    J'ai documenté l'application pour te permettre de la reprendre en main lorsque tu auras à nouveau le temps, mais elle n'est pas très compliquée.

    Comme tu as donné la préférence à une solution sans formulaire, nous sommes obligés de nous en tenir à l'évènement 'On Change" de la feuille, avec la conséquence que nous connaissons tous:

    • si je change en gras, un nouvel évènement "On Change" relance la procédure
    • et caetera: on est dans une boucle dont on ne peut pas sortir

    Ce que je t'ai mis en place, c'est:

    • une mise en forme conditionnelle selon le contenu de la réponse (mais la mise en forme conditionnelle est limitée)
    • la gestion de l'évènement "On Change" qui permet simplement de conserver le résultat saisie ou de remettre ton texte d'invite.

    C'est donc beaucoup plus simple qu'il n'y paraît et très fiable, mais tu ne pourras pa gérer toutes les caractéristiques de format que tu souhaitais, c'est tout.

    Bien sûr je reste à l'écoute.

    Je dirais même que je suis très heureux de ton retour, et je t'en remercie.

    Amicalement

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

    0 commentaires Aucun commentaire
  4. Anonyme
    2016-04-27T12:00:23+00:00

    Bonjour,

    Je suis désolé de n'avoir pas pu être plus assidu, masi comme dit précédement, beaucoup de boulot, d'autant que le contrat de mon collègue n'a pas été reconduit, et donc reprise/remise et autres joyeusetés...

    Bref...

    Je n'ai pas non plus encore trouvé le temps de tester les dernières propositions. J'avais bien repris cela à la maison avec l'intention d'y passer un peu de temps le weekend, mais... mon épouse en a décidé autrement! ;-)

    J'ai quand même eu le temps d'ouvrir le fichier et de jeter un oeil, ce qui me fait dire que la solution proposée est, à priori, assez complexe, mais peut être faut-il vraiment en passer par là...???

    Je suis également désolé de voir que ma demande mène finalement à une mésentente entre des membres de la communauté. Il n'y a pas de raison à cela.

    Je ne suis pas "désespéré" par "l'abandon" de Patrick; je peux fort bien comprendre qu'il n'ait pas tout son temps à consacrer au cas posé et que mon manque d'assiduité puisse avoir donné l'impression d'un manque d'intérêt de ma part, ce qui diminue d'autant sa motivation à proposer une solution.

    Cela étant, je ne suis pas sectaire et n'ai pas de raison de favoriser les propositions de l'un ou de l'autre.

    Toute proposition de solution est la bienvenue.

    Je testerai tout, dès que j'en aurai le temps.

    @ Daniel: si tu as une idée pour arriver à mes fins, je serais ravi que tu m'en fasse profiter.

    Je vous remercie tous pour votre aide et j'espère pouvoir continuer à compter sur les membres de cette communauté.

    Je reviens vers vous dès que j'aurai passé cette "mauvaise" période.

    A bientôt.

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

    0 commentaires Aucun commentaire
  5. DanielCo 107.7K Points de réputation
    2016-04-24T09:41:12+00:00

    Bonjour,

    Daniel, (tu sais ?), me signale que tu es désespéré parce que je t'ai laissé tomber.

    Ce n'est pas vrai, j'espère.

    Ah bon ? Qui a écrit ça :

    Il me semble que nous ne pourrons pas aller beaucoup plus loin que ma dernière proposition, du moins dans la formulation actuelle.

    Sauf questions supplémentaires de ta part et comme prévu, je vais mettre fin disons demain à ma carrière sur le Hub.

    J'ai compté 37 interventions de ta part sur ce fil, postés sous les avatars PW_67200, PW_67201 et, pour combien de temps, Cloopy.

    Une douzaine de posts au maximum aurait suffi à résoudre ce problème simple que tu t'es amusé à compliquer au point de laisser tomber Droopyougo au milieu du gué.

    Daniel

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

    0 commentaires Aucun commentaire