Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1271 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro pour éliminer des caractères spécifiques

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Macro pour éliminer des caractères spécifiques

n°2100277
arsene12
Posté le 08-09-2011 à 06:58:43  profilanswer
 

Bonjour,
 
J'ai un texte comme ceci : ***(u 4sd6s4fs4fs-+lk 41s szzf_z43sf=/<<ùlx*** J'aimerai en utilisant VBA Word créér un programme qui me permette de conserver que les lettres alphabétiques et les chiffres et éliminer tout le reste, y compris les espaces. Est-ce que quelqu'un saurait comment faire cette macro? Merci d'avance.

mood
Publicité
Posté le 08-09-2011 à 06:58:43  profilanswer
 

n°2100336
SuppotDeSa​Tante
Aka dje69r
Posté le 08-09-2011 à 12:34:04  profilanswer
 

Hello
 
Etant donné que les lettres ont des codes ascii allant de 65 à 90 pour les majuscules, de 97 à 122 pour les minuscules et de 48 à 57 pour les chiffres, il faut faire une boucle ou un select pour passer chaque caractere, et s'il n'est pas dans ses fourchettes, le degager.
 
Après, prends tu les accents ? Les accents sur majuscules ? etc.
Si oui, il faudra faire des exceptions et traiter au cas par cas ou presque.
 
Exemple de code :

Code :
  1. Sub arsene12()
  2. StrVal = "***(u 4sd6s4fs4fs-+lk 41s szzf_z43sf=/<<ùlx*** "
  3. For x = 1 To Len(StrVal)
  4.     Select Case Asc(Mid(StrVal, x, 1))
  5.    
  6.     Case 65 To 90, 97 To 122, 48 To 57
  7.         StrFin = StrFin & Mid(StrVal, x, 1)
  8.     'ici je prends les accents les plus courants, à é è ù ë ï ô ê â
  9.     Case 224, 233, 232, 249, 235, 239, 244, 234, 226
  10.         StrFin = StrFin & Mid(StrVal, x, 1)
  11.     End Select
  12. Next x
  13. End Sub


---------------
Soyez malin, louez entre voisins !
n°2100508
arsene12
Posté le 09-09-2011 à 06:19:28  profilanswer
 

Bonjour, merci beaucoup pour ce code, mais je j'ai recopié tel quel et je l'ai testé, il fonctionne pas  :non:  
En plus, comme je débute, je ne comprends pas bien la procédure

n°2100521
SuppotDeSa​Tante
Aka dje69r
Posté le 09-09-2011 à 09:22:12  profilanswer
 

Donc quand on ne comprend, on ne dit pas que ca ne marche pas, puisqu'il marche tres bien, on dit qu'on arrive pas a l'exploiter ;)
 
Il repond de plus a ta question ;) A savoir enlever des caracteres dans une chaine donnée. Ce qui est le cas
 
Par contre si tu expliquais d'où sort ce texte, et comment voudrais tu le traiter, là ca serait plus parlant ;)


---------------
Soyez malin, louez entre voisins !
n°2100642
arsene12
Posté le 09-09-2011 à 20:08:40  profilanswer
 

Je maintiens ce que j'ai dis : ça marche pas!  
C'est pourtant simple, on tape au clavier tout une série de caractères contenant des lettres(a,b,c,d...), des signes(">@^¨${#|\_* etc...), des espaces, des chiffres(0,1,2,3,4,5,6,7,8,9). Ensuite on clique sur le bouton de la macro et il ne reste plus que les chiffres et les lettres tout accolés.

n°2100649
SuppotDeSa​Tante
Aka dje69r
Posté le 09-09-2011 à 20:48:30  profilanswer
 

:lol:
Si tu maintiens, bon courage alors ;)
 
Quant a moi, je maintiens que le code donné fonctionne. Il ne repond pas a ton besoin non expliqué a la base.
Pour preuve avant le "End Sub"
Ajoute ceci : MsgBox StrFin
Et tu verras qu'il traitera la chaine de la variable StrVal


---------------
Soyez malin, louez entre voisins !
n°2100687
arsene12
Posté le 10-09-2011 à 05:33:28  profilanswer
 

Bonjour, effectivement je vois quelque chose maintenant. Le programme exécute bien l'action recherché mais sur la chaîne qui a été au préalable définit dans la macro. C'est dans le style "Hello World". Ce que je voudrai, c'est pouvoir l'appliquer à n'importe quel document word et qu'il me donne le résultat correspondant.

