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 :

Extraire des données depuis Excel vers Word [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut Extraire des données depuis Excel vers Word
    Bonjour à la communauté.
    J'ai un classeur Excel avec le nom des polices installées (colonne A) et un texte "exemple" (colonne B) avec la police nommée en colonne A.
    En colonne C, j'ai le type de police (imprimerie, manuscrite, symbolique...).
    J'essai de faire un document Word depuis cette liste, avec un Document par type de police.
    J'ai lu attentivement "VBA Excel - Transférer des données d'excel vers Word", mais j'aimerais éviter d'utiliser le référencement de la bibliothèque Word, car mes macros vont être utilisées sur différents PC avec différentes versions de Word (et probablement d'Excel).
    J'arrive à lancer Word, mais pour le reste, il ne se passe rien et je n'ai aucun retour d'erreur.
    Voici ma tentative de 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub ExportWord(Filtre As String)
        Application.ScreenUpdating = False
        Application.EnableEvents = False
     
        Dim WordApp As Object
        Dim DocWord As Object
        On Error Resume Next
        Set WordApp = CreateObject("Word.Application")
        Set DocWord = WordApp.Documents.Add
        WordApp.Visible = True
        WordApp.DisplayAlerts = False
     
        Debug.Print "--------------------"
        DocWord.Activate
        Lign = 2
        Do While Cells(Lign, 1).Value <> ""
            Debug.Print Cells(Lign, 1).Value
            With DocWord.Selection
                .InsertBefore = Cells(Lign, 1).Value
                .Font.Name = “Arial”
                .typetext vbCrLf
                .InsertBefore = "Ex : servez un whisky au juge blond qui fume la pipe"
                .Font.Name = Cells(Lign, 1).Value
                .MoveStartUntil vbTab
                .MoveDown wdParagraph, 1
            End With
            Lign = Lign + 1
        Loop
        Set DocWord = Nothing
        Cells(2, 1).Activate
        Application.ScreenUpdating = True
        Application.EnableEvents = True
        MsgBox "Fin"
    End Sub
    Si quelqu'un a une astuce, un conseil... je suis preneur.
    Bien à toi la communauté.
    Denis...

  2. #2
    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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j'aimerais éviter d'utiliser le référencement de la bibliothèque Word, car mes macros vont être utilisées sur différents PC avec différentes versions de Word (et probablement d'Excel).
    Pour cela il faut utiliser le Late Binding
    Tout en bas du billet que vous avez lu, je renvoie vers des tutoriels dont le billet titré VBA Excel - La compilation conditionnelle ou comment développer en EarlyBinding et distribuer en late binding

    J'arrive à lancer Word, mais pour le reste, il ne se passe rien et je n'ai aucun retour d'erreur.
    C'est tout à fait normal que vous n'ayez pas de message d'erreur puisqu'en ligne 7, vous avez utilisez On Error Resume Next
    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

  3. #3
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Bonjour Philippe, et un grand merci pour cette réponse.
    Tout fonctionne très bien. Pour ce qui est d'écrire dans le document.
    Mais les polices ne se forment pas là où il faudrait.
    J'ai tenté de changer l'ordre des ".Font.Name" et des ".TypeText", mais rien n'y fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            With appWrd.Selection
                .Font.Name = “Arial”
                .Typetext Text:=Cells(Lign, 1).Value & " : " 'Nom de la police
                .TypeParagraph
                .Typetext Text:="Ex : servez un whisky au juge blond qui fume la pipe" 'Exemple de la police
                .Font.Name = Cells(Lign, 1).Value
                .TypeParagraph
            End With
    Je ne sais pas trop quoi faire pour l'instant, mais je continu de chercher.
    En tous cas, mille mercis pour votre aide.
    Denis...

  4. #4
    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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Denis,
    Il y a plusieurs problèmes dans la procédure que vous avez publiée. J'ai évidemment avant tout supprimé la ligne 7 qui empêche de détecter les erreurs
    1. La procédure nommé ExportWord a un argument nommé Filtre or vous n'utilisez pas cet argument et en tant que telle la procédure ne peut qu'être invoquée depuis une autre procédure. J'ai donc supprimer cet argument.
    2. Vous n'avez pas déclaré la variable Lign
    3. Les guillemets qui entoure "Arial" ne sont pas correct (vous avez écrit “Arial” et c'est "Arial")
    4. vous utilisez des constantes Word celle préfixées wd or lorsque l'on ne référence pas la bibliothèque Word. VBA ne connait pas ces constantes donc soit vous déclarez ces constantes dans la procédure soit vous utilisez leurs valeurs (wdParagraph est égal à 4)
    5. il est fortement indiqué de préciser la parentalité des cellules (feuille + classeur) au risque de lire les valeurs de cellules d'une autre feuille (celle qui est active)
    6. pendant la phase de test, il est préférable de conserver Application.ScreenUpdating à True. Pourquoi cette ligne Application.EnableEvents = False

    Pouvez-vous publier le contenu des paramètres que vous avez placé dans les cellules d'excel ?
    Dans l'article que vous avez lu, je préconise l'usage des signets ce qui vous éviterait de placer les paramètres (Taille, Police, etc dans Excel. Un document Word est fait pour cela.
    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

  5. #5
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 415
    Par défaut
    Rebonjour Philippe, et merci de m'aider.
    Effectivement, je n'ai juste posté qu'une infime partie de mon code, je ne voulais pas décourager le lecteur.
    Je n'ai qu'un classeur (.xlsm) d'une seule feuille, qui pourras faire plusieurs centaines de lignes, voir beaucoup plus.
    Bravo pour les guillemets, je n'avais rien vu.
    Je fais actuellement les autres modifications que vous m'avez indiquées ainsi que des recherches sur les "wd" sans bibliothèque.
    Encore merci à vous.

    Voici une capture partielle de mon classeur :

    Nom : 2023.10.22_18h09 CaptureExcel.png
Affichages : 98
Taille : 63,9 Ko
    Denis...

  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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Denis,
    Voici une petite procédure qui utilise deux fontes de polices avec des tailles différentes lors de l'écriture de deux phrases dans un nouveau document.
    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
    Sub t()
     Dim objWord As Object
     Set objWord = CreateObject("Word.Application")
     With objWord
     .Visible = True ' Affiche Word
     .Documents.Add  'Ajoute un document
     End With
     '
     With objWord.Selection
     .TypeParagraph
      With .Font
      .Name = "Calibri": .Size = 24
      End With
     .TypeText Text:="Procédure pour écrire dans Word "
     .TypeParagraph
      With .Font
      .Name = "Arial": .Size = 11
      End With
     .TypeText Text:="Hello World :o)"
     .InsertBreak Type:=7 ' Saut de page (7 = constante wdPageBreak)
     End With
     ' objWord.PrintOut   ' imprimer le document
     Set objWord = Nothing
    End Sub
    Sub ControleSiDocumentWordOuvert()
    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

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

Discussions similaires

  1. extraire des données Outlook vers excel
    Par Salva75009 dans le forum VBA Outlook
    Réponses: 6
    Dernier message: 24/08/2020, 13h07
  2. [XL-2007] VBA problème pour passer des données EXCEL vers WORD
    Par nocontrol dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/07/2011, 10h01
  3. [Oracle] extraire des données oracle vers excel
    Par chahrazed dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/04/2009, 11h29
  4. Importer des données excel vers outlook
    Par faayy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/10/2005, 09h30
  5. Récupérer des données Excel vers Interbase ...
    Par Djedjeridoo dans le forum InterBase
    Réponses: 2
    Dernier message: 20/07/2003, 18h16

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