Récupérer tout le fichier excel et non le classeur ouvert

Signaler
-
cs_Le Pivert
Messages postés
6537
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 février 2020
-
Bonjour,

Je travaille sur une macro, dont l'objectif est de récupérer dans un fichier Word tous les graphiques commençant par le même nom et ayant la même couleur d'onglet.
Si les graphiques sont sur le même onglet, ça fonctionne. Mais si ils sont sur un onglet différents, ils ne se copient pas sur le document Word.

J'ai essayé
ActiveBook
au lieu de
ActiveSheets
, mais sans succès...

Voici ma boucle :


For Each Chart In ws.ChartObjects
   
    'a = Left(Chart.Name, 1)
    'MsgBox a

    If Left(Chart.Name, 1) = "(" And ws.Tab.Color = RGB(128, 128, 128) Then  
    
    
   
    
    
ActiveBooks.ChartObjects("(Test)").Chart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
wrdApp.Selection.Goto what:=wdGoToBookmark, Name:="Graphique2" ' on recherche le signet dans Word pour se positionner
wrdApp.Selection.MoveRight wdCharacter, 1
'wrdApp.Selection.MoveLeft wdCharacter, 1 ' optionnel : pour se placer AVANT le signet (move left)
wrdApp.Selection.PasteSpecial link:=False, DataType:=wdPasteMetafilePicture, Placement:=wdInLine, DisplayAsIcon:=False


Merci d'avance.


Configuration: Windows / Chrome 78.0.3904.97

4 réponses

Messages postés
9618
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 février 2020
526
bonjour,
classeur et fichier étant synonymes, ton titre est un peu bizarre.
tu ne nous montres qu'une partie de ton code.
je suppose que ws est déclaré comme worksheet, et que tu fais une boucle pour faire le tour de tous les onglets de ton classeur.
je me demande si tu ne t'embrouilles pas en ayant choisi d'utiliser "Chart" comme nom de variable: utilises plutôt "graphique". Sois certain, aussi, d'avoir bien
option explicit
en haut de ton module.
Je pense que tout s'éclaircira et que tu découvriras ton erreur.
Messages postés
6537
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 février 2020
447
Bonjour,

comme le dit yg_be si justement, ton titre est équivoque. Il s'agit d'onglet et non de classeur!

Dans ton dernier post je t'ai indiqué ce lien. Il ne fait pas le job?

Essaie de mettre un MsgBox pour voir si il boucle sur tous les graphiques. Si oui, c'est ta macro qui ne fait pas le job!

https://vb.developpez.com/faqvba/?page=3.5#listgraphique

cs_Le Pivert
Messages postés
6537
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 février 2020
447
Cela devrait t’intéresser en l'adaptant à ton environnement:

https://forum.excel-pratique.com/viewtopic.php?t=68158

@+ Le Pivert
Bonjour et merci pour vos réponses,

Si, cela m'a aidé. Je vous remercie encore infiniment.
Mais je n'ai réussi à l'appliquer qu'à l'onglet actif, et non au classeur tout entier.. C'est pour cette raison que j'ai posté ce sujet.
Veuillez m'excuser, si je n'ai pas été assez explicite.

Voilà le reste du code.



Sub Export_Graphiques_Vers_Word()

Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim ws As Worksheet
Dim sh As Worksheet, i As Long
Dim AnyString, a


Application.ScreenUpdating = False
    
Set ws = ThisWorkbook.Sheets(1) 'Onglet contenant les graphiques


Set wrdApp = GetObject(, "Word.Application")
Set wrdDoc = wrdApp.ActiveDocument


For Each Chart In ws.ChartObjects
   

    If Left(Chart.Name, 1) = "(" And ws.Tab.Color = RGB(128, 128, 128) Then  'ws.Tab.Color = RGB(40, 150, 160) Then '("Sheet1") = RGB(40, 150, 160) Then
    
    
   
    
ActiveBooks.ChartObjects("(µ) Fv_SL_MECH").Chart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
wrdApp.Selection.Goto what:=wdGoToBookmark, Name:="Graphique2" ' on recherche le signet dans Word pour se positionner
wrdApp.Selection.MoveRight wdCharacter, 1
'wrdApp.Selection.MoveLeft wdCharacter, 1 ' optionnel : pour se placer AVANT le signet (move left)
wrdApp.Selection.PasteSpecial link:=False, DataType:=wdPasteMetafilePicture, Placement:=wdInLine, DisplayAsIcon:=False


End If
Next Chart
' -- Terminer
wrdDoc.Save
Set wrdDoc = Nothing: Set wrdApap = Nothing
Application.ScreenUpdating = True




'Else: MsgBox "Erreur"



End Sub

yg_be
Messages postés
9618
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 février 2020
526
Option Explicit

Sub Export_Graphiques_Vers_Word()

Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim onglet As Worksheet
Dim graphique As Chart

Application.ScreenUpdating = False
Set wrdApp = GetObject(, "Word.Application")
Set wrdDoc = wrdApp.ActiveDocument
For Each onglet In ThisWorkbook.Sheets
    If onglet.Tab.Color = RGB(128, 128, 128) Then
        For Each graphique In onglet.ChartObjects
            If Left(graphique.Name, 1) = "(" Then   'ws.Tab.Color = RGB(40, 150, 160) Then '("Sheet1") = RGB(40, 150, 160) Then
                graphique.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
                wrdApp.Selection.Goto what:=wdGoToBookmark, Name:="Graphique2" ' on recherche le signet dans Word pour se positionner
                wrdApp.Selection.MoveRight wdCharacter, 1
                'wrdApp.Selection.MoveLeft wdCharacter, 1 ' optionnel : pour se placer AVANT le signet (move left)
                wrdApp.Selection.PasteSpecial link:=False, DataType:=wdPasteMetafilePicture, Placement:=wdInLine, DisplayAsIcon:=False
            End If
        Next graphique
    End If
Next onglet
' -- Terminer
wrdDoc.Save
Set wrdDoc = Nothing: Set wrdApp = Nothing
Application.ScreenUpdating = True
End Sub
Merci pour ton aide, je vais essayer de l'adapter.
Mais ça me retourne une erreur, incompatibilité de type pour
Next onglet