[VBA] ajouter des balises html autours de ma selection

axel584

XLDnaute Nouveau
Bonjour,
Je recherche à faire une macro qui ajoute du texte à droite et à gauche du texte sélectionné (à l'intérieur d'une cellule)
Je voudrais que dans ma cellule :
La recherche du temps perdu de Marcel Proust
Je puisse sélectionner "La recherche du temps perdu" et exécuter une macro (par un bouton ou un raccourci clavier) et qu'il me remplace le texte par :
<i>La recherche du temps perdu</i> de Marcel Proust

Mais je n'arrive pas à exécuter une macro quand une partie de cellule est sélectionnée.

Une autre solution qui pourrait me combler serait une macro qui parcoure toutes les cellules et qui ajoute automatiquement <i> et </i> quand il trouve du texte enrichi en italique. Mais cette deuxième solution me semblait plus difficile à faire que la première.

Merci beaucoup pour votre aide,

Axel
 

job75

XLDnaute Barbatruc
Re : [VBA] ajouter des balises html autours de ma selection

Bonjour axel584, bienvenue sur XLD,

Avec cette fonction VBA (dans Module1, Alt+F11) :

Code:
Function ITALIQUE$(cel As Range)
Dim i%, txt1$, txt2$
For i = 1 To Len(cel)
  txt1 = "": txt2 = ""
  If cel.Characters(i, 1).Font.Italic Then
    If i = 1 Then txt1 = "<i>"
    If i > 1 Then If Not cel.Characters(i - 1, 1).Font.Italic Then txt1 = "<i>"
  Else
    If i > 1 Then If cel.Characters(i - 1, 1).Font.Italic Then txt2 = "</i>"
  End If
  ITALIQUE = ITALIQUE & txt1 & txt2 & Mid(cel, i, 1)
Next
End Function
Fichier joint.

A+
 

Pièces jointes

  • Italique(1).xls
    36.5 KB · Affichages: 126

job75

XLDnaute Barbatruc
Re : [VBA] ajouter des balises html autours de ma selection

Re,

Voilà qui est mieux :

Code:
Function ITALIQUE$(cel As Range)
Dim i%, txt1$, txt2$
For i = 1 To Len(cel)
  txt1 = "": txt2 = ""
  If cel.Characters(i, 1).Font.Italic Then
    If i = 1 Or Not cel.Characters(i - 1, 1).Font.Italic Then txt1 = "<i>"
  Else
    If cel.Characters(i - 1, 1).Font.Italic Then txt2 = "</i>"
  End If
  ITALIQUE = ITALIQUE & txt1 & txt2 & Mid(cel, i, 1)
Next
If ITALIQUE <> "" And cel.Characters(i - 1, 1).Font.Italic Then ITALIQUE = ITALIQUE & "</i>"
End Function
Fichier (2).

A+
 

Pièces jointes

  • Italique(2).xls
    36.5 KB · Affichages: 119
Dernière édition:

job75

XLDnaute Barbatruc
Re : [VBA] ajouter des balises html autours de ma selection

Re,

On peut bien sûr utiliser une procédure Sub :

Code:
Sub Italique()
Dim cel As Range, txt$, i%, txt1$, txt2$
For Each cel In Range("A2", [A65536].End(xlUp))
  txt = ""
  For i = 1 To Len(cel)
    txt1 = "": txt2 = ""
    If cel.Characters(i, 1).Font.Italic Then
      If i = 1 Or Not cel.Characters(i - 1, 1).Font.Italic Then txt1 = "<i>"
    Else
      If cel.Characters(i - 1, 1).Font.Italic Then txt2 = "</i>"
    End If
    txt = txt & txt1 & txt2 & Mid(cel, i, 1)
  Next
  If txt <> "" And cel.Characters(i - 1, 1).Font.Italic Then txt = txt & "</i>"
  cel.Offset(, 1) = txt
Next
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Italique(3).xls
    41.5 KB · Affichages: 111
Dernière édition:

job75

XLDnaute Barbatruc
Re : [VBA] ajouter des balises html autours de ma selection

Bonjour axel584, le forum,

Finalement le fichier joint traite simultanément les balises Gras <b>, Italique <i>, Souligné <u>.

Pas de distinction entre soulignés simple et double, il serait facile de la faire.

Les macros sont plus logiques, je n'utilise plus les variables txt1 et txt2...

La 1ère feuille pour la procédure Sub, la 2ème pour la fonction BALISE.

A+
 

Pièces jointes

  • Balises(1).xls
    52.5 KB · Affichages: 81

JNP

XLDnaute Barbatruc
Re : [VBA] ajouter des balises html autours de ma selection

Bonjour le fil :),
Finalement le fichier joint traite simultanément les balises Gras <b>, Italique <i>, Souligné <u>.
Juste un coucou pour féliciter l'ami Job :p.
Félicitation, beau travail ;) !
Tu vas pouvoir t'attaquer à <FONT=aaa>, <SIZE=xx> et <COLOR=bbb> :rolleyes:...
Plus sérieusement, c'est dommage qu'on ne puisse pas (enfin je pense :eek:) utiliser des Array pour boucler avec les propriétés (.Bold, .Italic, .Underline) :eek:...
Mais cette fonction pourra servir à ceux qui veulent garder la présentation en récupérant du texte dans les cellule pour le corps de message d'un mail :p !
Bon WE :cool:
 

job75

XLDnaute Barbatruc
Re : [VBA] ajouter des balises html autours de ma selection

Bonjour Jean-Noël,

Félicitation, beau travail ;) !

Merci beaucoup, mais ce n'était pas parfait...

Je viens juste de m'apercevoir qu'il faut mettre les 3 codes de fermeture des balises avant les 3 codes d'ouverture :)

Voyez par exemple en ligne 3 où "XXX " (avec l'espace) est mis en Gras.

Donc utilisez cette version (2).

A+
 

Pièces jointes

  • Balises(2).xls
    50.5 KB · Affichages: 77

job75

XLDnaute Barbatruc
Re : [VBA] ajouter des balises html autours de ma selection

Bonjour le fil, le forum,

Sur mon vieil ordi (2 Ghz) avec Excel 2003, le traitement de la cellule A3 s'effectuait en 123 millisecondes.

C'est très très long :mad:

Avec cette version (3) j'utilise 3 tableaux, le traitement s'effectue en 31 millisecondes :)

Il me paraît difficile d'améliorer encore cette version.

Edit : édifiant de noter que 97% du temps de traitement provient de ces 3 instructions :

Code:
B(n) = .Bold
I(n) = .Italic
U(n) = .Underline <> xlUnderlineStyleNone
Donc si l'on veut ne traiter qu'une ou 2 balises, il suffit de mettre en commentaires, parmi ces 3 instructions, celles qui seront inutilisées.

A+
 

Pièces jointes

  • Balises(3).xls
    51.5 KB · Affichages: 139
Dernière édition:

job75

XLDnaute Barbatruc
Re : [VBA] ajouter des balises html autours de ma selection

Re,

Cette version (4) c'est pour le fun :cool:

C'est la 1ère fois que je rentre dans une boucle après en être sorti :confused:

Ce n'est guère académique... Mais le code est allégé.

Et le temps de calcul n'est pratiquement pas augmenté.

A+
 

Pièces jointes

  • Balises(4) pour le fun.xls
    60.5 KB · Affichages: 89

Discussions similaires

Réponses
6
Affichages
293

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260