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 :

Recherche et remplace avec une feuille qui fait plusieurs sections


Sujet :

VBA Word

  1. #1
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut Recherche et remplace avec une feuille qui fait plusieurs sections
    Bonjour,
    Sur un code vba sur excel, j'exporte des données. Pour une partie de celle ci je fais un remplacement d'un champs par un autre (ici "TLM" en ma_variable).
    Une des pages qui receptionne ce code possède plusieurs sections, et du coup, pour une raison que je ne comprend pas, le code remplace plusieurs fois le résultats, je me retrouve avec deux fois ma variable écrite.

    voici ma procedure de remplacement de texte :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub remplacer(ByRef doc As Word.Document, ByRef recherche As String, ByVal remplace As String)
        doc.Content.Select
        Set myrange = doc.Content
        myrange.Find.Execute FindText:=recherche, ReplaceWith:=remplace, _
        Replace:=wdReplaceAll
        If doc.Shapes.Count > 0 Then
            For Each sh In doc.Shapes
                If InStr(sh.Name, "Text") Then
                    Set myrange = sh.TextFrame.TextRange
                    myrange.Find.Execute FindText:=recherche, ReplaceWith:=remplace, _
                    Replace:=wdReplaceAll
                End If
            Next
        End If
        Dim sec As Section
        Dim nombrePage As Integer
        nombrePage = 0
        For Each sec In doc.Sections
            If nombrePage = 0 Or nombrePage <> sec.Range.Information(3) Then
                Set myrange = sec.Headers(wdHeaderFooterPrimary).Range
                myrange.Find.Execute FindText:=recherche, ReplaceWith:=remplace, _
                Replace:=wdReplaceAll
                Set myrange = sec.Footers(wdHeaderFooterPrimary).Range
                myrange.Find.Execute FindText:=recherche, ReplaceWith:=remplace, _
                Replace:=wdReplaceAll
                nombrePage = sec.Range.Information(3)
            End If
        Next
     
    End Sub
    Avez vous un idée pour m'aider à résoudre ce soucis ?
    Expert en recherche google caféinomane

  2. #2
    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
    Salut,

    Les raisons peuvent être multiples, mais avec seulement le code, c'est difficile de te donner une piste.

    Que souhaites tu faire ?

    Je suppose que ton texte doit se trouver plusieurs fois dans ton document.
    Pourquoi ne pas utiliser des champs et une champ de formulaire pour recevoir ta données.

    Possible qu'une solution plus facile et rapide pourrait être mise en place.
    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 !

  3. #3
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Bonjour,
    En fait j'ai un document word modèle avec des mots clés répartis dans le documents, qui me servent à être remplacé par des informations contenu dans mon excel (j'ai également des signets pour exporter des graphs et tout mais bon, ça c'est pas le sujet). C'est un de ces mots clé qui est copier deux fois. Pour être exact, il pose problème qu'à un seul endroit (alors que je le remplace à plusieurs autres endroits) : dans ma deuxième page, dans la tête de page. J'ai dans ladite page un saut de section (continu) et un saut de page.
    Je pensais pouvoir gérer ça en trouvant le nombre de page par section mais au final ça n'a pas l'air de marcher mon truc.
    Je veux bien que tu m'en dises plus sur les champs, stp.
    Expert en recherche google caféinomane

  4. #4
    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
    Salut,

    Si une donnée doit être répliquée plusieurs fois dans un même document, il y a d'autre moyen que le rechercher remplacer de Word.

    On définit un endroit dans le document, ça peut être un champ de formulaire. On attribue à ce champ un style de caractère.
    Il suffit ensuite d'utiliser des champ StyleRef dans le document pour répliquer cette information.

    On peut le faire aussi avec un tableau d'une cellule.

    Le but est d'atteindre facilement cet emplacement en VBA.
    Le signet n'est pas une très bonne solution parce qu'il est détruit lors de l'écriture de la donnée.

    On peut utiliser un champ de propriété du document et on accède alors à cette propriété par le code ou encore une variable de document.

    Les choix sont vraiment multiples.

    C'est un peu à toi de voir vers quelle solution tu souhaites aller.
    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 !

  5. #5
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Ok, je vais regarder du côté des formulaires et des fields, il semble y avoir des choses intéressantes. Ca pourrait effectivement m'éviter cette lourdeur de passer par un rechercher remplacer (j'ai juste codé ce que j'aurais fait avec un clavier et une souris ^^).
    Pour les signets, je suis étonnés que tu me les déconseilles. Ma macro l'utilise pour repérer l'endroit où créer un tableau et l'endroit ou copier des graphiques (BEAUCOUP de graphiques). Je repère le signet, puis décale le curseur vers la gauche et je colle, le signet est encore là et j'ai mes graphiques dans l'ordre souhaité
    Après pour le coup, je suis franchement pas un expert, j'utilise VBA avec une série de macro qui suit les traitements de données à partir des données brutes (excel) jusqu'à un compte rendu, et cela avec des fichiers "modèles" prérempli, pas beaucoup plus. Pour Word particulièrement, contrairement à excel, je trouve que c'est particulièrement compliqué à appréhender le VBA.
    Expert en recherche google caféinomane

  6. #6
    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
    Salut,

    Le signet, une fois utilisé disparaît, sauf si c'est un point d'insertion. Mais dans ce cas, une seconde utilisation va ajouter une donnée supplémentaire sans écraser la précédente.

    Pour les formulaires, tu peux toujours jeter un œil là : http://heureuxoli.developpez.com/off...d/formulaires/
    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 !

  7. #7
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Re
    Bon, j'ai regardé les styleRef.
    Si j'ai bien compris. Ca permet de créer un champs variable qui va chercher la première occurrence d'un style comme texte (et plus si affinité)
    Pour mon document, le texte qui va apparaitre dans tout le doc, il est présent dans l'en-tête de ma page de garde, qui est dans une section qui lui est propre (j'ai un header et un footer différent du reste du document). Du coup, je peux pas venir chercher cette référence, J'ai d'autres options que RefStyle mais aucune ne semble me permettre d'attraper ce que je cherche. Peut être que je peux jouer sur le publipostage et mettre toute mes données variables dans un bdd. Ce qui pose soucis c'est que le document final est juste un doc fini, enregistré, qui bougera plus, ça fait un peu overkill d'avoir un excel spécifique pour le doc, et je ne sais pas ce que vont devenir les variables si je partage le doc à mes collègues mais pas le Excel.

    Ton tuto est pratique, je l'avais trouvé hier en fouillant un peu. Cependant là il me faudrait quelque chose de plus général sur word, j'ai des notions qui me manque on dirait (je remercie mes profs d'avoir voulu nous apprendre le VBA sur open office tableur uniquement).
    (Je suis en train de lire les liens à la fin du tuto).
    L'idéal ce serait une sorte de petit espace mémoire invisible du document avec quelques variables auquel je peux faire appel dans le doc. Ca rendrait la chose facile en code et tout de même assez propre.
    Expert en recherche google caféinomane

  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
    Salut,

    Il y a cette possibilité : http://heureuxoli.developpez.com/office/word/variables/
    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 expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Mais c'est parfait !
    J'aurais du venir te voir bien plus tôt merci beaucoup.
    Expert en recherche google caféinomane

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

Discussions similaires

  1. Perl: rechercher et remplacer avec une variable
    Par Tofdu31 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 24/07/2017, 03h52
  2. Réponses: 6
    Dernier message: 10/04/2017, 13h10
  3. Réponses: 5
    Dernier message: 01/01/2017, 11h14
  4. pourquoi linux fonctionne même avec un programme qui fait une boucle while(1) ?
    Par morpheusmg dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 23/12/2011, 17h49
  5. [SQL] une requete qui fait mal a la tete
    Par MailOut dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/02/2005, 16h22

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