Insertion de texte avec Excel VBA

Fermé
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 - 4 nov. 2011 à 21:11
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 - 5 nov. 2011 à 23:06
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 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
4 nov. 2011 à 22:25
Bonjour,
Mais que vous donne l'enregistreur de macro ?
Est-il possible de le voir ?
0
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 353
4 nov. 2011 à 23:34
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 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
5 nov. 2011 à 10:45
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 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 353
5 nov. 2011 à 12:43
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
5 nov. 2011 à 13:56
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 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié par eriiic le 5/11/2011 à 14:17
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 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 353
5 nov. 2011 à 17:01
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 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
5 nov. 2011 à 21:22
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 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
5 nov. 2011 à 23:06
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