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 Discussion :

Exécuter une macro dans plusieurs fichiers word


Sujet :

VBA

  1. #1
    Membre à l'essai
    Homme Profil pro
    Santé
    Inscrit en
    Août 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Août 2018
    Messages : 29
    Points : 18
    Points
    18
    Par défaut Exécuter une macro dans plusieurs fichiers word
    Bonjour à tous,

    Après des heures de test, je viens vers vous.

    Je souhaite modifier un texte dans une cinquantaine de fichier Word d'un répertoire.

    J'ai commencé par créer une macro sous Word pour que ma macro soit appliquée à l'ensemble des fichiers.

    Voici mon code :
    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
     
     
    Sub test2()
     
    Dim Repertoire As String
    'Dim wbook As Workbook
    Repertoire = "C:\Users\test\Desktop\dossier test\"
     
    unFichier = Dir(Repertoire & "*.docx")
    While unFichier <> ""
     
        Set wbook = Workbooks.Open(Repertoire & unFichier)
        Set myRange = ActiveDocument.Content
        myRange.Find.Execute FindText:="Test 1", ReplaceWith:="Test 2", _
        Replace:=wdReplaceAll
        wbook.Close False
        unFichier = Dir
    Wend
    End Sub
    A la ligne Set wbook j'ai une erreur 424 'objet requis
    Je ne sais pas si je pars sur la bonne méthode.

    Je songe donc a peut être créer un fichier Bash avec la macro.

    Avez vous une idée d'où provient mon erreur de code? Que pensez vous de l'idée de réaliser celui ci sous bash?

    Merci pour votre précieuse aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    Tu fais tourner ce code sous Word ou sous Excel ?
    Les classeurs partent à partir de (Excel.Application.)Workbooks si tel est le cas.

    As tu coché la reference Excel ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre à l'essai
    Homme Profil pro
    Santé
    Inscrit en
    Août 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Août 2018
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Bonjour
    Merci pour votre retour
    Je fais tourner ce code sous Word.
    Est ce plus facile sous Excel?

    Merci à vous

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Salut,

    Lorsque tu pilotes une autre application que celle dans laquelle tu codes, il y a toujours des efforts à faire pour que cela soit souple.

    As-tu bien ajouté la référence à Excel ?

    Pour manipuler les classeurs, il faut lancer une application Excel d'abord

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim xlApp as New Excel.Application
    puis l'utiliser pour ouvrir tes classeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbook = xlApp.Workbooks.Open(Repertoire & unFichier)
    et potentiellement fermer à la fin Excel.

    Reste qu'avant tout cela, il faut penser à déclarer toutes tes variables pour les utiliser ensuite, c'est une règle de base en programmation
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre à l'essai
    Homme Profil pro
    Santé
    Inscrit en
    Août 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Août 2018
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Merci à vous

    Je souhaite ouvrir le fichier Word , appliquer la macro et fermer Word

    Comment parcourir les fichiers Word d’un dossier automatiquement ?

    Merci à vous

  6. #6
    Membre à l'essai
    Homme Profil pro
    Santé
    Inscrit en
    Août 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Août 2018
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Bonjour à tous,

    Je me permets de revenir vers car je n'ai pas trouvé le moyen d'appliquer une macro VBA à plusieurs fichiers word en automatique.

    Merci pour votre aide,

    Excellente journée,

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 528
    Points
    528
    Par défaut
    Bonsoir,

    Ceci devrait marcher :

    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
    37
    38
     
    Sub RechercherRemplacer()
       Dim objDoc As Document
       Dim Dossier As String
       Dim Fichiers As String   
       Dim TxtRecherche As String
       Dim TxtRemplace As String
     
       Dossier = "C:\tmp"
       Fichiers = Dir(Dossier & "\" & "*.docx", vbNormal)
       TxtRecherche = "Test 1"
       TxtRemplace = "Test 2"
     
       While Fichiers <> ""
            Set objDoc = Documents.Open(FileName:=Dossier & "\" & Fichiers)
            With objDoc
                With Selection
                    .HomeKey Unit:=wdStory
                    With Selection.Find
                        .text = TxtRecherche
                        .Replacement.text = TxtRemplace
                        .Forward = True
                        .Wrap = wdFindContinue
                        .Format = False
                        .MatchCase = False
                        .MatchWholeWord = False
                        .MatchWildcards = False
                        .MatchSoundsLike = False
                        .MatchAllWordForms = False
                    End With
                    Selection.Find.Execute Replace:=wdReplaceAll
                End With
                objDoc.Save
                objDoc.Close
                Fichiers = Dir()
            End With
      Wend
    End Sub

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 115
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par tacleur Voir le message
    Bonjour à tous,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    unFichier = Dir(Repertoire & "*.docx")
    Set wbook = Workbooks.Open(Repertoire & unFichier)
    Tu essaye d'ouvrir un fichier Word avec Excel, un peut normal que ca ne fonctionne pas.

    De plus, soit moderne et passe plutôt par la librairie Scripting.FileSystemObject lorsque tu manipule le système de fichiers, l'instruction Dir réserve de sales surprises.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 5
    Points
    5
    Par défaut A tester
    Salut,

    Tu pourrais essayer cette version si j’ai bien compris ton besoin :
    Sub test2()

    Dim Repertoire As String
    Dim wbook As Workbook
    Dim myRange As Range

    Repertoire = "C:\Users\test\Desktop\dossier test\"
    unFichier = Dir(Repertoire & "*.docx")

    While unFichier <> ""

    Set wbook = Workbooks.Open(Repertoire & unFichier, ReadOnly:=True)
    Set myRange = ActiveDocument.Content
    myRange.Find.Execute FindText:="Test 1", ReplaceWith:="Test 2", _
    Replace:=wdReplaceAll

    wbook.Close False
    unFichier = Dir
    Wend
    End Sub

    Tcha

Discussions similaires

  1. objectif: exécuter une macro dans tous les fichiers d'un répertoire
    Par sosolide dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2017, 17h46
  2. Réponses: 6
    Dernier message: 02/08/2017, 16h55
  3. Dupliquer une macro dans plusieurs fichiers
    Par Tetranos dans le forum VBA Word
    Réponses: 6
    Dernier message: 24/12/2013, 12h27
  4. Réponses: 1
    Dernier message: 11/02/2011, 14h14
  5. [VBA-E] Copier une macro dans un fichier à l'aide d'une macro
    Par Capsule dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/01/2007, 20h05

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