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. Anonyme
    2016-04-05T14:00:10+00:00

    Merci Droopy,

    C'est une maquette: on n'approfondira que les pistes que tu auras validées.

    Le formulaire est là pour me simplifier la tâche; lorsque le modèle sera définitif, on pourra envisager autre chose...

    Bon atterrissage

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

    0 commentaires Aucun commentaire
  2. Anonyme
    2016-04-05T13:33:10+00:00

    Bonjour Patrick,

    Je suis désolé de n'avoir pas pu te répondre plus tôt... trop pris par le boulot.

    J'ai finalement pu aller charger ta proposition et la lancer.

    Les premiers essais ne sont pas vraiment concluants, mais je n'ai pas encore eu le temps de regarder cela en détails. Ce sera sans doute pour demain, si j'arrive à me ménager un peu de temps.

    Je te tiens au courant dès que possible.

    Merci encore.

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

    0 commentaires Aucun commentaire
  3. Anonyme
    2016-04-04T04:27:34+00:00

    Bonjour Droopy,

    Si tu veux bien tester la proposition suivante: http://dl.free.fr/jLy8hfF8g

    J'ai un peu le trac: la difficulté réelle du problème, c'est l'interaction entre:

    • le contrôle évènementiel sur changement de valeurs, qui veut se déclencher à chaque changement...
    • les séries de cellules dans lesquelles le traitement est normal, mais dont la modification lance le contrôle évènementiel...

    C'est pour cette raison que tu trouveras dans chacune des procédures une instruction "on error goto ...", qui permet d'éliminer l'arrêt sur erreur.

    J'espérais trouver une solution plus élégante, ce n'est pas le cas ici; ce n'est pas exclu plus tard, mais pour l'instant, j'attends ton verdict et tes expérimentations.

    Après, on pourra toujours améliorer, modifier, consolider, documenter.

    A tout à l'heure

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

    0 commentaires Aucun commentaire
  4. Anonyme
    2016-04-01T20:20:06+00:00

    Bonsoir Droopy,

    Oui, ça aide énormément: je ne vais pas tenter maintenant de te dire pourquoi, parce qu'il faut les idées claires.

    Mais nous devrions pouvoir simplifier beaucoup et c'est ce qui va compter.

    Une petite nuit sur cette bonne nouvelle, et j'aurai sans doute une formulation.

    Merci, et bonne nuit.

    Cordialement

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

    0 commentaires Aucun commentaire
  5. Anonyme
    2016-04-01T09:44:08+00:00

    Bonjour Patrick,

    Le formulaire est un questionnaire qui devrait, en principe, être rempli dans l'ordre des questions.

    Les questions ouvertes sont, en général, en rapport avec une question précédente dont les réponses formatées pourraient ne pas couvrir tous les cas de figure. 

    Je dirais donc que les réponses sont supposées être "saisies" consécutivement.

    Est-ce que cela t'aide dans ta réflexion?

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

    0 commentaires Aucun commentaire