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

VBA Discussion :

Lier les tableaux excel dans un Word prééxistant


Sujet :

VBA

  1. #1
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Juin 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Lier les tableaux excel dans un Word prééxistant
    Bonjour,

    J'aimerais faire en sorte qu'un tableau Excel soit copié-collé avec liaison dans un Word existant via signet. j'ai déjà trouvé un début de code, mais il s'arrête à la copie des cellules dans l'Excel et ne copie pas dans le Word.

    Ce code sera valable que pour ce Doc Word, j'imagine? Si je l'enregistre sous un autre nom cela ne fonctionnera pas ? Aurait-il une solution pour demander à l'utilisateur dans quel Word il veut copier, à condition qu'il ait enregistré au préalable?
    Voici le 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
    Sub EnvoyerDonneesExcelVersWord()
    
        Dim oWdApp As Object 'WordA.Application
        Dim oWdDoc As Object 'Word.Document
      
        Set oWdApp = CreateObject("Word.Application")
        Set oWdDoc = oWdApp.Documents.Add
        
        oWdApp.Visible = True
        'Ouvre le document Word
        oWdApp.Documents.Open "G:\GMVD_Catering\Fichiers de base\Menu à 27.-\Offre_Menu_1.docm" 
        Sheets("Matériel").Activate
        
        Range("Matériel[[#Data],[#Totals],[Désignation]:[Total CHF]]").Select
        Selection.Copy ' Copie les données Excel  
        
        oWdApp.Goto What:=wdGoToBookmark, Name:="Matériel"
        oWdDoc.PasteEnhancedMetafile 'Coller la plage dans Word
        Application.CutCopyMode = False 'Annuler le mode couper/copier
        
    End Sub
    Merci d'avance pour vos réponses, j'ai vraiment besoin d'un petit coup de pouce.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Susana06 Voir le message
    Bonjour,

    oWdDoc correspond à un nouveau document alors que vous souhaitez coller dans un fichier existant.
    Etes-vous certaine de PasteEnhancedMetafile ? Mettez Option Explicit en tête de module pour vérifier les anomalies dans votre code.
    Sinon, mettez un fichier Excel en ligne sans données confidentielles pour voir.

  3. #3
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Juin 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Offre_test.xlsm
    Merci pour votre réponse. Ci-joint le fichier!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Susana06 Voir le message
    A tester

  5. #5
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Juin 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    A tester


    Merci ça marche bien, mais quand je le copie sur mon fichier, il me marque ceci:

    Nom : Capture.PNG
