Macro ajout de texte avec mise en forme dans une cellule

invite

XLDnaute Nouveau
Bonjour,

L'intitulé peut paraître plus simple que ne l'est mon problème.

Je voudrais à l'aide d'une macro ajouter du texte dans la cellule active.

Par exemple j'écris "Ceci est un test" (avec ou sans mise en forme) dans une cellule puis, à l'aide de la macro, j'ajoute un texte prédéfini avec mis en forme SANS EFFACER ce qui est déjà écrit, et cerise sur le gâteau il faudrait que le curseur reste actif dans la cellule de telle sorte que je puisse continuer à écrire en gardant la même police que celle utilisée avant l'exécution de la macro.

Je vous accorde que c'est un peu complexe, j'ai déjà créé cette macro sous word, puis sous outlook et il me la faudrait maintenant sous excel parce qu'évidemment le code de word ne marche pas sous excel ni outlook et inversement.


Est-ce que des connaisseurs ont des idées?
 

francedemo

XLDnaute Occasionnel
Re : Macro ajout de texte avec mise en forme dans une cellule

bonjour,
début de piste à tester:
Code:
dim X as string
dim Y as string

x = activecell.value
y = "Test sans effacer"
activecell.value = x & " " & y
en supposant que le texte fixe s'ajoute à la fin de ta cellule
à+
 

invite

XLDnaute Nouveau
Re : Macro ajout de texte avec mise en forme dans une cellule

Merci de répondre aussi vite,

Effectivement ton code me permet d'ajouter sans effacer, mais comment je fais pour affecter un texte mis en forme à la chaine Y sachant que la police et la couleur varient dans le texte prédéfini?


EDIT: J'aurais bien écris mon texte fixe dans une autre cellule puis attribué le texte à Y avant de le coller dans la cellule active mais excel ne semble pas garder la mise en forme du texte lors d'un copier/coller.
 
Dernière édition:

invite

XLDnaute Nouveau
Re : Macro ajout de texte avec mise en forme dans une cellule

J'ai un peu avancé ce matin,

Ta première piste m'a été très utile j'ai en fait fait comme suit pour avoir mon texte mis en forme à la suite :

Code:
Sub test()
    Dim nb As Integer
    nb = ActiveCell.Characters.Count

    ActiveCell.Value = ActiveCell.Value & " " & "test"

    With ActiveCell.Characters(Start:=nb + 2, Length:=2).Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 11
    End With
    With ActiveCell.Characters(Start:=nb + 4, Length:=).Font
        .Name = "Calibri"
        .FontStyle = "Normal"
        .Size = 11
    End With
End Sub

J'ai donc mon texte initial plus mon texte mis en forme dans la même cellule.
Maintenant j'ai du mal a récupérer la police utilisée avant l’exécution de la macro, sachant qu'il faut récupérer la police du dernier mot (au cas où d'autres soient en gras, italiques,etc...).

J'ai essayé les fonctions mid() et left() mais elles ne semblent pas s'appliquer à des cellules, seulement à des chaines de caractères. Y-aurait-il une fonction qui permet de faire ça?
 

francedemo

XLDnaute Occasionnel
Re : Macro ajout de texte avec mise en forme dans une cellule

re,

à tester:
Code:
Sub test()
    Dim nb As Integer
    nb = ActiveCell.Characters.Count
    pol = ActiveCell.Characters(Start:=nb - 1, Length:=1).Font.Name
    ActiveCell.Value = ActiveCell.Value & " " & "test"

    With ActiveCell.Characters(Start:=nb + 2, Length:=2).Font
        .Name = "Arial"
        .FontStyle = "Normal"
        .Size = 11
    End With
    With ActiveCell.Characters(Start:=nb + 4, Length:=10).Font
        .Name = "Calibri"
        .FontStyle = "Normal"
        .Size = 11
    End With
End Sub
tu ajoute une variable "pol" pour récupérer la police du dernier caractère de ta cellule active avant modification
à+
 

invite

XLDnaute Nouveau
Re : Macro ajout de texte avec mise en forme dans une cellule

Bien vu, j'avais déjà essayé mais j'ai dû me tromper quelque part.
Mon code ressemble à ca maintenant :

Code:
Sub test()

    Dim nb As Integer
    nb = ActiveCell.Characters.Count

    police = ActiveCell.Characters(Start:=nb - 1, Length:=1).Font.Name
    taille = ActiveCell.Characters(Start:=nb - 1, Length:=1).Font.Size
    couleur = ActiveCell.Characters(Start:=nb - 1, Length:=1).Font.Color

    ActiveCell.Copy
    ActiveCell.Value = ActiveCell.Value & " " & "aktya "

    With ActiveCell.Characters(Start:=nb + 2, Length:=2).Font
        .Name = "Arno Pro"
        .FontStyle = "Normal"
        .Size = 11
    End With
    With ActiveCell.Characters(Start:=nb + 4, Length:=4).Font
        .Name = "Square721 BT"
        .FontStyle = "Normal"
        .Size = 11
    End With
    With ActiveCell.Characters(Start:=nb + 7, Length:=2).Font
        .Name = police
        .Size = taille
        .Color = couleur
    End With
End Sub

Dernière question, est-il possible de placer le curseur dans la cellule active pour continuer à écrire?
 

invite

XLDnaute Nouveau
Re : Macro ajout de texte avec mise en forme dans une cellule

J'ai peut-être trouvé un début de solution :

Code:
Declare Function SetCaretPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

  ' Routine to set cursor position
   Sub Set_Cursor_Pos()

   ' Looping routine that positions the cursor
       For x = 1 To 480 Step 20
           SetCursorPos x, x
           For y = 1 To 40000: Next
       Next x
   End Sub

Ca vient de chez microsoft, mais j'ai une erreur à chaque fois : erreur de compilation seuls des commentaires peuvent apparaitre après end sub,end fonction. J'ai mis la première ligne (Declare Function...) juste avant le End Sub de ma macro et ca me met cette erreur.

Est-ce qu'au moins c'est la bonne fonction ou il y a mieux?
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 149
Membres
103 132
dernier inscrit
hedfahmi