n°2100724
otobox
Maison fondée en 2005
Posté le 10-09-2011 à 12:21:01  profilanswer
 

Problème mal défini -> réponse imprécise ;)
 
Voilà un code vite fait sur le gaz inspiré de celui de dje69r qui fonctionne sur un texte composé sur Word, mais qui curieusement ne fonctionne pas tout à fait sur certains caractères (retour charriot, ), ?...) quand les données sont copiées-collées d'une page web (de cette page par exemple). J'ai une erreur '5904'" Impossible d'éditer la plage, d'où le gestionnaire d'erreur.

Code :
  1. Option Explicit
  2. Sub arsene12()
  3. Dim DocWord As Document
  4. Dim Lettre As Range
  5. Dim strval As String
  6. On Error GoTo gest_err
  7.     Set DocWord = ActiveDocument
  8.     For Each Lettre In DocWord.Characters
  9.         strval = Lettre.Text
  10.         Select Case Asc(strval)
  11.             Case 65 To 90, 97 To 122, 48 To 57
  12.             Case 224, 233, 232, 249, 235, 239, 244, 234, 226 ', 13, 1, 46, 187, 91
  13.             Case Else
  14.                 Lettre.Delete
  15.         End Select
  16.     Next
  17. On Error GoTo 0
  18. Exit Sub
  19. gest_err:
  20.     On Error GoTo gest_err
  21.     Resume Next
  22. End Sub


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2100836
arsene12
Posté le 11-09-2011 à 11:14:58  profilanswer
 

Merci beaucoup Otobox, cette macro fonctionne en partie comme je voulais. Comme je débute, j'aimerai bien comprendre à quoi sert le "Resume Next" à la fin. A part ça, ce que j'aurai voulu pour que la tâche soit complète, c'est que la macro ne s'applique qu'entre les marqueurs que j'ai ajouté, et qui sont *** dans l'exemple que j'ai cité plus haut.

n°2100838
arsene12
Posté le 11-09-2011 à 11:33:33  profilanswer
 

En remplaçant les *** par des accolades { et }, je sais déja sélectionner le texte :

Code :
  1. Public Sub temp()
  2.     Selection.Find.ClearFormatting
  3.     Selection.Find.Replacement.ClearFormatting
  4.     With Selection.Find
  5.         .Text = "\{*\}"
  6.         .Replacement.Text = ""
  7.         .Forward = True
  8.         .Wrap = wdFindAsk
  9.         .Format = False
  10.         .MatchCase = False
  11.         .MatchWholeWord = False
  12.         .MatchAllWordForms = False
  13.         .MatchSoundsLike = False
  14.         .MatchWildcards = True
  15.     End With
  16.     Selection.Find.Execute
  17. End Sub

mood
Publicité
Posté le 11-09-2011 à 11:33:33  profilanswer
 

n°2100869
otobox
Maison fondée en 2005
Posté le 11-09-2011 à 17:11:11  profilanswer
 

La ligne en début de procédure

Code :
  1. On Error GoTo gest_err


indique que si une erreur se produit, il faut aller lire la partie :

Code :
  1. gest_err:
  2.     On Error GoTo gest_err 'Si une nouvelle erreur se produit, cette ligne garantit de retourner vers gestionnaire d'erreur
  3.     Resume Next 'Cette fonction permet de retourner à la ligne suivant celle qui a produit l'erreur


En effet, mettre au début On Error GoTo gest_err ne suffit pas car si une erreur se produit de nouveau, le gestionnaire d'erreur ne saura plus quoi faire si on ne le lui dit pas.

 

A noter aussi que

Code :
  1. On Error GoTo 0


annule la gestion des erreurs. C'est utile surtout si les procédures sont imbriquées les unes dans les autres. Dans le cas du code donné plus haut, on pourrait s'en passer.

 


Sinon, tes balises *** sont des balises que tu rajoutes ou qui sont déjà présentes dans le fichier ? Est-ce qu'il y a plusieurs passages ainsi ? Ne serait-ce pas plus simple de sélectionner ce que tu veux changer ?


Message édité par otobox le 11-09-2011 à 17:12:32

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2100911
arsene12
Posté le 12-09-2011 à 06:01:07  profilanswer
 

Merci beaucoup pour ces explications Otobox. Pour répondre à ta question, c'est moi-même qui crée les balises. Elles ne délimitent qu'un seul passage. Je devrai choisir plutôt deux symboles extrêmement rares, comme ceux-là par exemple : Ħ,Ø,Æ,¥, etc... Ce que je voudrai ensuite, c'est me positionner juste après la première balise et appliquer le traitement jusqu'à ce que le curseur rencontre la dernière balise.

