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 :

Excel et signet Word [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut Excel et signet Word
    Bonjour à tous,

    J'ai un fichier Excel (tableau) qui contient des informations (nom client, adresse etc). C'est fichier de suivi d'incident et je dois l'utiliser pour générer divers courriers. Ces courriers sont des fichiers Word classique dans lequel j'ai inséré des signets. Dans le fichier Excel, je mets un bouton qui me permet de générer ce courrier. Il faut que la procédure reste simple car les utilisateurs ne sont pas expérimentés, et le publipostage n'est pas non plus une bonne solution. Malheureusement, j'ai une erreur et je ne comprends pas ou est le problème.
    Pour info, je ne suis pas un pro du VBA.

    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
    Sub Editer()
    Dim oApp As Object
    Dim Shell As Shell
    Dim Chemin As String
    Dim Chemin_complet As String
    Dim File_name As String
     
        File_name = "Plainte contre X.docx"
        Chemin = ThisWorkbook.Path
        'Chemin = Application.GetOpenFilename
        Chemin_complet = Chemin & "\" & File_name
        Set oApp = CreateObject("Word.Application")
        oApp.Documents.Open Chemin_complet
        oApp.Visible = False
        'Set objShell = New Shell
        'objShell.Explore (Chemin)
        With Worksheets("Les_faits")
        WordDoc.Bookmarks(“Client”).Range.Text = Cells(3, 2)
        WordDoc.Bookmarks(“Adresse”).Range.Text = Cells(4, 2)
        WordDoc.Bookmarks(“Site”).Range.Text = Cells(6, 2)
        End With
        WordApp.Visible = True
    End Sub
    Qu'ai-je mal fait ?

    Merci d'avance.

    Cordialement,

    Fred

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Et si tu nous disais quelle erreur tu rencontres et éventuellement sur quelle ligne?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    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 Fred_rt Voir le message
    j'ai une erreur
    Quelle erreur ? Sur quelle ligne ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut Erreur signet word
    Bonjour,

    Pardon pour cet oubli.
    Erreur ligne 18
    Erreur 424 objet requis

    Merci d'avance.

    Fred

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    1. WordDoc n'est pas déclaré. Tu devrais avoir une ligne Dim WordDoc as word.document en début de procédure. Pour éviter ce genre de mésaventure, tu as intérêt à obliger la déclaration de tes variables (Option Explicit en début de module, et cocher la case correspondante dans outils\options\Editeur)
    2. A la ligne 11,tu dois avoir set worddoc = oApp.Documents.Open(Chemin_complet)

    Essaie déjà avec ces modifs...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ajouterais à la réponses de Pierre que je salue au passage que les guillemets qui entourent le nom des signets (Bookmarks des lignes 18, 19 et 20) ne sont pas ceux qui doivent être utilisés en VBA (voir les guillemets qui entourent le nom de la feuille de la ligne 17 qui eux sont corrects)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Hello Philippe...

    Bien vu... Tu as le regard perçant du tigre...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut Excel signet word
    Merci de vos infos. Je me suis aperçu en effet que j'avais oublié de déclarer la variable. Donc voici le code corrigé:

    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
    Sub Editer()
    Dim oApp As Object
    Dim Chemin As String
    Dim Chemin_complet As String
    Dim File_name As String
    Dim WordDoc As Word.document
     
        File_name = "Plainte contre X.docx"
        Chemin = ThisWorkbook.Path
        Chemin_complet = Chemin & "\" & File_name
        Set oApp = CreateObject("Word.Application")
        Set WordDoc = oApp.documents.Open(Chemin_complet)
        oApp.Visible = False
        With Worksheets("Les_faits")
        WordDoc.Bookmarks("Client").Range.Text = Cells(3, 2)
        WordDoc.Bookmarks("Adresse").Range.Text = Cells(4, 2)
        WordDoc.Bookmarks("Site").Range.Text = Cells(6, 2)
        End With
        oApp.Visible = True
    End Sub
    La je n'ai en effet plus d'erreur. En revanche quand le document Word s'ouvre les signets n'ont pas récupéré la valeur des cellules Excel.

    Une idée ?

    Cordialement,

    Fred

  9. #9
    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
    Essaye de remplacer Cells(3, 2) par Cells(3, 2).Value.
    Idem pour les lignes suivantes.

    Si ça ne marche pas, essaye de passer par une variable intermédiaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaVariable = Cells(3, 2)
    WordDoc.Bookmarks("Client").Range.Text = MaVariable

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Sur les lignes 15, 16 et 17, tu as oublié de mettre un . devant range (puisque tu utilises un bloc With)...

    Et puisque tu passes des valeurs, pense à mettre .Value derrière tes range. C'est plus explicite.

    N'hésite pas à déboguer ton code pas à pas. Tu pourras ainsi t'arrêter sur les lignes susceptibles de poser problème et de regarder chaque valeur utilisée.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut Excel signet word
    Ok, merci à tous. Voici le code qui fonctionne:

    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
    Sub Editer()
    Dim oApp As Object
    Dim Shell As Shell
    Dim Chemin As String
    Dim Chemin_complet As String
    Dim File_name As String
    Dim WordDoc As Word.document
     
        File_name = "Plainte contre X.docx"
        Chemin = ThisWorkbook.Path
        'Chemin = Application.GetOpenFilename
        Chemin_complet = Chemin & "\" & File_name
        Set oApp = CreateObject("Word.Application")
        Set WordDoc = oApp.documents.Open(Chemin_complet)
        oApp.Visible = False
        'Set objShell = New Shell
        'objShell.Explore (Chemin)
        With Worksheets("Les_faits")
        'WordDoc.Bookmarks("Client").Range.Text = .Cells(3, 2).Value
        'WordDoc.Bookmarks("Adresse").Range.Text = Cells(4, 2).Value
        'WordDoc.Bookmarks("Site").Range.Text = Cells(6, 2).Value
        Client = Range("C2").Value
        'MsgBox Client
        Adresse = Range("D2").Value
        Site = Range("F2").Value
        End With
        WordDoc.Bookmarks("Client").Range.Text = Client
        WordDoc.Bookmarks("Adresse").Range.Text = Adresse
        WordDoc.Bookmarks("Site").Range.Text = Site
     
        oApp.Visible = True
    End Sub
    A la prochaine.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Ton bloc With...End With ne sert à rien, au vu du code que tu donnes. Tu pourrais te passer des lignes 18 et 26, si tu es certain que ce sera toujours cette feuille là qui sera active lorsque la macro sera lancée.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 113
    Par défaut Excel signet word
    Bonjour Pierre,

    En effet, mais la macro est lancée d'un bouton situé sur un autre onglet. J'ai du ajouté un . devant range du bloc with. En revanche, ce que je peux simplifier à priori c'est la variable intermédiaire, je dois pouvoir m'en passer.

    Cordialement,

    Fred

  14. #14
    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 Fred_rt Voir le message
    ce que je peux simplifier à priori c'est la variable intermédiaire, je dois pouvoir m'en passer.
    J'ai trouvé ça dans un programme que j'avais fait il y a quelques années.
    Je ne me souviens plus pourquoi j'avais mis une variable intermédiaire à l'époque mais je pense que si j'ai fais comme ça, c'est que j'ai du rencontré un problème comparable au tien et que je n'avais pas trouvé de solution pour faire autrement.

    Cela dit, rien ne t'oblige à utiliser 3 variables. Une seule peut suffire si tu utilises son contenu juste après.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    C'est la solution que je te proposais dans mon mail de 16h19

    Passer pas une variable intermédiaire ne sert qu'à vérifier que la valeur récupérée sur le range est correcte. Ce qu'on pourrait faire sans variable intermédiaire en mode pas à pas. Mais si le range n'est pas bon au départ (à cause de l'absence du . devant), passer par une variable intermédiaire ne sert strictement à rien...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. [WD-2003] Valeur excel vers signet word, chemin d'accès
    Par 8e8eClo dans le forum VBA Word
    Réponses: 2
    Dernier message: 10/08/2011, 12h53
  2. Macro Excel : infos dans un signet Word
    Par ML0808 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/03/2008, 18h28
  3. Export données Excel vers signets Word
    Par stephanies_1977 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/09/2007, 16h27
  4. 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
  5. Initialiser un signet word à partir d'excel
    Par HAFNI84 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/05/2007, 01h08

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