[VBA] Changer [b]toto[/b] en toto gras

en toto gras [VBA] Changer [b]toto[/b] - VB/VBA/VBS - Programmation

Marsh Posté le 25-01-2005 à 15:56:58    

J'ai une macro Word, qui va chercher du texte mis en forme à la sauce phpbb. Le but du jeu, c'est de le rendre correctement dans Word.
 
Comment faire ?
 
En entrée, j'ai par exemple une chaîne de caractères qui contient :
 

[b]toto[/b] va à la [i]pêche[/i]


 
Je fais comment pour avoir "toto va à la pêche" dans Word ? :sweat:


Message édité par Arjuna le 25-01-2005 à 15:57:33
Reply

Marsh Posté le 25-01-2005 à 15:56:58   

Reply

Marsh Posté le 25-01-2005 à 16:04:11    

remplace [ par < et ] par > et ouvre en HTML ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 25-01-2005 à 16:13:36    

Oui mais nan, c'est un document word "normal". A moins que tu aie une idée de comment faire.
 
En fait, j'ai un document Word, et une macro dedans.
J'ai une macro "autotext" qui me permet de choisir dans une liste de templates une chaîne de caractères toute faite, contenant ces codes phpbb. Et je veux l'insérer, et mettre en forme selon les tags phpbb.

Reply

Marsh Posté le 25-01-2005 à 16:34:28    

Moi j'y connais rien, mais générer un doc temporaire en pseudo html et récupérer son contenu traité par Word c'est pas possible ? Enfin c'était une idée pour une solution rapide. Si tu veux un truc propre faut te coder un mini parser (les regex sont tes amies).
http://www.knowdotnet.com/articles/regexreplace.html


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 25-01-2005 à 17:32:12    

With ActiveDocument.Content.Find
    .Text = "\[b\](*)\[/b\]"
    .Replacement.Text = "\1"
    .Replacement.Font.Bold = True
    .MatchWildcards = True
    .Execute Forward:=True, Replace:=wdReplaceAll
End With
 
With ActiveDocument.Content.Find
    .Text = "\[i\](*)\[/i\]"
    .Replacement.Text = "\1"
    .Replacement.Font.Italic = True
    .MatchWildcards = True
    .Execute Forward:=True, Replace:=wdReplaceAll
End With


 
Ca fera 50€ !
 
Suffit de regarder un peu dans l'aide VBA de Word ...


Message édité par Mara's dad le 25-01-2005 à 17:41:49

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 25-01-2005 à 17:49:01    

Mara's dad a écrit :

With ActiveDocument.Content.Find
    .Text = "\[b\](*)\[/b\]"
    .Replacement.Text = "\1"
    .Replacement.Font.Bold = True
    .MatchWildcards = True
    .Execute Forward:=True, Replace:=wdReplaceAll
End With
 
With ActiveDocument.Content.Find
    .Text = "\[i\](*)\[/i\]"
    .Replacement.Text = "\1"
    .Replacement.Font.Italic = True
    .MatchWildcards = True
    .Execute Forward:=True, Replace:=wdReplaceAll
End With


 
Ca fera 50€ !
 
Suffit de regarder un peu dans l'aide VBA de Word ...


 
Ben j'ai pas l'aide de VBA, ici on a des master de merde sans rien dessus [:spamafote]
 
