Retirer code HTML des cellules - expression régulière

arthurho

XLDnaute Junior
Bonjour,

J'ai fait une macro permettant de retirer les balises HTML des cellules.
Malheureusement, je n'arrive pas à retirer des bouts de code HTML du type ⁢ & $nbsp;

Le pattern pour retirer ces morceaux de code est fait, mais le problème vient de la phase de test.

Voici le code utilisé :
Code:
Sub RemoveTags()
Dim r As Range, teststr As String
'Selection.NumberFormat = "@"  'set cells to text numberformat
Selection.NumberFormat = "0.00E+00"

With CreateObject("vbscript.regexp")
  .Global = True
  For Each r In Selection
    .Pattern = "(\<.*?\>)"
    r.Value = .Replace(r.Value, " ")
    
    .Pattern = "\&.*?\;"
    'If .test("&amp;") = True Then r.Value = .Replace(r.Value, "&")
    If .test("&It;") = True Then r.Value = .Replace(r.Value, "<")
    'If .test("&gt;") = True Then r.Value = Replace(r.Value, ">")
    'If .test("&quot;") = True Then r.Value = .Replace(r.Value, "'")
  
  Next r

End With
End Sub

Avez vous une solution ?
Merci,
Arthur HO.
 

Pièces jointes

  • Classeur2.xls
    27 KB · Affichages: 54
  • Classeur2.xls
    27 KB · Affichages: 59
  • Classeur2.xls
    27 KB · Affichages: 53

JNP

XLDnaute Barbatruc
Re : Retirer code HTML des cellules - expression régulière

Bonjour Arthurho :),
Pourtant fan de RegExp, je la jouerais plutôt comme ça :p...
Bonne suite :cool:
Ajout : Salut David :)
 

Pièces jointes

  • HTML.xlsm
    17.5 KB · Affichages: 69
Dernière édition:

david84

XLDnaute Barbatruc
Re : Retirer code HTML des cellules - expression régulière

Bonjour,
avec un seul exemple, difficile de réellement comprendre ce que tu veux obtenir au final.
Ci-joint une proposition à tester :
Code:
Sub RemoveTags()
Dim r As Range, teststr As String, oRegExp As Object, Matches As Object
Selection.NumberFormat = "0.00E+00"
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
  .Global = True
  .ignorecase = True
  For Each r In Selection
    .Pattern = "(\<.*?\>)"
    Set Matches = .Execute(r)
    r.Value = .Replace(r.Value, " ")
    
    .Pattern = "(\&lt\;)"
    Set Matches = .Execute(r)
    r.Value = .Replace(r.Value, "<")
    
    .Pattern = "(\&amp\;)"
    Set Matches = .Execute(r)
    r.Value = .Replace(r.Value, "&")
    
    .Pattern = "(\&gt\;)"
    Set Matches = .Execute(r)
    r.Value = .Replace(r.Value, ">")
    
    .Pattern = "(\&quot\;)"
    Set Matches = .Execute(r)
    r.Value = .Replace(r.Value, "'")
    
  Next r

End With
End Sub

Je t'ai laissé les .Execute pour que tu puisses vérifier les items retournés par le motif.
Certaines sous-chaînes que tu as recensées n'existent pas dans la chaîne de l'exemple mais peut-être sont-ils présent ailleurs.

Quant à ton Selection.NumberFormat, je ne sais pas à quoi il te sert.
A+
 

arthurho

XLDnaute Junior
Re : Retirer code HTML des cellules - expression régulière

Bonjour,

Merci pour vos deux propositions, le code de JNP est plus optimisé que le mien, pour 10000 lignes cest important.
La plage nommée est par contre impossible à utiliser car je génère le code HTML par une macro, récupérant des données en base.

Je vais regarder ca, merci encore.
 

JNP

XLDnaute Barbatruc
Re : Retirer code HTML des cellules - expression régulière

Re :),
La plage nommée est par contre impossible à utiliser car je génère le code HTML par une macro, récupérant des données en base.
Je ne vois pas où ça pose problème, mes plages nommées n'étant que pour le tableau d'équivalence indispensable aux remplacements :confused:...
Il peut être éventuellement mis dans un classeur à côté :rolleyes:...
Bonne suite :cool:
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 957
Membres
103 990
dernier inscrit
lamiadebz