n°2100913
otobox
Maison fondée en 2005
Posté le 12-09-2011 à 07:22:22  profilanswer
 

Ça ne serait pas plus simple de faire une sélection du texte à modifier, lancer la macro et pour terminer positionner le curseur en fin de sélection ?
Si tu tiens vraiment à placer des balises, c'est le même principe :
1) Sélection du texte à modifier
2) lancer la macro
3) traiter le texte
4) placer les balises en début et fin de sélection
5) positionner le curseur après la dernière balise
6) fin de la macro.

 

Je ne suis pas spécialiste de Word et du vba avec Word, je ne connais pas trop les objets de ce logiciel, mais à vu de nez, ça me semblerait plus simple de faire comme ça que de devoir faire d'abord une recherche de balises.


Message édité par otobox le 12-09-2011 à 07:23:09

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2100915
otobox
Maison fondée en 2005
Posté le 12-09-2011 à 07:33:21  profilanswer
 

otobox a écrit :

Problème mal défini -> réponse imprécise ;)


Je reviens sur ma formule car elle pourrait être mal interprétée. Je veux dire par là que les solutions proposées par dje69r sont la plupart du temps extrêmement précises en répondant exactement à la demande exprimée. Il possède une rigueur toute numérique !
Si la réponse n'est pas celle qu'on attend, il convient de regarder son code (sa demande) plutôt que d'accuser la machine de faire n'importe quoi !


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2100916
arsene12
Posté le 12-09-2011 à 08:06:11  profilanswer
 

Je pense que dje69r m'a donné la bonne méthode mais comme je débute y'a un truc que je sais pas faire avec son code : c'est de faire en sorte que StrVal prenne la valeur de ma sélection (Selection.Find.Execute).

n°2100937
SuppotDeSa​Tante
Aka dje69r
Posté le 12-09-2011 à 09:43:33  profilanswer
 

:jap:
 
Et c'est d'ailleurs la question d'otobox et la mienne, comment definis tu ton texte a modifier...?
Tant que cela ne sera pas clair, on peut te donner des pistes, du code fonctionnel mais ca ne resoudra pas la particularité de ton probleme si tu ne l'exprimes pas.


---------------
Soyez malin, louez entre voisins !
n°2100997
arsene12
Posté le 12-09-2011 à 12:54:33  profilanswer
 

Mon texte à modifier est une chaine de caractère comprise entre deux balises.
 
J'avais idée de faire comme ceci en gros :  
 

Code :
  1. Dim a as Interger
  2. a = 0
  3. While a <1 then
  4.     Selection.Find.ClearFormatting
  5.     Selection.Find.Replacement.ClearFormatting
  6.     With Selection.Find
  7.         .Text = "^?"
  8.         .Replacement.Text = ""
  9.         .Forward = True
  10.         .Wrap = wdFindContinue
  11.         .Format = False
  12.         .MatchCase = False
  13.         .MatchWholeWord = False
  14.         .MatchWildcards = False
  15.         .MatchSoundsLike = False
  16.         .MatchAllWordForms = False
  17.     End With   
  18.     Selection.Find.Execute
  19. if Selection.Text = Lettre then Selection.MoveRight
  20. if Selection.Text = chiffre then Selection.MoveRight
  21. if Selection. Text = marqueurfinal then a = 1
  22. else Selection.Text.Delete
  23. wend
  24. End Sub

n°2101076
SuppotDeSa​Tante
Aka dje69r
Posté le 12-09-2011 à 17:41:13  profilanswer
 

J'ai fait ca vite fait :

