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 30/05/2007, 11h53   #1
Membre du Club
 
Avatar de e040098k
 
Inscription : avril 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 197
Points : 56
Points : 56
Par défaut Remplacer un mot

Bonjour,

je suis en train de réaliser une appli permettant de rédiger des contrat grace à le source de heureuxoli http://heureuxoli.developpez.com/publipostage/

Dans un des clauses, je souhaite remplacer certain mots (ex : NomSalarié) par un le mot correspondant (Exupont).

J'ai fait ce code mais il est long à s'executer (normal c'est une boucle)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    Dim Plage As Object, Wrd As Object
    Set Plage = ActiveDocument.Content.Words
 
        For Each Wrd In Plage
        stSQL02 = "select * from tblclient where idclient =" & rs01.Fields("idclient").Value
        Set rs02 = db.OpenRecordset(stSQL02) 'définition du second recordset table client
 
            If Wrd = "CivilitéSalarié" Or Wrd = "CivilitéSalarié " Then Wrd = Replace(Wrd, Wrd, rs02.Fields("sttitre"))
            If Wrd = "PrénomSalarié" Or Wrd = "PrénomSalarié " Then Wrd = Replace(Wrd, Wrd, rs02.Fields("stPrenom"))
            If Wrd = "NomSalarié" Or Wrd = "NomSalarié " Then Wrd = Replace(Wrd, Wrd, rs02.Fields("stNom"))
            If Wrd = "VilleSalarié" Or Wrd = "VilleSalarié " Then Wrd = Replace(Wrd, Wrd, rs02.Fields("stVille"))
            If Wrd = "DateNaissanceSalarié" Or Wrd = "DateNaissanceSalarié " Then Wrd = Replace(Wrd, Wrd, rs02.Fields("stDateNaissance"))
            If Wrd = "LieuNaissanceSalarié" Or Wrd = "LieuNaissanceSalarié " Then Wrd = Replace(Wrd, Wrd, rs02.Fields("stLieuNaissance"))
            If Wrd = "NumSécuSalarié" Or Wrd = "NumSécuSalarié " Then Wrd = Replace(Wrd, Wrd, rs02.Fields("stNumSecu"))
        Next Wrd
Est-ce que quelqu'un connait une meilleure solution ?

Merci de votre aide !
e040098k est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 12h15   #2
Membre du Club
 
Inscription : février 2007
Messages : 71
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2007
Messages : 71
Points : 62
Points : 62
Salut,

Si tu peux modifier le document que tu dois remplir par macro.

Je te recommande d'utiliser des signets

Ex: dans word tu sélectionnes "CivilitéSalarié" tu lui ajoutes un signet du même nom.

puis par code quand tu voudras le modifier, tu n'auras plus besoins de parcourir mot par mot

il te faudra
Code :
1
2
3
If ActiveDocument.Bookmarks.Exists("CivilitéSalarié") Then
    ActiveDocument.Bookmarks("CivilitéSalarié").Value = "ton texte"
End If
Speedrman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 14h26   #3
Membre du Club
 
Avatar de e040098k
 
Inscription : avril 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 197
Points : 56
Points : 56
Très bonne idée seulement mon document word est un .dot et il est vierge, la position des signets en peut pas être définie !

De plus ton code ne serait pas plutôt : ? avec .Range.Text
Code :
1
2
3
If ActiveDocument.Bookmarks.Exists("CivilitéSalarié") Then
    ActiveDocument.Bookmarks("CivilitéSalarié").Range.Text = "ton texte"
End If
Je continue à chercher !
e040098k est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 14h47   #4
Membre du Club
 
Inscription : février 2007
Messages : 71
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2007
Messages : 71
Points : 62
Points : 62
Citation:
De plus ton code ne serait pas plutôt : ? avec .Range.Text
oui c'est mieux comme ça, dsl : )



et comment tu remplis le modèle dans ce cas ?
Speedrman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 15h14   #5
Membre du Club
 
Avatar de e040098k
 
Inscription : avril 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 197
Points : 56
Points : 56
Je le rempli a partir d'access, grâce à des recordset !

donc je ne peut pas définir de signets ou de champs de publipostage !

Enfin je ne crois pas !
e040098k est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 16h21   #6
Membre du Club
 
Inscription : février 2007
Messages : 71
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : février 2007
Messages : 71
Points : 62
Points : 62
Alors dans ce cas, fais une recherche dans le document pour retrouver les mots à remplacer, ça sera toujours plus rapide qu'une boucle sur chaque mot..

Ils sont déjà connu, puisque tu les as mis en dur dans le code, non ?
Speedrman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 16h41   #7
Membre du Club
 
Avatar de e040098k
 
Inscription : avril 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 197
Points : 56
Points : 56
Citation:
Alors dans ce cas, fais une recherche dans le document pour retrouver les mots à remplacer, ça sera toujours plus rapide qu'une boucle sur chaque mot..

Ils sont déjà connu, puisque tu les as mis en dur dans le code, non ?
D'accord mais comment tu le fait en vba ?
e040098k est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2007, 17h49   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 351
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 351
Points : 29 264
Points : 29 264
Citation:
Envoyé par e040098k
Je le rempli a partir d'access, grâce à des recordset !

donc je ne peut pas définir de signets ou de champs de publipostage !

Enfin je ne crois pas !
Si, tu peux demander d'aller sur des signets.

Regarde ici, j'ai mis un code
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2007, 16h03   #9
Membre du Club
 
Avatar de e040098k
 
Inscription : avril 2007
Messages : 197
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 197
Points : 56
Points : 56
Citation:
Citation:
Citation:e040098k a écrit :
Je le rempli a partir d'access, grâce à des recordset !

donc je ne peut pas définir de signets ou de champs de publipostage !

Enfin je ne crois pas !
Si, tu peux demander d'aller sur des signets.

Regarde ici, j'ai mis un code
Ok ça fonctionne très bien chez moi. Mais en mode pas à pas ! lorsque je lance la macro normalement, elle bute sur l'insertion de l'image et j'ai un message : "le serveur distant n'existe pas ou n'est pas disponible"

Sais-tu à quoi cela peut-il être du ?
e040098k est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h11.


 
 
 
 
Partenaires

Hébergement Web