Insertion de texte avec Excel VBA

mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   -  
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   -
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.


A voir également:

6 réponses

Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
Bonjour,
Mais que vous donne l'enregistreur de macro ?
Est-il possible de le voir ?
0
mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
 
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
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
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
mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
 
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
 
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
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
Le Pingou Messages postés 12713 Date d'inscription   Statut Contributeur Dernière intervention   1 467
 
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