Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/10/2007, 10h18   #1
Membre confirmé
 
Avatar de dacid
 
Homme
Inscription : juin 2003
Messages : 859
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2003
Messages : 859
Points : 260
Points : 260
Par défaut Caractère spécial dans Replace()

Bonjour à tous,

J'ai une chaine de caractères, et j'aimerais pouvoir remplacer une occurence de cette chaine par un caractère spécial.

Par exemple:
J'ai la chaine "Voici mon point [POINT] et c'est tout."
Et il faut qu'il remplace "[POINT]" par un caractère spécial.

Un truc comme ça dans le principe, mais ca ne marche pas:
str2 = Replace(str, "[POINT]", InsertSymbol(Font:="Wingdings", CharacterNumber:=-3988, Unicode:=True))

Avez vous une idée ?

Merci d'avance.
__________________
David.
dacid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 14h30   #2
Inactif
 
Inscription : juillet 2007
Messages : 4 555
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 4 555
Points : 5 002
Points : 5 002
Replace traite une chaîne de caractères, pas sa police !
Une chaîne de caractères est une chaîne de caractères et elle reste la même quelle que soit la police utilisée.

Il va donc te falloir :
1) chercher la position du caractère concerné
2) modifier la police à cette position
3) avancer d'un caractère
4) restituer la police originelle ensuite.

Le tout : à condition que la chaîne traitée ne soit pas le contenu d'une variable String mais bel et bien une partie de texte formaté (de ton document).... hein ...
ucfoutu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2007, 14h37   #3
Membre confirmé
 
Avatar de dacid
 
Homme
Inscription : juin 2003
Messages : 859
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2003
Messages : 859
Points : 260
Points : 260
Merci pour votre réponse,

En fait, j'ai trouvé un truc qui marche mais ça me semble un peu du bricolage.
Le plus difficile est de comprendre et maitriser ce que fait exactement le curseur.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub traiteLegende(rR As Range, str As String)
    Dim pos As Long
 
    pos = InStr(1, str, "[POINT]", 1)
    If pos > 0 Then
        rR.End = rR.End - 1
        rR.InsertSymbol Font:="Wingdings", CharacterNumber:=-3988, Unicode:=True
        rR.Collapse (wdCollapseStart)
        rR.InsertBefore Left(str, pos - 1)
        rR.MoveEnd Unit:=wdCharacter, Count:=1
        rR.InsertAfter Right(str, Len(str) - (pos + 6))
    Else
        rR.InsertAfter str
    End If
    Set rR = Nothing
End Sub
Est ce que ca vous semble optimisé ?
(c'est une fonction que j'appelle récursivement un bon nombre de fois)
__________________
David.
dacid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 16h11   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Bonjour dacid,
Citation:
Envoyé par toi
Est ce que ca vous semble optimisé ?
A première vue, ça me paraît bien compliqué. Rien ne dit que je trouverai mieux mais précise-nous : Comment recherches-tu ce fameux point [POINT] ?
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 16h54   #5
Membre confirmé
 
Avatar de dacid
 
Homme
Inscription : juin 2003
Messages : 859
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2003
Messages : 859
Points : 260
Points : 260
Heu... Bin par InStr(), qui me donne la position de la chaine recherchée

Mais j'ai peur de ne pas avoir bien compris ta question.
__________________
David.
dacid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 17h24   #6
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par dacid Voir le message
Heu... Bin par InStr(), qui me donne la position de la chaine recherchée

Mais j'ai peur de ne pas avoir bien compris ta question.
Je l'espère
Je précise donc : Tu as str et dans str tu recherches "[POINT]"...
Qu'y a-t-il dans str ? La totalité de ton document ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 17h40   #7
Membre confirmé
 
Avatar de dacid
 
Homme
Inscription : juin 2003
Messages : 859
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2003
Messages : 859
Points : 260
Points : 260
Ok, je vois... J'était bien à coté.

C'est juste un string de 255 car Max, du genre:
"Blablabla Blablabla Blablabla [POINT] Blablabla Blablabla"
__________________
David.
dacid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2007, 17h55   #8
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par dacid Voir le message
Ok, je vois... J'était bien à coté.

C'est juste un string de 255 car Max, du genre:
"Blablabla Blablabla Blablabla [POINT] Blablabla Blablabla"
Ok. Et ce string, donc une variable, tu l'as renseigné comment pour le passer à la procédure ?
Ensuite, ce texte, tu l'ajoutes dans un doc ou tu prends dans le doc pour le modifier ?
Attends, je t'explique : Si tu le prends dans le doc, c'est que tu l'as recherché.
Si tu l'ajoute dans le doc, c'est que tu as trouvé ou que tu connais son emplacement...
Comment définis-tu cet emplacement ?
On va y arriver ! Laisse moi poser les bonnes questions
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 08h30   #9
Membre confirmé
 
Avatar de dacid
 
Homme
Inscription : juin 2003
Messages : 859
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2003
Messages : 859
Points : 260
Points : 260
Il n'y a aucun soucis...

Cette chaine est dans une base Access et envoyé à la fonction Word à l'aide de mon application en Delphi, Word ne connait donc pas cette chaîne avant que je lui envoye.
Son emplacement peut être trouvé de 2 manières différentes (j'ai besoin de garder les 2):
1 - Il y a un signet.
2 - C'est la première cellule du tableau de pied de page.

C'est pour ça que j'envoye un range (délimité avant) à la fonction.
__________________
David.
dacid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 09h49   #10
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Ok ! J'ai enfin tout compris Donc à part "Set rR = Nothing" que tu dois déjà ré-initialiser dans la procédure appelante et qui ne paraît pas utile (je ne discuterait pas là-dessus ) je ne vois pas comment simplifier ton code. Si la phrase avait fait partie du texte, c'eut été plus simple (!)
Désolé de t'avoir fait faire le parcours du combattant par mes questions
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 09h58   #11
Membre confirmé
 
Avatar de dacid
 
Homme
Inscription : juin 2003
Messages : 859
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2003
Messages : 859
Points : 260
Points : 260
Merci à toi pour temps passé.

C'est vrai que pour faire la moindre chose avec Word, ca peut vite parraître lourd et désordonné.
En tout cas, c'est rassurant de savoir que mon code n'est pas trop du n'importe quoi, hi.

Je vais jeter un oeil pour le Nothing... Je ne sais plus vraiment pourquoi je l'ai mis là.
__________________
David.
dacid est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h38.


 
 
 
 
Partenaires

Hébergement Web