Avec l'aide, j'ai fait ça (et c'est buggé jusqu'à la moëlle m'enfin ça marche... lentement :D)
 

Code :
  1. Dim i As Long
  2.         Dim charsCount As Long
  3.        
  4.         i = 1
  5.         charsCount = ThisDocument.Characters.Count
  6.         Do While i <= charsCount
  7.             If ThisDocument.Characters(i) = "[" Then
  8.                 Select Case UCase(ThisDocument.Characters(i + 1))
  9.                 Case "B":
  10.                     ThisDocument.Characters(i + 2).Delete
  11.                     ThisDocument.Characters(i + 1).Delete
  12.                     ThisDocument.Characters(i).Delete
  13.                     charsCount = ThisDocument.Characters.Count
  14.                     j = i
  15.                     Do While j <= charsCount
  16.                         If ThisDocument.Characters(j) = "[" And ThisDocument.Characters(j + 1) = "/" Then
  17.                             Select Case UCase(ThisDocument.Characters(j + 2))
  18.                             Case "B":
  19.                                 ThisDocument.Characters(j + 3).Delete
  20.                                 ThisDocument.Characters(j + 2).Delete
  21.                                 ThisDocument.Characters(j + 1).Delete
  22.                                 ThisDocument.Characters(j).Delete
  23.                                 If ThisDocument.Characters(j) <> " " And ThisDocument.Characters(j) <> "." And ThisDocument.Characters(j) <> "," And ThisDocument.Characters(j) <> ";" Then
  24.                                     If ThisDocument.Characters(j - 1) <> " " And ThisDocument.Characters(j - 1) <> vbCr Then
  25.                                         ThisDocument.Characters(j).Text = " " & ThisDocument.Characters(j).Text
  26.                                     End If
  27.                                 End If
  28.                                 charsCount = ThisDocument.Characters.Count
  29.                                 Exit Do
  30.                             Case Else:
  31.                             End Select
  32.                         End If
  33.                         ThisDocument.Characters(j).Bold = True
  34.                         j = j + 1
  35.                     Loop
  36.                 Case "U":
  37.                     ThisDocument.Characters(i + 2).Delete
  38.                     ThisDocument.Characters(i + 1).Delete
  39.                     ThisDocument.Characters(i).Delete
  40.                     charsCount = ThisDocument.Characters.Count
  41.                     j = i
  42.                     Do While j <= charsCount
  43.                         If ThisDocument.Characters(j) = "[" And ThisDocument.Characters(j + 1) = "/" Then
  44.                             Select Case UCase(ThisDocument.Characters(j + 2))
  45.                             Case "U":
  46.                                 ThisDocument.Characters(j + 3).Delete
  47.                                 ThisDocument.Characters(j + 2).Delete
  48.                                 ThisDocument.Characters(j + 1).Delete
  49.                                 ThisDocument.Characters(j).Delete
  50.                                 If ThisDocument.Characters(j) <> " " And ThisDocument.Characters(j) <> "." And ThisDocument.Characters(j) <> "," And ThisDocument.Characters(j) <> ";" Then
  51.                                     If ThisDocument.Characters(j - 1) <> " " Then
  52.                                         ThisDocument.Characters(j).Text = " " & ThisDocument.Characters(j).Text
  53.                                     End If
  54.                                 End If
  55.                                 charsCount = ThisDocument.Characters.Count
  56.                                 Exit Do
  57.                             Case Else:
  58.                             End Select
  59.                         End If
  60.                         ThisDocument.Characters(j).Underline = True
  61.                         j = j + 1
  62.                     Loop
  63.                 Case "I":
  64.                     ThisDocument.Characters(i + 2).Delete
  65.                     ThisDocument.Characters(i + 1).Delete
  66.                     ThisDocument.Characters(i).Delete
  67.                     charsCount = ThisDocument.Characters.Count
  68.                     j = i
  69.                     Do While j <= charsCount
  70.                         If ThisDocument.Characters(j) = "[" And ThisDocument.Characters(j + 1) = "/" Then
  71.                             Select Case UCase(ThisDocument.Characters(j + 2))
  72.                             Case "I":
  73.                                 ThisDocument.Characters(j + 3).Delete
  74.                                 ThisDocument.Characters(j + 2).Delete
  75.                                 ThisDocument.Characters(j + 1).Delete
  76.                                 ThisDocument.Characters(j).Delete
  77.                                 If ThisDocument.Characters(j) <> " " And ThisDocument.Characters(j) <> "." And ThisDocument.Characters(j) <> "," And ThisDocument.Characters(j) <> ";" Then
  78.                                     If ThisDocument.Characters(j - 1) <> " " Then
  79.                                         ThisDocument.Characters(j).Text = " " & ThisDocument.Characters(j).Text
  80.                                     End If
  81.                                 End If
  82.                                 charsCount = ThisDocument.Characters.Count
  83.                                 Exit Do
  84.                             Case Else:
  85.                             End Select
  86.                         End If
  87.                         ThisDocument.Characters(j).Italic = True
  88.                         j = j + 1
  89.                     Loop
  90.                 Case "1":
  91.                     ThisDocument.Characters(i + 2).Delete
  92.                     ThisDocument.Characters(i + 1).Delete
  93.                     ThisDocument.Characters(i).Delete
  94.                     charsCount = ThisDocument.Characters.Count
  95.                     j = i
  96.                     Do While j <= charsCount
  97.                         If ThisDocument.Characters(j) = "[" And ThisDocument.Characters(j + 1) = "/" Then
  98.                             Select Case UCase(ThisDocument.Characters(j + 2))
  99.                             Case "1":
  100.                                 ThisDocument.Characters(j + 3).Delete
  101.                                 ThisDocument.Characters(j + 2).Delete
  102.                                 ThisDocument.Characters(j + 1).Delete
  103.                                 ThisDocument.Characters(j).Delete
  104.                                 If ThisDocument.Characters(j) <> " " And ThisDocument.Characters(j) <> "." And ThisDocument.Characters(j) <> "," And ThisDocument.Characters(j) <> ";" Then
  105.                                     If ThisDocument.Characters(j - 1) <> " " Then
  106.                                         ThisDocument.Characters(j).Text = " " & ThisDocument.Characters(j).Text
  107.                                     End If
  108.                                 End If
  109.                                 charsCount = ThisDocument.Characters.Count
  110.                                 Exit Do
  111.                             Case Else:
  112.                             End Select
  113.                         End If
  114.                         ThisDocument.Characters(j).Font.Size = "8"
  115.                         j = j + 1
  116.                     Loop
  117.                 Case "2":
  118.                     ThisDocument.Characters(i + 2).Delete
  119.                     ThisDocument.Characters(i + 1).Delete
  120.                     ThisDocument.Characters(i).Delete
  121.                     charsCount = ThisDocument.Characters.Count
  122.                     j = i
  123.                     Do While j <= charsCount
  124.                         If ThisDocument.Characters(j) = "[" And ThisDocument.Characters(j + 1) = "/" Then
  125.                             Select Case UCase(ThisDocument.Characters(j + 2))
  126.                             Case "2":
  127.                                 ThisDocument.Characters(j + 3).Delete
  128.                                 ThisDocument.Characters(j + 2).Delete
  129.                                 ThisDocument.Characters(j + 1).Delete
  130.                                 ThisDocument.Characters(j).Delete
  131.                                 If ThisDocument.Characters(j) <> " " And ThisDocument.Characters(j) <> "." And ThisDocument.Characters(j) <> "," And ThisDocument.Characters(j) <> ";" Then
  132.                                     If ThisDocument.Characters(j - 1) <> " " Then
  133.                                         ThisDocument.Characters(j).Text = " " & ThisDocument.Characters(j).Text
  134.                                     End If
  135.                                 End If
  136.                                 charsCount = ThisDocument.Characters.Count
  137.                                 Exit Do
  138.                             Case Else:
  139.                             End Select
  140.                         End If
  141.                         ThisDocument.Characters(j).Font.Size = "10"
  142.                         j = j + 1
  143.                     Loop
  144.                 Case "3":
  145.                     ThisDocument.Characters(i + 2).Delete
  146.                     ThisDocument.Characters(i + 1).Delete
  147.                     ThisDocument.Characters(i).Delete
  148.                     charsCount = ThisDocument.Characters.Count
  149.                     j = i
  150.                     Do While j <= charsCount
  151.                         If ThisDocument.Characters(j) = "[" And ThisDocument.Characters(j + 1) = "/" Then
  152.                             Select Case UCase(ThisDocument.Characters(j + 2))
  153.                             Case "3":
  154.                                 ThisDocument.Characters(j + 3).Delete
  155.                                 ThisDocument.Characters(j + 2).Delete
  156.                                 ThisDocument.Characters(j + 1).Delete
  157.                                 ThisDocument.Characters(j).Delete
  158.                                 If ThisDocument.Characters(j) <> " " And ThisDocument.Characters(j) <> "." And ThisDocument.Characters(j) <> "," And ThisDocument.Characters(j) <> ";" Then
  159.                                     If ThisDocument.Characters(j - 1) <> " " Then
  160.                                         ThisDocument.Characters(j).Text = " " & ThisDocument.Characters(j).Text
  161.                                     End If
  162.                                 End If
  163.                                 charsCount = ThisDocument.Characters.Count
  164.                                 Exit Do
  165.                             Case Else:
  166.                             End Select
  167.                         End If
  168.                         ThisDocument.Characters(j).Font.Size = "12"
  169.                         j = j + 1
  170.                     Loop
  171.                 Case "4":
  172.                     ThisDocument.Characters(i + 2).Delete
  173.                     ThisDocument.Characters(i + 1).Delete
  174.                     ThisDocument.Characters(i).Delete
  175.                     charsCount = ThisDocument.Characters.Count
  176.                     j = i
  177.                     Do While j <= charsCount
  178.                         If ThisDocument.Characters(j) = "[" And ThisDocument.Characters(j + 1) = "/" Then
  179.                             Select Case UCase(ThisDocument.Characters(j + 2))
  180.                             Case "4":
  181.                                 ThisDocument.Characters(j + 3).Delete
  182.                                 ThisDocument.Characters(j + 2).Delete
  183.                                 ThisDocument.Characters(j + 1).Delete
  184.                                 ThisDocument.Characters(j).Delete
  185.                                 If ThisDocument.Characters(j) <> " " And ThisDocument.Characters(j) <> "." And ThisDocument.Characters(j) <> "," And ThisDocument.Characters(j) <> ";" Then
  186.                                     If ThisDocument.Characters(j - 1) <> " " Then
  187.                                         ThisDocument.Characters(j).Text = " " & ThisDocument.Characters(j).Text
  188.                                     End If
  189.                                 End If
  190.                                 charsCount = ThisDocument.Characters.Count
  191.                                 Exit Do
  192.                             Case Else:
  193.                             End Select
  194.                         End If
  195.                         ThisDocument.Characters(j).Font.Size = "14"
  196.                         j = j + 1
  197.                     Loop
  198.                 Case "5":
  199.                     ThisDocument.Characters(i + 2).Delete
  200.                     ThisDocument.Characters(i + 1).Delete
  201.                     ThisDocument.Characters(i).Delete
  202.                     charsCount = ThisDocument.Characters.Count
  203.                     j = i
  204.                     Do While j <= charsCount
  205.                         If ThisDocument.Characters(j) = "[" And ThisDocument.Characters(j + 1) = "/" Then
  206.                             Select Case UCase(ThisDocument.Characters(j + 2))
  207.                             Case "5":
  208.                                 ThisDocument.Characters(j + 3).Delete
  209.                                 ThisDocument.Characters(j + 2).Delete
  210.                                 ThisDocument.Characters(j + 1).Delete
  211.                                 ThisDocument.Characters(j).Delete
  212.                                 If ThisDocument.Characters(j) <> " " And ThisDocument.Characters(j) <> "." And ThisDocument.Characters(j) <> "," And ThisDocument.Characters(j) <> ";" Then
  213.                                     If ThisDocument.Characters(j - 1) <> " " Then
  214.                                         ThisDocument.Characters(j).Text = " " & ThisDocument.Characters(j).Text
  215.                                     End If
  216.                                 End If
  217.                                 charsCount = ThisDocument.Characters.Count
  218.                                 Exit Do
  219.                             Case Else:
  220.                             End Select
  221.                         End If
  222.                         ThisDocument.Characters(j).Font.Size = "16"
  223.                         j = j + 1
  224.                     Loop
  225.                 Case Else:
  226.                 End Select
  227.             End If
  228.             i = i + 1
  229.         Loop


 
vivi, caractère par caractère... pis quand on vire un caractère à côté d'un espace, ça vire l'espace, alors faut le remettre :sol:
 
Je remplace tout de suite par ton truc :whistle:

Reply

Marsh Posté le 25-01-2005 à 17:55:15    

Ca va vachement plus vite avec ton système :D

Reply

Marsh Posté le 25-01-2005 à 17:59:42    

Quand on a le net et pas l'aide...
http://msdn.microsoft.com/library/ [...] bjfind.asp


Message édité par Mara's dad le 25-01-2005 à 18:00:09

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 25-01-2005 à 18:19:48    

Merci :jap:
 
Le seul souci, c'est que la MSDN en ligne, j'arrive jamais à trouver ce que je cherche (alors que dans les CD, j'y arrive...) Faut que je m'y habitue :)

Reply

Marsh Posté le 20-05-2005 à 11:23:30    

Salut à tous,
 
J'ai essayé :
 

Code :
  1. With ActiveDocument.Content.Find
  2.     .Text = "\[b\](*)\[/b\]"
  3.     .Replacement.Text = "\1"
  4.     .Replacement.Font.Bold = True
  5.     .MatchWildcards = True
  6.     .Execute Forward:=True, Replace:=wdReplaceAll
  7. End With
  8. With ActiveDocument.Content.Find
  9.     .Text = "\[i\](*)\[/i\]"
  10.     .Replacement.Text = "\1"
  11.     .Replacement.Font.Italic = True
  12.     .MatchWildcards = True
  13.     .Execute Forward:=True, Replace:=wdReplaceAll
  14. End With


 
Mais malheureusement, je reçois une erreur me disant que la méthode Replacemen de l'objet Find a échoué... est-ce que qqn pourrait m'aider, je commence vraiment à désespérer....
 
NB, je bosse sur un projet en VB6.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed