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 :

Copier tableau Excel vers Word


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2024
    Messages : 2
    Par défaut Copier tableau Excel vers Word
    Bonjour,
    Je suis bloquée depuis déjà un moment sur mon code VBA, en espérant que quelqu'un aura la solution !

    Ce que je veux faire : Nom : Image1.png
Affichages : 267
Taille : 57,1 Ko
    Réaliser un lien entre un document Excel et Word.
    L'idée serait de copier automatiquement le tableau excel dans une page word indiquée en cellule S3 (le tableau se copierai dès que S3 est modifié et validé, comme ça la même trame de tableau me permet d'en réaliser plusieurs)


    Ce que mon code me fait : Le tableau ne se copie pas et peu importe le nombre de page sur mon Word, elles sont automatiquement supprimées pour n'en garder que 2.


    Voilà mon code de Module1 :
    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
    Dim wordApp As Object
    Dim wordDoc As Object
    Dim ws As Worksheet
    Dim rng As Range
    Dim isWordInitialized As Boolean
     
    Sub InitializeWord()
        ' Essaye d'obtenir l'instance Word en cours
        On Error Resume Next
        Set wordApp = GetObject(, "Word.Application")
        On Error GoTo 0
     
        If wordApp Is Nothing Then
            MsgBox "Aucune instance de Word n'est ouverte. Veuillez ouvrir un document Word.", vbExclamation
            Exit Sub
        End If
     
        ' Assure-toi que le document actif est bien celui que tu veux utiliser
        Set wordDoc = wordApp.ActiveDocument
        If wordDoc Is Nothing Then
            MsgBox "Aucun document actif trouvé dans Word.", vbExclamation
            Exit Sub
        End If
     
        wordApp.Visible = True
        isWordInitialized = True
    End Sub
     
    Sub CopyTableToWord()
        ' Référence à la feuille contenant le tableau
        Set ws = ThisWorkbook.Sheets("Nombres Patients")
     
        ' Définit la plage à copier (ajuste selon tes besoins)
        Set rng = ws.Range("A1:M17") ' Change "A1:M17" selon ta plage de données
     
        ' Vérifie si la plage est vide
        If Application.WorksheetFunction.CountA(rng) = 0 Then
            MsgBox "La plage à copier est vide.", vbExclamation
            Exit Sub
        End If
     
        ' Récupère la page spécifiée dans la cellule S3
        Dim pageNum As Long
        pageNum = ws.Range("S3").Value
     
        ' Vérifie le nombre de pages dans le document
        Dim currentPage As Long
        On Error Resume Next
        currentPage = wordDoc.ComputeStatistics(2) ' 2 = wdStatisticPages
        On Error GoTo 0
     
        ' S'assurer que le document a suffisamment de pages
        If pageNum > currentPage Then
            For i = currentPage To pageNum - 1
                wordDoc.Content.InsertBreak Type:=7 ' wdPageBreak
            Next i
        End If
     
        ' Déplace le curseur à la page spécifiée
        wordDoc.GoTo What:=1, Which:=1, Count:=pageNum ' 1 = wdGoToPage, 1 = wdGoToAbsolute
     
        ' Copie le tableau et le colle dans Word
        rng.Copy
        wordDoc.Content.PasteSpecial DataType:=wdPasteRTF ' Colle comme RTF (rich text format)
     
        ' Insérer un saut de page après chaque tableau
        wordDoc.Content.InsertBreak Type:=7 ' wdPageBreak
    End Sub

    Et voici le code de ma première feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Me.Range("S3")) Is Nothing Then
            If Target.Value <> "" Then ' Vérifie si S3 n'est pas vide
                If Not isWordInitialized Then
                    Call InitializeWord
                End If
                Call CopyTableToWord
            End If
        End If
    End Sub

    Merci beaucoup d'avance !

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut
    bonjour

    avez vous regarder la référence ADO qui vous permet beaucoup de choses dont le fait de travailler sur des fichiers fermés

  3. #3
    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 170
    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 170
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour coller une plage de cellules dans Word, utiliser plutôt la constante wdPasteEnhancedMetafile pour l'argument DataType en lieu et place de wdPasteRTF

    Pour en savoir plus, lire mon billet sur le sujet VBA Excel - Transférer des données d'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. [XL-2019] Copier tableau excels vers document word existant
    Par kookyzzz dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/11/2020, 17h06
  2. [XL-2003] Copier un tableau excel vers word
    Par somig dans le forum Excel
    Réponses: 1
    Dernier message: 23/02/2013, 10h44
  3. Export d'un tableau Excel vers Word
    Par Flo88 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/01/2009, 15h39
  4. export tableau excel vers word
    Par camzo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/10/2007, 18h53

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