Code :
  1. Sub Arsene()
  2. BaliseOuvre = "æ" '(asc = 230 )
  3. BaliseFerme = "¬" ' (asc = 172 )
  4. Deb = 0
  5. Fin = 0
  6. x = 0
  7.     With Application.ActiveDocument
  8.         For Each Char In .Characters
  9.             x = x + 1
  10.             If .Characters(x) = "æ" Then
  11.                 Deb = x
  12.             End If
  13.             If .Characters(x) = "¬" Then
  14.                 Fin = x
  15.             End If
  16.            
  17.             If Deb > 0 And Fin > 0 Then
  18.                 .Characters(Deb).Select
  19.                 Selection.MoveRight Unit:=wdCharacter, Count:=(Fin - Deb), Extend:=wdExtend
  20.                 TxtRet = arsene12(Selection.Text)
  21.                 Selection.Text = TxtRet
  22.                 Selection.HomeKey Unit:=wdStory
  23.                 x = 0
  24.                 Deb = 0
  25.                 Fin = 0
  26.             End If
  27.         Next Char
  28.     End With
  29. End Sub
  30. Function arsene12(StrVal)
  31. 'StrVal = "***(u 4sd6s4fs4fs-+lk 41s szzf_z43sf=/<<ùlx*** "
  32. For x = 1 To Len(StrVal)
  33.     Select Case Asc(Mid(StrVal, x, 1))
  34.  
  35.     Case 65 To 90, 97 To 122, 48 To 57
  36.         StrFin = StrFin & Mid(StrVal, x, 1)
  37.     'ici je prends les accents les plus courants, à é è ù ë ï ô ê â
  38.     Case 224, 233, 232, 249, 235, 239, 244, 234, 226
  39.         StrFin = StrFin & Mid(StrVal, x, 1)
  40.     End Select
  41.    
  42. Next x
  43.     arsene12 = StrFin
  44. End Function


 
La boucle déconne un peu mais là je n'ai pas trop le temps... Je jouerai avec ca demain ;)


---------------
Soyez malin, louez entre voisins !
n°2101091
otobox
Maison fondée en 2005
Posté le 12-09-2011 à 18:36:14  profilanswer
 

arsene12 a écrit :

Je pense que dje69r m'a donné la bonne méthode mais comme je débute y'a un truc que je sais pas faire avec son code : c'est de faire en sorte que StrVal prenne la valeur de ma sélection (Selection.Find.Execute).


Oui mais tes deux balises : quelle est leur utilité ? Simplement identifier le texte à modifier ou vont-elles servir plus tard ?
Si tu les rajoutes manuellement pour simplement identifier le texte à modifier, c'est plus simple de sélectionner puis lancer la macro.
Si les balises doivent servir pour plus tard, c'est plus simple de sélectionner le texte à modifier puis lancer la macro qui terminera en rajoutant une balise de ton choix.


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2101104
otobox
Maison fondée en 2005
Posté le 12-09-2011 à 19:43:45  profilanswer
 

Voilà une solution :

Code :
  1. Sub test1()
  2. Dim strval As String
  3. Dim Sel As Selection
  4. Dim strBalise As String
  5. Dim txtOri As String, txtModif As String
  6. Dim i As Integer
  7. On Error GoTo gest_err
  8. 'Rajoute ci dessous la balise que tu veux insérer
  9. 'Si tu ne veux plus de balise, efface simplement les 3 *** : strBalise = ""
  10. strBalise = "***"
  11.     Set Sel = ActiveDocument.ActiveWindow.Selection
  12.     txtOri = Sel.Text
  13.    
  14.     'Si il n'y a pas de texte sélectionné, on sort de la macro
  15.     If Len(txtOri) <= 1 Then Exit Sub
  16.    
  17.     For i = 1 To Len(txtOri)
  18.         strval = Mid(txtOri, i, 1)
  19.         Select Case Asc(strval)
  20.             Case 65 To 90, 97 To 122, 48 To 57, 224, 233, 232, 249, 235, 239, 244, 234, 226
  21.                 txtModif = txtModif & strval
  22.         End Select
  23.     Next
  24.    
  25.     'A la fin du traitement on rajoute les balises en début et fin de la sélection
  26.     Sel.Text = strBalise & txtModif & strBalise
  27.    
  28. On Error GoTo 0
  29. Exit Sub
  30. gest_err:
  31.     On Error GoTo gest_err
  32.     Resume Next
  33. End Sub


 
Fonctionnement :
1) sélection du texte à modifier
2) Lancer la macro test1
2.1) La macro supprime tous les caractères indésirables
2.2) La macro rajoute en début et en fin de la sélection la balise que tu as choisi (ligne 12 du listing ci-dessus)
3) Fin.
 
Si ça correspond à ce que tu veux, il faut que tu saches que je peux encaisser les chèques (pas en dessous de 100 000 euros)  :D


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2101130
SuppotDeSa​Tante
Aka dje69r
Posté le 12-09-2011 à 21:56:52  profilanswer
 
n°2101166
arsene12
Posté le 13-09-2011 à 06:48:38  profilanswer
 

