Copier selection depuis une autre feuil, coller dans Word

Résolu
benjamin67VBA Messages postés 10 Statut Membre -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
Bonjour,

J'ai un peu parcouru les topics, mais je n'ai pas trouvé de réponse à ma question :
Vous le remarquerez, je suis pas une brute en VBA
Je crée un tableau Excel de saisie de données pour les exporter dans une trame word.

Tout marche bien sauf pour importer mes tableaux excel dans le document word, notamment si le tableau vient d'un autre onglet que celui ou j'ai lancé la maccro avec mon bouton activeX.

Je sais pas si j'ai codé au mauvais endroit ( module ? objet ? )

Voilà le code, qui marche si je ne fait pas référence à une autre feuil, et dans ce cas là, qui ne marche pas :

Private Sub CommandButton1_Click()

 Dim Cible As Object
 Dim chemin As String, fichier As String
  

    Sheets("Feuil2").Range(Cells(1, 1), Cells(6, 9)).CopyPicture Appearance:=xlPrinter
' j'ai essayé avec sheets.activate, sheets.select, with sheets etc.. Rien n'y fait 
'J'ai aussi éssayé de créer un Sub dans la feuil 2 et de call dans ce sub, mais le call ne fonctionne pas

    'A terme le range selectionné sera variable 

    chemin = ActiveWorkbook.Path
    fichier = "ESSAI.docx"
    
    ' lancement de Word
    ' gestion de l'erreur "activeX" d'après archives MPFE Laurent Longre
    On Error Resume Next
        Set Cible = CreateObject(class:="Word.Application")
    On Error GoTo 0
    If Cible Is Nothing Then
        Set Cible = New Word.Application
    End If
    
    With Cible
        
        Documents.Open Filename:=chemin & "\" & fichier
        .Visible = True
        .Selection.Goto What:=wdGoToBookmark, Name:="S1"
        .Selection.Paste
              
        
  End With
  
  Set Cible = Nothing
  
  ActiveWorkbook.Application.Visible = True
  

 End Sub



j'en profite aussi rapidement : Lorsque que j'execute le code sans référence vers la feuil2, ça fonctionne très bien, mais si je le relance (Word fermé) ca ne fonctionne plus. Je dois alors fermer et excel et le reouvrir pour ue cela fonctionne à nouveau, bizarre. Y-a t-il un truc ?

Je vous remercie d'avance pour vos réponses !

Voilà, merci d'avance pour vos réponses !

6 réponses

  1. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    Bonjour,

    Pour que ça fonctionne, il suffit d'activer la feuille choisie.
    ci-dessous code simplifié

    Private Sub CommandButton1_Click()

    Dim Cible As New Word.Application
    Dim plage As Range
    Dim chemin As String, fichier As String

    With Sheets("Feuil2")
    .Activate
    .Range(Cells(1, "A"), Cells(6, "I")).CopyPicture Appearance:=xlPrinter
    End With

    ' ouverture du fichier Word
    chemin = ActiveWorkbook.Path
    fichier = "ESSAI.docx"
    With Cible
    Documents.Open Filename:=chemin & "\" & fichier
    .Visible = True
    .Selection.Goto What:=wdGoToBookmark, Name:="S1"
    .Selection.Paste
    End With

    End Sub

    --
     
    0
    1. benjamin67VBA Messages postés 10 Statut Membre
       
      Merci pour ta réponse, mais ca ne fonctionne pas,

      J'ai une erreur 1004, erreur définir par l'application ou par l'objet sur le .range(cells... dans le With

      J'ai essayé d'adapter avec une fonction with mais ça ne fonctionne pas

      Une idée ?
      0
  2. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    Pas d'idée spéciale car cela fonctionne sur ma version Excel 2013. Sans l'activate, j'ai effectivement une erreur 1004.
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    comme ceci:

    Private Sub copie_word()
    Dim chemin As String, fichier As String
     'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
        Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
      Sheets("Feuil2").Activate
     Sheets("Feuil2").Range(Cells(1, 1), Cells(6, 9)).CopyPicture Appearance:=xlPrinter
     'A terme le range selectionné sera variable
      chemin = ActiveWorkbook.Path
      fichier = "ESSAI.docx"
      'ouvre session word
        Set WordApp = New Word.Application
         'ouvre du document Word
        Set WordDoc = WordApp.Documents.Open(chemin & "\" & fichier)
        WordApp.Visible = True
       WordApp.Selection.Goto What:=wdGoToBookmark, Name:="S1"
        WordApp.Selection.Paste
          'Ferme le document word en sauvegardant les modifications
        WordDoc.Close True
        'ferme la session Word
        WordApp.Quit
       ActiveWorkbook.Application.Visible = True
      End Sub
    


    @+ Le Pivert
    0
    1. benjamin67VBA Messages postés 10 Statut Membre
       
      Bonjour,

      Merci pour votre réponse, mais ça ne marche toujours pas : même erreur 1004 sur le range

      J'ai également essayé sur un nouveau doc excel, j'ai une erreur de compilation

      Cela peut-il venir d'un paramètre à activer/desactiver ? à ce que contient le range ?
      Si ça peut jouer : je travaille sur Windows server 2012, avec excel 2013

      Merci

      MAJ : EN fait le code de base marche : quand je code dans module, et pas dans feuill1 !!!!
      0
  4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Voilà un exemple à dezipper qui fonctionne chez moi:

    http://www.cjoint.com/c/FGDjCr87VGQ
    0
    1. benjamin67VBA Messages postés 10 Statut Membre
       
      Merci pour ta réponse, j'ai trouvé la solution : je devais coder dans un module, pas dans ma feuill1

      J'ai maintenant un problème de compatibilité avec ce nouveau code et le code auquel je vais le rattacher :


      je codais initialement de la manière suivante :

      Dim WordApp As Word.Application
      Dim WordDoc As Word.Document
      Set WordApp = CreateObject("word.application")    'ouvre une session Word
          
      If Cells(17, 2).Value = "CHS" Then
      
          
          WordApp.Visible = True
          Set WordDoc = WordApp.Documents.Open("\\xxxx\CHS.docx")  'ouvre le document Word
          
      
          MsgBox "Le document est prêt"
          
          WordDoc.Bookmarks("S1").Range.Text = Cells(5, 2).Value
          WordDoc.Bookmarks("S2").Range.Text = Cells(5, 2).Value
          WordDoc.Bookmarks("S3").Range.Text = Cells(5, 2).Value
          WordDoc.Bookmarks("S20").Range.Text = Cells(5, 2).Value
      
          WordDoc.Bookmarks("S4").Range.Text = Cells(8, 2).Value 'CP
          WordDoc.Bookmarks("S5").Range.Text = Cells(8, 2).Value
      
      etc etc etc etc 
      
      
      



      J'y vais un peu à tâtons, pour modifier ce que tu m'as donné, je suis pas vraiment familiarisé avec ces fonctions

      Dim WordApp As Word.Application
      Dim WordDoc As Word.Document
      Set WordDoc = WordApp.Documents.Open(chemin & "\" & fichier)
          WordApp.Visible = True
          WordApp.Selection.Goto What:=wdGoToBookmark, Name:="S1"
          WordApp.Selection.Paste
      
      



      Une idée ?

      Merci
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question