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 :

Commande SQL / Word et macro Excel [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 281
    Par défaut Commande SQL / Word et macro Excel
    Bonjour à toutes et tous,

    J'ai créé un publipostage sous Word 2016 pour réaliser des étiquettes. Les champs sont alimentés par un fichier Excel nommé Base Étiquettes dans lequel sont copiées (par une macro " Export_Étiquettes ") les données d'un TCD qui se trouve dans mon fichier principal.

    Quand j'ouvre le fichier Word en double cliquant dessus depuis l'explorateur Windows, le ficher s'ouvre et un message apparaît disant " L'ouverture de ce document exécute la commande SQL suivante SELECT*FROM 'Feuil1$' ", ce qui à mon sens est normal puisque il va chercher les données des champs du fichier Base Étiquettes.
    En répondant oui au message, le fichier s'ouvre avec les champs mis à jours.
    Jusque là pas de problème.

    En revanche, c'est la macro ci dessous qui me pose problème.

    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
    Sub Ouverture_Etiquettes_Word()
    'Ouvre le fichier Word Etiquettes.docx
    'dont le chemin est renseigné cellule T6 dans feuille Accueil et dont le nom est cellule AA9 même feuille
     
    Dim Chemin_Fichier_Etiquettes_Word
    Dim Nom_Fichier_Etiquettes_Word
    Dim Adresse_Fichier_Etiquettes_Word
    Dim WordApp As Object
    Dim WordDoc As Object
     
        Chemin_Fichier_Etiquettes_Word = ThisWorkbook.Worksheets("accueil").Range("T6").Value
        Nom_Fichier_Etiquettes_Word = ThisWorkbook.Worksheets("accueil").Range("AA9").Value
        Adresse_Fichier_Etiquettes_Word = Chemin_Fichier_Etiquettes_Word & "\" & Nom_Fichier_Etiquettes_Word
        Debug.Print Adresse_Fichier_Etiquettes_Word
     
        Set WordApp = CreateObject("Word.Application")
        With WordApp
        Set WordDoc = .Documents.Open(Adresse_Fichier_Etiquettes_Word)
         .Visible = True
         .Activate
        End With
     
    Set WordApp = Nothing
    End Sub
    1) L'ouverture du fichier est très longue alors que pour mes tests je n'ai que 7 étiquettes. Chaque étiquette est composée de 8 champs. Une page peut contenir 18 étiquettes.
    2) Lorsque le fichier veut bien s'ouvrir, il n'est pas mis à jour (ce qui est normal car dans ma macro il n'y a pas d'instruction pour exécuter la commande SQL) et la fonction Publipostage n'est pas active.


    Une solution pour exécuter la commande SQL serait la bien venue (je n'ai pas trouvé ou su trouver la réponse à mon problème).

    Dans l'outil que je développe, je pourrais me passer de cette macro, l'utilisateur pourrais aller ouvrir le fichier Word via l'explorateur. Mais je voudrais me coucher moins bête.

    Merci à vous

    Philippe

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 109
    Par défaut
    Bonjour

    Je n'ai pas de réponse à cette question, par contre, j'ai un conseil .

    Il y a deux méthodes de déclaration des applications externes (ici Word).
    Le Late et le Early Binding.
    Dans ton cas tu utilises le Late Binding qui a l'avantage d'éviter les problèmes de compatibilité et d'activation des Références.

    Mon conseil est le suivant, durant la phase de création du code, utilise plutôt le Early Binding.
    C'est à dire, va dans le menu Outils de VBE, puis "Références...". Dans la liste qui s'ouvre recherche et coche "Microsoft Word ....".

    Pour déclarer les variables il suffit maintenant de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim AppWord As New Word.Application
    Dim DocWord As Word.Document
    La ligne suivant n'est plus nécessaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set WordApp = CreateObject("Word.Application")
    Si je te fais faire ça, ça n'est pas pour simplifier quoi que ce soit mais pour permettre à VBE d'utiliser l’auto-complétion, c'est à dire la capacité de VBE à te proposer les méthodes, variables, ... disponible à la suite d'un point
    Par exemple si par la suite je tape
    VBE va ouvrir ça petite fenêtre qui propose tout ce qu'il est possible de mettre à la suite et ça, pour moi, c'est un régal pour rechercher quelques choses.

    Autre outil qui est super intéressant de connaitre à mon sens et qui va se nourrir de l'activation de la Référence, c'est l'explorateur d'objet, touche F2 (il est aussi dans les menu de VBE).
    Cet outil permet d'explorer comme son nom l'indique les objets, en haut à gauche tu peux limiter la recherche à Word, puis juste en dessous taper le mot clef qui t’intéresse et voir les variable ou méthodes qui y font référence. Et bien plus encore je te laisse fouiner.

    Sans oublier la possibilité d'utiliser l'aide en référence à Word avec la touche F1, qui du coup s'active également

    Pour ton problème de SQL, je n'ai rien trouvé de probant... mais ça reste à connaitre

    Une fois le code réalisé, tu pourras si besoin remettre les déclarations en Late Binding pour faciliter son déploiement.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 281
    Par défaut
    Bonjour Qwazerty,

    Je n'ai pas de réponse à cette question, par contre, j'ai un conseil .
    Merci pour tes conseils.
    Je vais regarder ceci.


    Mais le problème reste entier.

    Philippe

  4. #4
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 281
    Par défaut
    Bonjour à toutes et tous,

    Je réactive ce post n'ayant trouvé aucune solution à mon problème.

    Ci dessous le code initial modifié suites aux remarques de Qwazerty.
    Ce code fonctionne mais le problème reste entier.

    1) L'ouverture du fichier est très longue alors que pour mes tests je n'ai que 7 étiquettes. Chaque étiquette est composée de 8 champs. Une page peut contenir 18 étiquettes.
    2) Lorsque le fichier veut bien s'ouvrir, il n'est pas mis à jour (ce qui est normal car dans ma macro il n'y a pas d'instruction pour exécuter la commande SQL) et la fonction Publipostage n'est pas active.

    Une solution pour exécuter la commande SQL serait la bien venue.

    Sub Ouverture_Etiquettes_Word_1()
    'Le 09/05 Suite à réponse de Qwazerty marche mais n'ouvre pas le fichier word actualisé
    'Ouvre le fichier Word Etiquettes.docx
    'dont le chemin est renseigné cellule T6 dans feuille Accueil et dont le nom est cellule AA9 même feuille

    Dim Chemin_Fichier_Etiquettes_Word
    Dim Nom_Fichier_Etiquettes_Word
    Dim Adresse_Fichier_Etiquettes_Word
    'Dim WordApp As Object 'Qwazerty me le fait sortir
    'Dim WordDoc As Object 'Qwazerty me le fait sortir
    Dim AppWord As New Word.Application 'Qwazerty
    Dim DocWord As Word.Document 'Qwazerty

    Chemin_Fichier_Etiquettes_Word = ThisWorkbook.WorkSheets("accueil").Range("T6").Value
    Nom_Fichier_Etiquettes_Word = ThisWorkbook.WorkSheets("accueil").Range("AA9").Value
    Adresse_Fichier_Etiquettes_Word = Chemin_Fichier_Etiquettes_Word & "\" & Nom_Fichier_Etiquettes_Word
    Debug.Print Adresse_Fichier_Etiquettes_Word

    'Set WordApp = CreateObject("Word.Application") 'Qwazerty me le fait sortir
    'With WordApp
    With AppWord

    'Set WordDoc = .Documents.Open(Adresse_Fichier_Etiquettes_Word)
    Set DocWord = .Documents.Open(Adresse_Fichier_Etiquettes_Word)
    .Visible = True
    .Activate

    End With

    'Set WordApp = Nothing
    Set AppWord = Nothing

    End Sub
    Merci

    Philippe

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 109
    Par défaut
    Salut

    Toujours pas de réponse mais une proposition.
    Va dans ton fichier Word, lance l'enregistreur de Macro (onglet développeur à activer dans le menu Word).
    Fait les manipulation nécessaire à la mise à jour de ta requête SQL.
    Arrêtes l'enregistrement de la macro et va regarder ce qu'il a écrit comme code.
    Il suffira ensuite de trouver l'équivalence dans l'objet AppWord de ton code VBA Excel.

    Sinon, s'il s'agit juste de lancer le fichier Word sans avoir à faire d’interaction avec celui-ci via le code VBA Excel, tu peux utiliser ShellExecute.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2018
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2018
    Messages : 281
    Par défaut
    Bonjour Qwazerty,

    Merci, je me penche dessus dans la semaine.

    Philippe

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

Discussions similaires

  1. [XL-2007] Rechercher et afficher un text dans un fichier Word avec macro Excel
    Par ypelissier dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/03/2012, 16h51
  2. Démarrer macro Word depuis macro Excel
    Par nashiboy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/12/2009, 20h02
  3. Utliser la Commande DTEXEC depuis une macro EXCEL
    Par monseg dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/10/2009, 15h28
  4. Réponses: 4
    Dernier message: 28/11/2007, 23h07
  5. Comment ouvrir word depuis macro excel ?
    Par megapacman dans le forum VBA Word
    Réponses: 4
    Dernier message: 15/11/2006, 15h59

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