IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Remplacer un mot


Sujet :

VBA Word

  1. #1
    Membre régulier Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Points : 94
    Points
    94
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Février 2007
    Messages : 71
    Points : 76
    Points
    76
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ActiveDocument.Bookmarks.Exists("CivilitéSalarié") Then
        ActiveDocument.Bookmarks("CivilitéSalarié").Value = "ton texte"
    End If

  3. #3
    Membre régulier Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Points : 94
    Points
    94
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ActiveDocument.Bookmarks.Exists("CivilitéSalarié") Then
        ActiveDocument.Bookmarks("CivilitéSalarié").Range.Text = "ton texte"
    End If
    Je continue à chercher !

  4. #4
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Février 2007
    Messages : 71
    Points : 76
    Points
    76
    Par défaut
    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 ?

  5. #5
    Membre régulier Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Points : 94
    Points
    94
    Par défaut
    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 !

  6. #6
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Février 2007
    Messages : 71
    Points : 76
    Points
    76
    Par défaut
    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 ?

  7. #7
    Membre régulier Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Points : 94
    Points
    94
    Par défaut
    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 ?

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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 !

  9. #9
    Membre régulier Avatar de e040098k
    Inscrit en
    Avril 2007
    Messages
    197
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 197
    Points : 94
    Points
    94
    Par défaut
    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 ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. [RegEx] motif pour remplacer un mot dans du code HTML ...
    Par r-zo dans le forum Langage
    Réponses: 6
    Dernier message: 31/03/2006, 13h31
  3. Par quoi remplacer le mot Démarrer?
    Par sourivore dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 08/03/2006, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo