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

Macros et VBA Excel Discussion :

remplacer des mots en utilisant file input et


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 309
    Points : 91
    Points
    91
    Par défaut remplacer des mots en utilisant file input et
    Bonjour,

    Je voudrais depuis excel (VBA), ouvrir un fuchier un word, remplacer quelques mots par de valeurs lues sur la feuille excel en utilisant file input et file outpout.

    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
    Dim tempstr, temp
     
    vacature = Trim(Range("F3").Text)
     
    Open "C:Mailingmaker.doc" For Input As #1
     
          Do While Not EOF(1)
                Line Input #1, temp
                tempstr = tempstr & temp
            Loop
            Close #1
     
          tempstr = Replace(tempstr, "<function", vacature)
     
          Open "C:\Mailingmaker.doc" For Output As #1
            Print #1, tempstr
            Close #1
    Mais l'application word est bien demarrée, car le document est vide, alors qu'il contien du texte. Mais rien ne se passe.

    Merci de votre aide

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonsoir,

    Un fichier Word ne saurait être lu et écrit par cette méthode (ton code est valable pour un fichier texte, ce qui n'est pas le cas d'un fichier Word).

    EDIT : J'ajoute que si tu t'amuses à lire par open la totalité (c'est possible), à la modifier, puis à la réécrire ===>> ton fichier Word deviendra totalement inexploitable (même plus ouvrable depuis Word).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Alors, j'ajoute quelque précisions capitales à ce que ucfoutu vient de te dire.
    En gros tu dois:
    • Ajouter une référence à Microsoft Word à ton projet
    • Démarrer une instance de Word (via la méthode CreateObject)
    • Utiliser le modèle objet de Word pour ouvrir ton fichier (et non pas utiliser l'instruction Open)
    • Faire tes manipulations sur ton fichier (toujours avec le modèle objet Word)
    • Enregistrer le fichier
    • Fermer ton application word (très très important)


    Pour que cela fonctionne sans interruption dans le code, Word doit rester en arrière plan (normalement il devrait l'être par défaut), et tu ne verras pas les opérations effectuées

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 309
    Points : 91
    Points
    91
    Par défaut
    Merci pour vos réponse,

    Au fait j'utilise cette methode car la solution suivante la plus simple normalement n'a pas fonctionné:

    Le macro fonctionne sous word mais pas sous excel.

    Sous excel j'ai le message d'erreur:

    La méthode 'Replacement' de l'objet 'Find' a échoué

    Voici le code utilisé:
    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
    31
    32
    33
    34
    35
    36
     
    Dim wdApp As Word.Application, wdDoc As Word.Document
     
    Public Sub macro1()
      Dim email as String
      set wdApp = New Word.Application
      wdApp.Visible = True
     
      Set wdDoc = wdApp.Documents.Open("C:\Mailingmaker.doc")
     
      email = Trim(Range("C3").Text)
     
      Call TakenDataExcelToWord("<E-mailAdres>", email)
     
    End Sub
     
    Sub TakenDataExcelToWord(toReplace, theValue)
     
        wdDoc.ActiveWindow.Selection.Find.ClearFormatting
        wdDoc.ActiveWindow.Selection.Find.Replacement.ClearFormatting
     
        With wdDoc.ActiveWindow.Selection.Find
            .Text = toReplace
            .Replacement.Text = theValue
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        wdDoc.ActiveWindow.Selection.Find.Execute Replace:=wdReplaceAll
     
    End SubJ'utilise excel 2007 et word 2007
    J'utilise excel 2007 et word 2007

    Merci d'avance de votre aide,

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    simple commentaire peut-être pas du tout à propos, mais j'ose.

    ce que tu essaie de faire ressemble assez bien à du publipostage, c'est à dire que tu veux mettre le contenu d'une variable à un endroit, ou plusieurs.

    cela peut se faire via des signets sans utiliser replace.

    Est-ce correct ?

    Autrechose, j'ai généré un code de find & replace dans Word, pour tester le tien, c'est très similaire mais je ne comprends pas pourquoi tu précise Activewindow dans tes instructions. cela me parait inutile.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    C'est à quelle ligne exactement qu'il y a cet échec? Car j'en vois 2 qui sont susceptibles d'être sujettes à cette erreur, même s'il y en a une que je privilégie (histoire de bogues récurrents).

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 309
    Points : 91
    Points
    91
    Par défaut
    Merci vous tous pour vos efforts,

    Godzestla,

    peux-tu me donner plus d'info sur les signets, des leins ou je peux trouver des exemples. J'en ai entendu parler mais je ne sais pas comment ça fonctionne. Si ne fais pas Activewindow, comment je acceder au document, etant donné que je suis dans excel. Je n'ai pas pu trouver une solution ou methode

    decondelite
    l'erreur se trouve à la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wdDoc.ActiveWindow.Selection.Find.Replacement.ClearFormatting
    Sous excel j'ai le message d'erreur:

    La méthode 'Replacement' de l'objet 'Find' a échoué



    Merci d'avance de votre aide,

  8. #8
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation Envoyé par faamugol Voir le message
    Merci vous tous pour vos efforts,

    Godzestla,

    peux-tu me donner plus d'info sur les signets, des leins ou je peux trouver des exemples. J'en ai entendu parler mais je ne sais pas comment ça fonctionne. Si ne fais pas Activewindow, comment je acceder au document, etant donné que je suis dans excel. Je n'ai pas pu trouver une solution ou methode
    Pour moi activewindow est inutile car Wdoc est définit comme un object Word.

    Pour un exemple de signet, je regarde, mais à la base tu dois définir ton signet dans le document word via insérer -> Signet .....
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    Pour moi activewindow est inutile car Wdoc est définit comme un object Word.
    J'ai vérifié le chemin dans l'explorateur: ça n'a pas l'air d'être ça.

    A mon avis, il se peut que ton objet Find ne soit pas de la forme voulue lorsque tu arrives à cette ligne.

    Ainsi je te suggère de mettre un espion pour regarder le contenu de Find à la ligne qui bogue, et montre-nous un petit screen du contenu de l'espion stp.

  10. #10
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation de Decondelite
    J'ai vérifié le chemin dans l'explorateur: ça n'a pas l'air d'être ça.
    Comment fais-tu cela ? J'en suis incapable ,
    Si tu peux m'expliquer... merci.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  11. #11
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    309
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 309
    Points : 91
    Points
    91
    Par défaut
    Merci encore de vous consacrer à trouver une solution.

    je te suggère de mettre un espion pour regarder le contenu de Find à la ligne qui bogue
    Tu veux dire de faire un MSGBOX du contenu..de find ou , je ne comprends pas trop .


    Merci de m'aider,

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Chose très frappante: je n'ai trouvé sur le site aucun tuto complet sur le débogage en VB/VBA pour te répondre!

    => A faire (qui se dévoue on verra)

    Donc je t'explique.
    Les espions, ce sont des indicateurs qui te permettent à tout moment d'un programme (et même sans aucun programme actif ) de:
    -connaître la valeur d'une variable
    -connaître le contenu d'un objet
    -calculer une expression quelconque

    Bref, en ce qui me concerne, les espions sont devenus un outil de débogage absolument indispensable. A un tel point que je ne me sers presque plus de la fenêtre "Variables locales" qui est selon moi très limitée en possibilités et surtout bourrée d'informations inutiles. Je m'en sers même pour aider beaucoup de monde sur ce forum sans taper une seule ligne de code.

    Pour ajouter un espion: ouvre la fenêtre des espions en faisant "Affichage"->"Fenêtre espions", et dedans clic droit->"Ajouter un espion".

    Et maintenant, pour répondre à ma question, lorsque tu as cliqué sur le bouton "débogage" une fois que ton programme a planté, tu insère le texte "wdDoc.ActiveWindow.Selection.Find" comme nouvel espion, et tu observes dans la fenêtre ce que t'indique l'espion.

    Si tu as un "+" à gauche, déroule l'espion et fais moi un screen du contenu qui risque d'être assez volumineux. S'il n'y est pas screen quand même.

    PS: je ne m'étends pas sur les possibilités des espions qui sont très larges, mais bon ça ça vient avec la pratique et une bonne maîtrise du concept de portée des variables.

Discussions similaires

  1. Remplacer des mots dans une chaine de caracteres
    Par johnson95 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2011, 09h19
  2. [XL-2007] remplacement des mots dans la meme colonne
    Par jeph.net dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/12/2011, 19h59
  3. [RegEx] Remplacer des mots d'une chaine aléatoirement
    Par sigmoun dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2009, 18h56
  4. Boucle pour remplacer des mots ds un fichiers
    Par dinozo13 dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 21/07/2008, 14h34
  5. Parser une page pour remplaçer des mots par d'autres
    Par HALOMOTO dans le forum Langage
    Réponses: 13
    Dernier message: 13/07/2006, 22h58

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