Insertion de texte avec Excel VBA

Bonjour à tous,

J'ai un tableau comportant des cellules de textes.
Je suis souvent amené à éditer ces cellules pour y inclure un ou plusieurs caractères d'une police différente, ce que je fais actuellement avec Insertion/Caractères Spéciaux ou Insertion/Symboles selon la version d'Excel.

Je souhaiterais pouvoir automatiser ces insertions à l'aide de boutons ou de combinaisons de touches associés à des macros pour éviter d'avoir à passer par les menus. Et là, je coince et je n'ai pas l'ombre d'un début de piste pour écrire le code correspondant.
J'ai beau chercher et je ne trouve rien pour avancer dans mon projet.
L'enregistreur de macro ne me donne pas un résultat satisfaisant qui me permettrait de construire quelque chose.

Ce code doit bien entendu n'être opérationnel que lorsque la cellule est en mode édition, et il doit insérer le caractère choisi à l'emplacement du curseur. Bref, ça n'est pas si simple pour un presque ancien débutant en vba comme moi.

Merci d'avance à ceux qui pourront m'aider.



--
Michel

6 réponses

  1. Bonjour,
    Mais que vous donne l'enregistreur de macro ?
    Est-il possible de le voir ?
    0
    1. Salut Le Pingou,

      J'ai ça avec l'enregistreur macro (j'ai enlevé le texte qui ne présente aucun intérêt ici):
      Sub Macro1()
      '
      ' Macro1 Macro
      '
          Range("G6").Select
          ActiveCell.FormulaR1C1 =         "xxxxxxxxxxxxxxxxxxxxx    (mon texte)        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx."
          With ActiveCell.Characters(Start:=1, Length:=22).Font
              .Name = "Arial"
              .FontStyle = "Normal"
              .Size = 10
              .Strikethrough = False
              .Superscript = False
              .Subscript = False
              .OutlineFont = False
              .Shadow = False
              .Underline = xlUnderlineStyleNone
              .ColorIndex = xlAutomatic
          End With
          With ActiveCell.Characters(Start:=23, Length:=1).Font
              .Name = "Webdings"
              .FontStyle = "Normal"
              .Size = 10
              .Strikethrough = False
              .Superscript = False
              .Subscript = False
              .OutlineFont = False
              .Shadow = False
              .Underline = xlUnderlineStyleNone
              .ColorIndex = xlAutomatic
          End With
          With ActiveCell.Characters(Start:=24, Length:=133).Font
              .Name = "Arial"
              .FontStyle = "Normal"
              .Size = 10
              .Strikethrough = False
              .Superscript = False
              .Subscript = False
              .OutlineFont = False
              .Shadow = False
              .Underline = xlUnderlineStyleNone
              .ColorIndex = xlAutomatic
          End With
          Range("G7").Select
      End Sub


      En fait, la macro n'enregistre que l'édition du texte et les polices de caractères des différentes zones (ici Arial pour l'ensemble du texte et un caractère Webdings à la position 23).

      Je pense qu'il faut utiliser la partie de code pour le caractère ajouté soit :
          ActiveCell.Characters(Start:=xx, Length:=1).Font.Name = "Webdings"
           
      mais je ne vois pas comment je peux faire pour détecter la position du pointeur (xx) dans le texte afin de définir le start, et surtout quelle instruction je dois mettre pour insérer le caractère choisi.
      0
      1. Bonjour,
        Merci pour l'information.
        J'admets que le pointeur de la souris se trouve à l'endroit de l'insertion dans le texte ... est-ce correct ?
        0
        1. Bonjour Le Pingou,
          Correct.
          1 - J'édite la cellule;
          2 - Avec la souris ou les flèches je positionne le point d'entrée où je souhaite insérer le caractère;
          3 - J'utilise l'insertion pour ajouter ce caractère.
          C'est cette dernière étape que je souhaite mettre en macro.

          Michel
          0
        2. Contributeur
          bonjour

          Une bidouille +/- foireuse

          à l'endroit voulu avec le curseur, tu mets un caractère peu commun comme "¤" et tu valides

          tu peux donc trouver la (ou les) position(s) de ce caractère et changer la police par la méthode "characters"

          à la fin de la macro tu fais un "replace" "¤" par ""

          ca devrait pouvoir se faire par fonction

          bon courage quand même! ;o)
          0
      2. Contributeur
        Bonjour,

        Je souhaite être contredit mais je doute de la faisabilité d'un tel projet.
        Lorsque tu es en édition, je pense qu'aucun évènement ne peut être intercepté, donc comment lancer ta macro ?

        Tu devrais plus orienter ta recherche vers un programme externe comme un clavier virtuel.
        ici tu en as un de paramétrable qui semblerait faire l'affaire.
        A toi de tester et de nous faire un retour ;-)

        eric
        0
        1. Salut à tous les deux,

          Merci pour vos remarques judicieuses.

          @ Eric, c'est ce qui me bloque en effet : le lancement d'une macro en cours d'édition.
          On peut, je pense, créer un pseudo clavier virtuel avec Excel VBA avec les instructions Onkey, Keypress et SendKeys. Mais toujours pareil : est-ce que ces instructions sont actives en mode édition ? Je n'en sais rien et je ne les ai jamais utilisées. Je vais essayer de creuser de ce côté.

          @ Michel_m la bidouille est réalisable et rejoint ce que je pensais faire en dernier recours. D'autant que les caractères étant en fait des caractères classiques avec un espace de part et d'autre, il suffirait de chercher ces caractères isolés dans la cellule et de changer leur police pour afficher le caractère correspondant. Mais il faut bien reconnaitre que ce n'est pas très "User friendly".
          0
          1. Contributeur
            Oui, je pense que seule la proposition de michel est réalisable.
            A la saisie ça pourrait être une combinaison de lettres ¤a pour un caractère, ¤b pour un autre, etc
            Et pourquoi pas, un formulaire non modal pour avoir un mémo des codes sous les yeux.

            eric
            0
        2. Bonjour mic13710,
          J'arrive à l'instant et je constate qu'il y a plein de bonnes idées.
          Effectivement aucune macro ne peut être déclenchée si la cellule est active, il faut passée par la proposition de Michel_m.
          Dans le cas où vous devez insérer plus d'un caractère, selon les cas, je pense qu'il serait possible de passer par un formulaire (UserForm) ....avec liste de choix!

          --
          Salutations.
          Le Pingou
          0