Affichages : 302
Taille : 15,3 Ko

    Pourtant je l'ai copié tel quel... Qu'est-ce que je fais pas juste?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Susana06 Voir le message
    Il faut déclarer cette variable en tête du module1, sous Option Explicit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public FichierAOuvrir as Variant

  7. #7
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Juin 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Il faut déclarer cette variable en tête du module1, sous Option Explicit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public FichierAOuvrir as Variant
    Bonjour Eric,

    Merci infiniment, vous m'avez facilité la tâche bien plus que vous ne l'imaginez... Merci encore !

  8. #8
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Juin 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    En effet, ça marche super bien.

    Seul hic, cela me copie le tableau Excel comme une image sur le Word, certes avec liaison, mais du coup au niveau mise en page c'est pas le top. Dans mon Word je vais faire coller plusieurs tableaux, j'aimerais que chaque colonne de chaque tableau soit alignée. Avec cette solution je ne vois pas comment cela serait possible...

    Qqn aurait une solution pour que que le tableau soit copié en tant que tableau avec liaison dans le Word et pas comme image avec liaison?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Susana06 Voir le message
    Sans vidage d'écran difficile de comprendre l'effet à obtenir.
    En revanche, vous pourriez faire l'essai à la mano de copier votre tableau sur Excel et de le coller sur un fichier Word, puis de voir parmi les 5 possibilités de collage, laquelle correspond à ce que vous souhaitez. Et juste avant de coller, vous pourriez enregistrer une macro sur Word pour voir le format que vous avez collé.

  10. #10
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Juin 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Sans vidage d'écran difficile de comprendre l'effet à obtenir.
    En revanche, vous pourriez faire l'essai à la mano de copier votre tableau sur Excel et de le coller sur un fichier Word, puis de voir parmi les 5 possibilités de collage, laquelle correspond à ce que vous souhaitez. Et juste avant de coller, vous pourriez enregistrer une macro sur Word pour voir le format que vous avez collé.
    Bonjour,

    Ton astuce a super bien fonctionné. Dans le Word, j'ai crée une macro qui met en forme les tableaux au niveau des colonnes et 2-3 petites fusions. Qui fonctionne super bien, mais si je n'envoie pas tous les tableaux de mon excel, ça décale tout car j'ai du les nommer de 1 à 13 dans le Word. (ils n'ont pas tous la même taille de colonnes...). Comment je pourrait faire pour que ma macro dans l'excel prévoie déjà la mise en forme dans le Word pour uniquement le tableau en question?

    voici ce que j'ai comme code dans le Word:
    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 Miseenpage ()
    With ActiveDocument.Tables(1)
        .Columns(1).Width = CentimetersToPoints(8.5)
    End With
     
    With ActiveDocument.Tables(2)
        .Columns(1).Width = CentimetersToPoints(2)
        .Columns(2).Width = CentimetersToPoints(6.5)
    End With
     
    With ActiveDocument.Tables(3)
        .Columns(1).Width = CentimetersToPoints(6.5)
        .Columns(2).Width = CentimetersToPoints(10)
    End With
     
    With ActiveDocument.Tables(4)
        .Columns(1).Width = CentimetersToPoints(6.5)
        .Columns(2).Width = CentimetersToPoints(8)
        .Columns(3).Width = CentimetersToPoints(2)
     
        .Cell(Row:=First, Column:=2).Merge _
                mergeTo:=ActiveDocument.Tables(4).Cell(Row:=1, Column:=3) 'Fusionne la cellule Nb Pax
    End With
     
    End Sub

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Susana06 Voir le message
    Bonjour,

    Une solution consisterait à créer autant de signets que de tableaux possibles dans le fichier Word puis d'intégrer le tableau dans le signet
    De vérifier la présence d'une table dans le range du signet puis ensuite appliquer le code qu'il faut en sélectionnant le tableau selon son signet.

    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
     
    Public MatriceTables() As Variant
     
    Sub ChargerLaMatriceDesSignets()
     
    Dim I As Integer
     
        With ActiveDocument.Range
     
             If .Bookmarks.Count = 0 Then Exit Sub
     
             For I = 1 To .Bookmarks.Count
                 ReDim Preserve MatriceTables(1, I - 1)
                 MatriceTables(0, I - 1) = I
                 If .Bookmarks(I).Range.Tables.Count > 0 Then MatriceTables(1, I - 1) = "OK"
             Next I
        End With
     
        For I = LBound(MatriceTables, 1) To UBound(MatriceTables, 1)
            If MatriceTables(1, I) = "OK" Then
               Debug.Print "Tableau : " & I & " : " & MatriceTables(1, I)
               ' Procédure table I...
            End If
     
        Next I
     
    End Sub

  12. #12
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Juin 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Pour les signets c'est fait car j'en ai besoin pour la macro depuis excel. Mais j'avoue que je comprends pas tout dans ton code... Mon premier signet s'appelle "Informations" par exemple comment je peux adapter? La procédure de mise en forme je la rentre directement à la place de ton commentaire "Procédure table I"? Après next I, je refais le code pour la prochaine table? ou je dois créer un nouveau sub? suis un peu perdue je crois dans tous les codes, en plus je suis un peu fatiguée ces temps... désolée je pense que pour toi cela semble surement évident mais là je patauge...

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Susana06 Voir le message
    Le fichier Excel ne comprenait qu'un tableau. Il te faut montrer un exemple complet et indiquer où doivent aller les différents tableaux dans le fichier Word.

  14. #14
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Juin 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Le fichier Excel ne comprenait qu'un tableau. Il te faut montrer un exemple complet et indiquer où doivent aller les différents tableaux dans le fichier Word.
    Voilà les 2 fichiers. Les signets dans le Word ont le même nom que les tableaux et feuilles excel correspondants.
    Fichiers attachés Fichiers attachés

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Susana06 Voir le message

    Le fichier Excel contient l'onglet "Liste des exports" qui se présente sous cette forme. Le bouton lance l'ensemble des exports si les cellules Exporter sont cochées. Le document support est un modèle .dotx.
    Pièce jointe 575091

    Le code est contenu est dans le premier module :
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    Option Explicit
     
    Sub Mod01_ExportVersWord()
     
    Dim AireWord As Range, AireExports As Range
    Dim I As Integer
    Dim RepertoireWord As String, FichierWord As String, RepertoireOffres As String, FichierClient As String
     
    Dim oWdApp As Word.Application
    Dim oWdDoc As Word.Document
     
     
        With Sheets("Liste des exports")
     
             RepertoireWord = .Range("RepertoireDocument")
             FichierWord = RepertoireWord & .Range("DocumentEnCours")
     
             RepertoireOffres = .Range("RepertoireDesOffres")
             FichierClient = RepertoireOffres & .Range("NomOffreClient")
     
             Set AireExports = .ListObjects("TableDesExports").ListColumns("Nom").DataBodyRange
             AireExports.Offset(0, 2).ClearContents
             ChDir RepertoireWord
     
        End With
     
     
        ' Ouverture du fichier modèle Word
        '---------------------------------
        Set oWdApp = CreateObject("Word.Application")
        With oWdApp
             .Visible = True
             Set oWdDoc = oWdApp.Documents.Add(Template:=FichierWord)
        End With
     
        For I = 1 To AireExports.Count
                 With AireExports(I)
                      If .Offset(0, 3) = "X" Then
                         Select Case .Value
                                Case "Matériel"
                                     Set AireWord = Sheets("Matériel").Range("Matériel[[#Data],[#Totals],[Désignation]:[Total CHF]]")
                                Case "Mobilier"
                                     Set AireWord = Sheets("Mobilier").Range("Mobilier[[#Data],[#Totals],[Désignation]:[Total CHF]]")
                                Case "Logistique"
                                    Set AireWord = Sheets("Logistique").Range("Logistique[[#Data],[#Totals],[Désignation]:[Total CHF]]")
                                Case "Recap"
                                     Set AireWord = Sheets("Recap").Range("Recap")
                                Case "Personnel"
                                     Set AireWord = Sheets("Personnel").Range("Personnel[[#Data],[#Totals],[Colonne1]:[Total CHF]]")
                                Case "Boissons"
                                     Set AireWord = Sheets("Boissons").Range("Boissons[[#Data],[#Totals],[Désignation]:[Total CHF]]")
                         End Select
                         EnvoyerDonneesVersWord oWdApp, oWdDoc, .Offset(0, 1), AireWord
                         .Offset(0, 2) = Now
                      End If
                 End With
     
        Next I
     
     
        With oWdDoc
             .SaveAs2 Filename:=FichierClient, FileFormat:=12
             .Close savechanges:=True
        End With
        oWdApp.Quit
     
     
        MsgBox "Fin de l'export !", vbInformation
     
        Set oWdApp = Nothing
        Set oWdDoc = Nothing
     
        Set AireWord = Nothing
        Set AireExports = Nothing
     
     
    End Sub
     
     
    Sub EnvoyerDonneesVersWord(ByVal oWdApp2 As Word.Application, ByVal oWdDoc2 As Word.Document, ByVal SignetCible As String, ByVal AireSource As Range)
     
    Dim Repertoire As String
    Dim I As Integer
     
        AireSource.Copy
     
        With oWdDoc2
             If .Bookmarks.Exists(SignetCible) = False Then
                 MsgBox "Absence du signet " & SignetCible & " !", vbCritical
             End If
             .Bookmarks(SignetCible).Select
             With oWdApp2
                  .Selection.PasteExcelTable True, False, False
             End With
        End With
     
        Application.CutCopyMode = False
     
     
    End Sub

  16. #16
    Candidat au Club
    Femme Profil pro
    Secrétaire
    Inscrit en
    Juin 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Secrétaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Merci. Je pars en vacances dès aujourd'hui je n'aurais pas le temps de faire des tests. Dès mon retour j'essaie et je te redis. Merci infiniment encore une fois.

Discussions similaires

  1. [XL-2010] Extraction de tableaux Excel dans Word: problème de vitesse d'exécution
    Par mikoto96 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/08/2015, 17h12
  2. [WD-2010] Tableaux Excel dans Word
    Par orval34 dans le forum Word
    Réponses: 1
    Dernier message: 11/09/2014, 15h53
  3. [WD-2010] tableaux excel dans word mais 1 seul fichier
    Par amilka55 dans le forum Word
    Réponses: 1
    Dernier message: 09/04/2014, 21h06
  4. Récupérer nomfichier excel dans macro Word
    Par deca2 dans le forum VBA Word
    Réponses: 6
    Dernier message: 08/10/2009, 11h31
  5. VBA lier une table Excel dans Access
    Par darkspoilt dans le forum VBA Access
    Réponses: 10
    Dernier message: 21/05/2007, 16h33

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