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 :

Difficulté à remplacer un signet Word via Excel [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2016
    Messages : 5
    Par défaut Difficulté à remplacer un signet Word via Excel
    Bonjour à tous,

    Je me suis mis depuis une semaine ou deux au VBA pour Excel essentiellement et j'essaye différents exercices pour m'entraîner (le VBA pouvant m'être utile dans mon travail en gestion de projet). Ici j'essaye uniquement de remplir un fichier Word à l'aide d'Excel, où les XXXX, YYYY de Word seraient remplacés par mes réponses aux Inputbox... (le code VBA se trouvant sur Excel et non Word)

    Les inputbox apparaissent bien, le word et le document aussi (même si c'est pas systématique pour être franc mais bon je m'en satisfait pour l'instant), mais par contre aucun remplacement de signet, l'erreur indiquant "5941" comme si il ne trouvait pas mon document.
    J'ai bien activé en amont la Librairie Word.. dans les références.

    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
    39
    40
    41
    42
    Option Explicit
     
    Public Sub Word()
     
    'permet de copier des valeurs d'un tableau excel vers un fichier word prédéfini,
    'par exemple préremplir des lettres de motivations en remplaçant juste les noms d'entreprises, lieu, ect...
     
    Dim Nom_destinataire As String
    Dim MonNom As String
    Dim Prenom As String
    Dim Argu As String
    Dim Entreprise As String
     
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim wbk As ThisWorkbook
    Dim wsh As Worksheet
     
    Nom_destinataire = InputBox("Nom du destinataire ?")
    Prenom = InputBox("Mon Prenom ?")
    MonNom = InputBox("Mon nom ?")
    Entreprise = InputBox("Entreprise ?")
    Argu = InputBox("Argumentaire ?")
     
        Set WordApp = New Word.Application    'ouvre une session Word
        WordApp.Visible = True
        Set WordDoc = Documents.Open("C:\Users\aboucher\Documents\test2.docx", ReadOnly:=False, Visible:=True)   'ouvre le document Word
        WordApp.Visible = False    'Word est masqué pendant l'opération
     
    WordDoc.Bookmarks("XXXX").Range.Text = Nom_destinataire
    WordDoc.Bookmarks("BBBB").Range.Text = MonNom
    WordDoc.Bookmarks("AAAA").Range.Text = Prenom
    WordDoc.Bookmarks("ZZZZ").Range.Text = Argu
    WordDoc.Bookmarks("YYYY").Range.Text = Entreprise
     
        WordApp.Visible = True    'affiche le document Word
        'WordDoc.PrintOut 'Pour imprimer le doc obtenu
     
        'WordDoc.Close True 'ferme le document word en sauvegardant les données
        'WordApp.Quit 'ferme la session Word
     
    End Sub
    Pour information je débute, j'ai pas vraiment d'intérêt à faire ce genre de programme j'essaye juste d'avoir les bons réflexes et la bonne logique en VBA pour m'auto-corriger à l'avenir.

    Edit : Pour information dans mon fichier Word les signets apparaissent en tant que XXXX, AAAA,... sans guillemet ni rien. Peut-être il y a t-il une formulation particulière que je ne connais pas pour indiquer que ce sont des signets, même si selon les exemples du forums j'ai l'impression que c'est bon.

    En vous remerciant pour vos conseils,

    ColoRBay

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par ColorBay Voir le message
    j'essaye uniquement de remplir un fichier Word à l'aide d'Excel, où les XXXX, YYYY de Word seraient remplacés par mes réponses aux Inputbox...
    Tes XXXX et YYYY sont-ils des parties de texte ou des signets (au sens Word du terme) ?
    Ton message laisse supposer qu'il s'agit de partie de texte alors que dans ton code, tu les mets en Bookmark.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2016
    Messages : 5
    Par défaut
    Oui merci beaucoup vous aviez raison, je n'avais pas indiquer à Word que c'était des signets je pensais qu'il reconnaissait une chaîne de caractères et que ça lui suffisait (un peu de la même manière que Find sur Excel), mais en fait non
    donc --> Penser à insérer ses signets.

    Voici le code actuel :

    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
    39
    Option Explicit
     
    Sub Word()
     
    'permet de copier des valeurs d'un tableau excel vers un fichier word prédéfini,
    'par exemple préremplir des lettres de motivations en remplaçant juste les noms d'entreprises, lieu, ect...
     
    Dim Nom_destinataire As String
    Dim MonNom As String
    Dim Prenom As String
    Dim Argu As String
    Dim Entreprise As String
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
     
    Nom_destinataire = InputBox("Nom du destinataire ?")
    Prenom = InputBox("Mon Prenom ?")
    MonNom = InputBox("Mon nom ?")
    Entreprise = InputBox("Entreprise ?")
    Argu = InputBox("Argumentaire?")
     
        Set WordApp = New Word.Application    'ouvre une session Word
        WordApp.Visible = True
        Set WordDoc = Documents.Open("C:\Users\aboucher\Documents\test2.docx", ReadOnly:=False, Visible:=True)   'ouvre le document Word
        WordApp.Visible = False    'Word est masqué pendant l'opération
     
    WordDoc.Bookmarks("XXXX").Range.Text = Nom_destinataire
    WordDoc.Bookmarks("BBBB").Range.Text = MonNom
    WordDoc.Bookmarks("AAAA").Range.Text = Prenom
    WordDoc.Bookmarks("ZZZZ").Range.Text = Argu
    WordDoc.Bookmarks("YYYY").Range.Text = Entreprise
     
         WordDoc.Visible = True 'affiche le document Word
        'WordDoc.PrintOut 'Pour imprimer le doc obtenu
        'WordDoc.Close True 'ferme le document word en sauvegardant les données
     
    'WordApp.ActiveDocument.Close
    'WordApp.Quit 'ferme la session Word
    End Sub
    Mais de nouveaux problèmes apparaissent par cycle de deux lancements de la macro :
    1 - Je lance une fois tout se passe bien le fichier s'ouvre et les signets sont modifiés, pourtant une alerte surgit toujours "le membre de la collection requis n'existe pas"
    2 - 2ème fois Word ne s'affiche pas, on m'indique "Propriété ou Méthode non géré par cet objet"

    Avez-vous une idée ?
    Je suppose que je ne laisse pas Word à l'état d'origine quand je lance la macro, car j'ai constaté que malgré que je n'ai rien d'ouvert sur Word, quand le cas 2 arrive le fichier "test2" (mon document) est en lecture seule quand j'essaye de l'ouvrir comme si il était ouvert quelque part...

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par ColorBay Voir le message
    Oui merci beaucoup vous aviez raison, je n'avais pas indiquer à Word que c'était des signets je pensais qu'il reconnaissait une chaîne de caractères et que ça lui suffisait (un peu de la même manière que Find sur Excel), mais en fait non
    La comparaison n'est pas bonne.
    Un signet dans Word est l'équivalent d'un Nom dans Excel.
    Ce n'est pas parce que tu mets XXXX dans une cellule Excel que VBA pourra comprendre Range(XXXX).

    Cela dit, VBA Word est tout à capable de trouver une chaine de caractères de la même façon qu'un Find dans VBA Excel.
    https://msdn.microsoft.com/fr-fr/lib...ffice.15).aspx

    Mais, personnellement, je trouve qu'il est plus pratique et plus sûr d'utiliser des signets quand on cherche à faire des substitutions dans Word.

    1 - Je lance une fois tout se passe bien le fichier s'ouvre et les signets sont modifiés, pourtant une alerte surgit toujours "le membre de la collection requis n'existe pas"
    Quelle ligne de code est indiquée par le débugeur ?

    2 - 2ème fois Word ne s'affiche pas, on m'indique "Propriété ou Méthode non géré par cet objet"
    Même question.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2016
    Messages : 5
    Par défaut
    Bizarrement aucune ligne n'est indiquée par le débugeur, mais si je fais une grossière erreur dans le code pour tester le débugeur il indique bien la ligne donc je ne comprends pas pourquoi il le fait pas cette fois-ci.
    J'ai regardé pas à pas le code avec le débugeur :
    1) Quand tout fonctionne (1) il indique "le membre de la collection requis n'existe pas", apparemment l'erreur s'affiche dès la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Bookmarks("XXXX").Range.Text = Nom_destinataire
    Je pense que c'est la même chose pour les lignes suivantes, malgré cela il effectue bel et bien les changements de signets.
    2) est faux, je l'ai remplacé par Wordapp.visible on ne pouvait pas associé .visible à un document apparemment. Pour autant le problème n'est pas résolu le message d'erreur ne s'affiche plus mais le document Word ne s'affiche toujours pas (et les changements n'ont donc pas lieu).

    Code Maj :

    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
    39
    40
     
    Option Explicit
     
    Sub Word()
     
    'permet de copier des valeurs d'un tableau excel vers un fichier word prédéfini,
    'par exemple préremplir des lettres de motivations en remplaçant juste les noms d'entreprises, lieu, ect...
     
    Dim Nom_destinataire As String
    Dim MonNom As String
    Dim Prenom As String
    Dim Argu As String
    Dim Entreprise As String
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
     
    Nom_destinataire = InputBox("Nom du destinataire ?")
    Prenom = InputBox("Mon Prenom ?")
    MonNom = InputBox("Mon nom ?")
    Entreprise = InputBox("Entreprise ?")
    Argu = InputBox("Argumentaire?")
     
        Set WordApp = New Word.Application    'ouvre une session Word
        WordApp.Visible = True
        Set WordDoc = Documents.Open("C:\Users\aboucher\Documents\test2.docx", ReadOnly:=False, Visible:=True)   'ouvre le document Word
        WordApp.Visible = False    'Word est masqué pendant l'opération
     
    WordDoc.Bookmarks("XXXX").Range.Text = Nom_destinataire
    WordDoc.Bookmarks("BBBB").Range.Text = MonNom
    WordDoc.Bookmarks("AAAA").Range.Text = Prenom
    WordDoc.Bookmarks("ZZZZ").Range.Text = Argu
    WordDoc.Bookmarks("YYYY").Range.Text = Entreprise
     
         WordApp.Visible = True 'affiche le document Word
        'WordDoc.PrintOut 'Pour imprimer le doc obtenu
        'WordDoc.Close True 'ferme le document word en sauvegardant les données
     
    'WordApp.ActiveDocument.Close
    'WordApp.Quit 'ferme la session Word
    End Sub

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par ColorBay Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Bookmarks("XXXX").Range.Text = Nom_destinataire
    J'ai déjà utilisé cette syntaxe sans problème.
    Mais il est vrai que, généralement, je crée un modèle que la macro commence par copier pour ne faire des modif que sur la copie (plus exactement, j'enregistre sous un autre nom).
    Je n'ai jamais lancé deux deux fois cette syntaxe sur le même bookmark.

    Cela dit, tu devrais poser la question dans la rubrique Macro Word. Même si la macro est lancer dans Excel, c'est du code VBA Word.

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

Discussions similaires

  1. [XL-2016] Rechercher remplacer dans Word via Excel : les caractères spéciaux
    Par Milkamelia dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/05/2016, 14h54
  2. Modifier le texte d'un signet word via Excel
    Par yamat dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 31/07/2008, 18h19
  3. Lire signets WORD depuis EXCEL
    Par nico75 dans le forum VBA Word
    Réponses: 5
    Dernier message: 15/07/2008, 23h34
  4. Remplir un doc word via excel
    Par enretard dans le forum Word
    Réponses: 12
    Dernier message: 17/06/2008, 12h46
  5. couper/coller entre deux signets word via excel
    Par ptitemar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/08/2007, 11h41

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