Merci beaucoup, je crois que je vais progresser grâce à vous et atteindre mon objectif. Pour finir, je vous explique le but de la manœuvre. Vous l'avez peut-être compris, le but c'est de me servir d'une chaîne de caractères pour en faire l'intitulé d'un signet (qui n'accepte qu'une certaine catégorie de caractères). Il faudrait donc que la modification ne se fasse que virtuellement car ce qui m’intéresse, c'est juste d'avoir le résultat en mémoire. Connaitriez vous la technique pour cela?

n°2101169
otobox
Maison fondée en 2005
Posté le 13-09-2011 à 08:03:14  profilanswer
 


Pas de problème :)

arsene12 a écrit :

Merci beaucoup, je crois que je vais progresser grâce à vous et atteindre mon objectif. Pour finir, je vous explique le but de la manœuvre. Vous l'avez peut-être compris, le but c'est de me servir d'une chaîne de caractères pour en faire l'intitulé d'un signet (qui n'accepte qu'une certaine catégorie de caractères). Il faudrait donc que la modification ne se fasse que virtuellement car ce qui m’intéresse, c'est juste d'avoir le résultat en mémoire. Connaitriez vous la technique pour cela?


Rien compris.


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2101170
arsene12
Posté le 13-09-2011 à 08:10:25  profilanswer
 

C'est pourtant simple. Je pourrai dupliquer en haut la ligne avec les balises, faire la macro puis utiliser Selection.copy pour nommer le signet et ensuite supprimer la ligne. Mais je pense qu'il doit y avoir une autre façon de faire.

n°2101178
SuppotDeSa​Tante
Aka dje69r
Posté le 13-09-2011 à 09:20:01  profilanswer
 

arsene12 a écrit :

Merci beaucoup, je crois que je vais progresser grâce à vous et atteindre mon objectif. Pour finir, je vous explique le but de la manœuvre. Vous l'avez peut-être compris, le but c'est de me servir d'une chaîne de caractères pour en faire l'intitulé d'un signet (qui n'accepte qu'une certaine catégorie de caractères). Il faudrait donc que la modification ne se fasse que virtuellement car ce qui m’intéresse, c'est juste d'avoir le résultat en mémoire. Connaitriez vous la technique pour cela?


:lol:
Le genre de chose a dire des le depart ca...


---------------
Soyez malin, louez entre voisins !
n°2101214
arsene12
Posté le 13-09-2011 à 12:34:34  profilanswer
 

C'est pas mon avis  :non: Faut pas demander trop de choses à la fois.

n°2101215
SuppotDeSa​Tante
Aka dje69r
Posté le 13-09-2011 à 12:40:29  profilanswer
 

Bah tu as tort... C'est soit une règle de courtoisie (quand des gens bossent pour toi) soit une règle de développement (et en tout cas la mienne) mais le cahier des charges, on le fait avant.
 
Et je pense qu'otobox est d'accord avec moi, mais se taper des morceaux de code (meme si simples), pour au final avoir le cahier des charges et s'etre fait chier pour rien ou presque c'est pas du plus motivant dans le benevolat ;)
 


---------------
Soyez malin, louez entre voisins !
n°2101225
otobox
Maison fondée en 2005
Posté le 13-09-2011 à 13:09:55  profilanswer
 

Oui, surtout que je n'ai toujours pas trop compris ce qu'il veut faire... Balise, signet.
C'est pour nommer un signet et le placer à un endroit précis dans le texte ? Dans ce cas, quel intérêt de la balise ?


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2101232
SuppotDeSa​Tante
Aka dje69r
Posté le 13-09-2011 à 13:40:52  profilanswer
 

Je vois plutot un texte contenant des caracteres interdit dans un signet/lien hypertext, et donc de garder le texte Word original contenant les dits caracteres mais les substituer pour le nom du signet.


---------------
Soyez malin, louez entre voisins !
n°2101350
otobox
Maison fondée en 2005
Posté le 13-09-2011 à 19:36:19  profilanswer
 

SuppotDeSaTante a écrit :

Je vois plutot un texte contenant des caracteres interdit dans un signet/lien hypertext, et donc de garder le texte Word original contenant les dits caracteres mais les substituer pour le nom du signet.


Oui, je comprends ça aussi, la création en automatique de signets, avec un nom explicite pour retrouver le passage par la suite. Mais je ne comprends pas l'utilité de mettre une balise *** ?


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
n°2101372
arsene12
Posté le 13-09-2011 à 21:38:42  profilanswer
 

Bonsoir,
Je vais vous expliquer le cahier des charges :
 
J'ai plusieurs fichiers comprenant chacun une page avec un tableau dedans au-dessus duquel y'a un titre.
Je voudrai coller les fichiers et ensuite mettre les titres en tête du document pour en faire un sommaire.
Je voudrai que chaque titre possède un hyperlien qui renvoie vers son tableau respectif.
 
