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 :

Copie de données Excel dans Word et mise en forme


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 25
    Par défaut Copie de données Excel dans Word et mise en forme
    Bonjour à toutes et à tous !

    J'ai besoin de créer une macro VBA pour le boulot et je ne m'en sors pas ...
    Nous avons un tableau Excel, de quelques centaines de lignes contenant diverses informations.
    Après avoir filtré le tableau, par exemple pour avoir toutes les publications éditées en 2018, il faut que je prenne les informations suivantes :
    Les noms d'auteurs en colonne C, certains en italique ou soulignés (ex : Golf Arthur, Polo Martine, Foot Robert)
    Le titre de la publication en colonne D (ex : Intérêts de la sous traitance de molécules de cuivre)
    Le nom de la revue en colonne E, en gras (ex : Cells)
    L'année de publication en colonne A
    Un identifiant unique, contenant un lien hyper texte, en colonne B

    Pour les mettre dans cette mise en forme (il est important de garder la mise en forme source du Excel), dans un nouveau fichier Word :
    Golf Arthur, Polo Martine, Foot Robert. Intérêts de la sous traitance de molécules de cuivre. Cells (2018)
    IDUnique

    Puis nous passons à la ligne suivante du tableau, qui reprendra cette mise en forme, jusqu'à ce que le tableau se finisse.

    Une fenêtre devra aussi s'ouvrir pour demander où l'on souhaite enregistrer le fichier Word (sur lequel sera copié les valeurs).

    Rien que ça !!

    Je n'y connais vraiment pas grand chose, et ai commencé le VBA suivant avec les commentaires, mais je sens que je m'embourbe ... :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    Private Sub ExportVersWord_Click()
    'on se positionne sur la feuille voulue
    With Worksheets("Publications-2018")
    'prendre les éléments du tableau qui a été filtré préalablement, et les concaténer dans une phrase :
    'définition de ligne
    ligne = Rows("1").Select
     
        Dim Auteurs As String
        Dim Titre As String
        Dim NomDeRevue As String
        Dim Annee As String
        Dim idhal As String
     
        'On commence à partir de la ligne 4
        For i = 4 To ligne
            'Si la ligne est visible, = résultat du filtre
            If Not .Rows(i).Hidden Then
            'On définit les variables, avec colonne$ on récupère la valeur en descendant de ligne en ligne tout en restant sur la colonne
                'On sélectionne colonne$
                Auteurs = .Range("C$" & i).Select
                'Après sélection, on copie avec la mise en forme
                Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=False
                Titre = .Range("D$" & i).Select
                Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=False
                NomDeRevue = .Range("E$" & i).Select
                Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=False
                Annee = .Range("A$" & i).Select
                Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=False
                idhal = .Range("B$" & i).Hyperlinks(1).Address
     
                'On concatène les valeurs copiées dans une phrase
                '& Chr(10) & & Chr(13) & servent pour un retour à la ligne
                Phrase = " - " & Auteurs & ". " & Titre & ". " & NomDeRevue & " (" & Annee & ")" & Chr(10) & & Chr(13) & & idhal & "."
     
                'Coller cette phrase dans un Word :
                'Ouvrir Word :
                'Nécessite d'activer la référence Microsoft Word xx.x object library
                '(dans la fenêtre VBE, cliquez sur Outils, Référénces et cocher la référence)
                Dim wdApp As New Word.Application
                Dim wdDoc As Word.Document
     
                'Ouvrir le word
                Set wdDoc = wdApp.Documents.Open
                wdApp.Visible = True
                wdDoc.Activate
     
                'on copie de la phrase, et on passe à la suivante
                texte = texte & IIf(texte <> "", vbNewLine, "") & Phrase.Copy
     
                'Collage
                wdDoc.ActiveWindow.ActivePane.Selection.PasteAndFormat (wdPasteDefault)
     
                'Saut de ligne dans le word
                Selection.InsertAfter vbCrLf
     
     
            End If
        Next i
     
                'ouvrir une boite de dialogue pour demander le chemin d'enregistrement du word
                With Application.FileDialog(msoFileDialogFolderPicker)
                    If .Show = -1 Then
                        chemin = .SelectedItems(1) & "\"
                    End If
                End With
     
                'On vide la mémoire des objets
                Set wdDoc = Nothing
                Set wdApp = Nothing
    End With
     
    End Sub
    Auriez vous des idées pour m'aider svp ?

    Merci

  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 166
    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 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En utilisant le Copier/Collage-Spécial Image (méta fichier amélioré) manuellement on conserve le format des cellules (couleur, police) d'excel
    En VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Objet.Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine
    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 averti
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 25
    Par défaut
    Merci de ton retour !

    J'ai modifié par le code que tu mas donné, et ai déclaré ma "Phrase" en String (oubli!)

    J'ai maintenant un message d’erreur "Erreur de compilation : Erreur de syntaxe" ou "Erreur de compilation : Attendu : Expression" en me surlignant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Phrase = & Auteurs & ". " & Titre & ". " & NomDeRevue & " (" & Annee & ")" & Chr(10) & & Chr(13) & & idhal &
    Le code en entier :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Private Sub ExportVersWord_Click()
     
    With Worksheets("Publications-2018")
    'prendre les éléments du tableau qui a été filtré préalablement, et les concaténer dans une phrase
    ligne = Rows("1").Select
     
        Dim Auteurs As String
        Dim Titre As String
        Dim NomDeRevue As String
        Dim Annee As String
        Dim idhal As String
        Dim Phrase As String
     
        'On commence à partir de la ligne 4
        For i = 4 To ligne
            'Si la ligne est visible, = résultat du filtre
            If Not .Rows(i).Hidden Then
            'On définit les variables, avec colonne$ on récupère la valeur en descendant de ligne en ligne tout en restant sur la colonne
                'On sélectionne colonne$
                Auteurs = .Range("C$" & i).Select
                'Après sélection, on copie avec la mise en forme
                Objet.Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine
                Titre = .Range("D$" & i).Select
                Objet.Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine
                NomDeRevue = .Range("E$" & i).Select
                Objet.Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine
                Annee = .Range("A$" & i).Select
                Objet.Selection.PasteSpecial DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine
                idhal = .Range("B$" & i).Hyperlinks(1).Address
     
                'On concatène les valeurs dans une phrase
                '& Chr(10) & & Chr(13) & servent pour un retour à la ligne
                Phrase = & Auteurs & ". " & Titre & ". " & NomDeRevue & " (" & Annee & ")" & Chr(10) & & Chr(13) & & idhal &
     
                'Coller cette phrase dans un Word :
                'Ouvrir Word :
                'Nécessite d'activer la référence Microsoft Word xx.x object library
                '(dans la fenêtre VBE, cliquez sur Outils, Référénces et cocher la référence)
                Dim wdApp As New Word.Application
                Dim wdDoc As Word.Document
     
                'Ouvrir le word
                Set wdDoc = wdApp.Documents.Open
                wdApp.Visible = True
                wdDoc.Activate
     
                'on copie de la phrase, et on passe à la suivante
                texte = texte & IIf(texte <> "", vbNewLine, "") & Phrase.Copy
     
                'Collage
                wdDoc.ActiveWindow.ActivePane.Selection.PasteAndFormat (wdPasteDefault)
     
                'Saut de ligne dans le word
                Selection.InsertAfter vbCrLf
     
     
            End If
        Next i
     
                'ouvrir une boite de dialogue pour demander le chemin d'enregistrement du word
                With Application.FileDialog(msoFileDialogFolderPicker)
                    If .Show = -1 Then
                        chemin = .SelectedItems(1) & "\"
                    End If
                End With
     
                'On vide la mémoire des objets
                Set wdDoc = Nothing
                Set wdApp = Nothing
    End With
     
    End Sub
    J'espère être assez clair

  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 166
    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 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai sans doute mal lu la question.
    La ligne de code dont je parle concerne un collage spécial dans Word qui fait bien entendu suite à la copie d'une plage de cellules issue d'excel

    Pour comprendre, rien de tel que d'utiliser l'enregistreur de Macros (dans Word) et effectuer manuellement ce que le code VBA doit faire

    Etapes
    1. Copie d'une plage de cellules d'Excel (par exemple A15:E21 dans mon exemple)
    2. Enclencher l'enregistreur de macros dans Word
    3. Effectuer un collage spécial (Méta fichier amélioré) dans Word à un endroit précis
    4. Stopper l'enregistrement et regarder le code généré


    Code VBA généré par l'enregistreur de macros de Word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
      Placement:=wdInLine, DisplayAsIcon:=False
    Illustration de l'étape 1 (Copie de la plage A15:E21)
    Nom : 190704 dvp (1) Copie plage cellules Excel.png
Affichages : 868
Taille : 13,0 Ko

    Illustration de l'étape 3 (Collage dans Word)
    Nom : 190704 dvp (2) Collage-Special_Word.png
Affichages : 939
Taille : 23,9 Ko

    Illustration du résultat dans Word
    Nom : 190704 dvp (3) Résultat - Collage-Special_Word.png
Affichages : 864
Taille : 11,6 Ko

    Voir discussion sur le même sujet Transfert de données Excel vers Word
    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

Discussions similaires

  1. [WD-2007] Intéractivité entre Word et Excel-récupérer des données excel dans word
    Par manuseverine dans le forum VBA Word
    Réponses: 11
    Dernier message: 08/10/2018, 15h13
  2. [XL-2003] Utilisation de données excel dans word
    Par etienne2564 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/07/2013, 13h00
  3. Import de données Excel dans Word
    Par Dadou74 dans le forum Word
    Réponses: 6
    Dernier message: 18/02/2008, 17h22
  4. Utilisation de bases de données EXCEL dans WORD
    Par pifpaf dans le forum Word
    Réponses: 1
    Dernier message: 15/02/2008, 11h47
  5. [VBA-E] Exporter des données Excel dans Word
    Par lucarno dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/08/2007, 19h25

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