Le sujet ici est consacré à la macro qui génère le signet et l'hyperlien.
Je vous remercie beaucoup car grâce à vous j'ai réalisé la première partie, la création du signet. Voici le code :

Code :
  1. Sub InsertSignet()
  2. '
  3. ' le titre se trouve déja entre deux balises ***
  4. Selection.HomeKey unit:=wdStory ' place le curseur en debut du document
  5. With Selection.Find
  6. .ClearFormatting
  7. .Text = "***"
  8. .MatchWildcards = 0
  9. .Forward = 1
  10. .Replacement.Text = ""
  11. .Replacement.ClearFormatting
  12. .Execute ' recherche du mot1
  13. .Text = "***"
  14. Selection.Extend ' etendre la selection
  15. .Execute ' atteindre le mot2
  16. End With
  17.     Dim strval As String
  18.     Dim Sel As Selection
  19.     Dim strBalise As String
  20.     Dim txtOri As String, txtModif As String
  21.     Dim i As Integer
  22.     On Error GoTo gest_err
  23.         Set Sel = ActiveDocument.ActiveWindow.Selection
  24.         txtOri = Sel.Text
  25.      
  26.         'Si il n'y a pas de texte sélectionné, on sort de la macro
  27.         If Len(txtOri) <= 1 Then Exit Sub
  28.      
  29.         For i = 1 To Len(txtOri)
  30.             strval = Mid(txtOri, i, 1)
  31.             Select Case Asc(strval)
  32.                 Case 65 To 90, 97 To 122, 48 To 57, 224, 233, 232, 249, 235, 239, 244, 234, 226
  33.                     txtModif = txtModif & strval
  34.             End Select
  35.         Next
  36.          
  37.     Selection.MoveUp unit:=wdScreen, Count:=1
  38.     ActiveDocument.Tables(1).Select
  39.     With ActiveDocument.Bookmarks
  40.         .Add Range:=Selection.Range, Name:=txtModif
  41.         .DefaultSorting = wdSortByName
  42.         .ShowHidden = False
  43.     End With
  44.         On Error GoTo 0
  45.     Exit Sub
  46. gest_err:
  47.         On Error GoTo gest_err
  48.         Resume Next
  49.     End Sub


 
Je suis en train d'achever la macro. J'ai plus que l'hyperlien à créer. J'ai quelques bugs qui se produisent, c'est pas encore au point.
 

Code :
  1. Sub inserthyperlien()
  2. Dim Sel As Selection
  3. Dim txtOri As String
  4.    
  5. Selection.HomeKey unit:=wdStory ' place le curseur en debut du document
  6. With Selection.Find
  7. .ClearFormatting
  8. .Text = "***"
  9. .MatchWildcards = 0
  10. .Forward = 1
  11. .Replacement.Text = ""
  12. .Replacement.ClearFormatting
  13. .Execute ' recherche du mot1
  14. .Text = "***"
  15. Selection.Extend ' etendre la selection
  16. .Execute ' atteindre le mot2
  17. End With
  18.     Selection.Find.Execute
  19.    
  20.     Set Sel = ActiveDocument.ActiveWindow.Selection
  21.     txtOri = Sel.Text
  22.            
  23.     ChangeFileOpenDirectory "C:\Users\xxx\Desktop\"
  24.     ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _
  25.         SubAddress:="MonSignet", ScreenTip:="", TextToDisplay:= _
  26.         txtOri
  27.                
  28.         End Sub


 
 

n°2101395
otobox
Maison fondée en 2005
Posté le 14-09-2011 à 00:12:30  profilanswer
 

OK.
Ca n'aurait pas été plus simple de passer par un sommaire automatique (c'est à dire jouer avec les styles de titres ?)


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Macro pour éliminer des caractères spécifiques

 

Sujets relatifs
Rich Edit Control : désactiver le lissage des caractèresImposer une police et une taille de caractères ?
MACRO VBA pour numérotation d'image WordMa macro s'arrète sans raisons / Sub pour fermer et écraser 1 fichier
[HTaccess] Problèmes avec Google Translate et caractères réservésComparer 2 listes dans 2 onglets via macro VBA (Excel 2007)
Execution d'une Macro Access a partir d'un code C#[Résolu] Affectation de variable/Macro copier coller Excel
Macro VB 
Plus de sujets relatifs à : Macro pour éliminer des caractères spécifiques


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR