OVH Cloud OVH Cloud

Macro Impression

12 réponses
Avatar
mattparisien59
Bonjour,

Actuellement en stage (niveau DUT), on m'a demandé de faire une macro qui permet d'imprimer une certaine zone. exemple sur une feuille excel j'ai plusieurs tableaux mais je souhaite en imprimer qu'un seul. Je me demande si cette macro est faisable ou s'il est plus simple de faire autrement? J'ai un même exemple à faire avec un graphique qui est sur la même qu'un tableau mais je souhaite imprimer seulement le graphique.
Merci de votre aide très précieuse.
Matt

2 réponses

1 2
Avatar
michdenis
| Et maintenant je cherche une macro avec options :
| 1) Imprimer seulement les cellules
| 3) Imprimer cellules et graphique(s).

Une autre tite fonction pour répondre aux 3 questions :

Selon la valeur attribuée à la variable "Valeur" True or False
Tu passes la propriété "PrintObject" à true or false pour chaque
graphe situé dans la plage de cellules
Si la propriété Printobject = True, tu imprimeras la plage de cellules + les graphes
si la propriété PrintObject = False, seulement les cellules seront imprimer

'------------------------------------
Sub test()
Propriété_Imprimer_Graph_Ds_Plage "Sheet1", Range("C4:L26"), False
With Sheet1 ' Worksheets("Sheet1")
.PageSetup.PrintArea = Range("C4:L26").Address
.PrintPreview 'or PrintOut
.PageSetup.PrintArea = ""
End With
Propriété_Imprimer_Graph_Ds_Plage "Feuil1", Range("C4:L26"), True
End Sub
'------------------------------------

Function Propriété_Imprimer_Graph_Ds_Plage(Feuille As String, Rg As Range, Valeur)
Dim Sh As Shape, Obj As Object
For Each Sh In Worksheets(Feuille).Shapes
Set Obj = Sh.OLEFormat.Object
If TypeName(Obj) = "ChartObject" Then
With Obj
If Union(Rg, Range(.TopLeftCell, .BottomRightCell)).Address = Rg.Address Then
Obj.PrintObject = Valeur
End If
End With
End If
Next
End Function
'------------------------------------

| 2) Imprimer seulement le ou les graphiques tels qu'ils apparaissent dans la sélection.

Si tu désires imprimer seulement les graphes dans la plage de cellule

'---------------------------
Sub test1()
Propriété_Imprimer_Graph_Ds_Plage "Feuil1", Range("C4:L26"), True
End Sub
'---------------------------

Même fonction + une ligne de code
'---------------------------
Function Propriété_Imprimer_Graph_Ds_Plage(Feuille As String, Rg As Range, Valeur)
Dim Sh As Shape, Obj As Object
For Each Sh In Worksheets(Feuille).Shapes
Set Obj = Sh.OLEFormat.Object
If TypeName(Obj) = "ChartObject" Then
With Obj
If Union(Rg, Range(.TopLeftCell, .BottomRightCell)).Address = Rg.Address Then
Obj.PrintObject = Valeur
Obj.Chart.PrintPreview 'or Printout
End If
End With
End If
Next
End Function
'---------------------------
Avatar
michdenis
Cette fonction est un peu plus courte et plus rapide !

'----------------------------------
Function Propriété_Imprimer_Graph_Ds_Plage(Feuille As String, Rg As Range, Valeur)
Dim Sh As Shape, Obj As Object
For Each Obj In Worksheets(Feuille).ChartObjects
With Obj
If Union(Rg, Range(.TopLeftCell, .BottomRightCell)).Address = Rg.Address Then
Obj.PrintObject = Valeur
'Si nécessaire
'Obj.Chart.PrintPreview 'or Printout
End If
End With
Next
End Function
'----------------------------------



"michdenis" a écrit dans le message de groupe de discussion :


| Et maintenant je cherche une macro avec options :
| 1) Imprimer seulement les cellules
| 3) Imprimer cellules et graphique(s).

Une autre tite fonction pour répondre aux 3 questions :

Selon la valeur attribuée à la variable "Valeur" True or False
Tu passes la propriété "PrintObject" à true or false pour chaque
graphe situé dans la plage de cellules
Si la propriété Printobject = True, tu imprimeras la plage de cellules + les graphes
si la propriété PrintObject = False, seulement les cellules seront imprimer

'------------------------------------
Sub test()
Propriété_Imprimer_Graph_Ds_Plage "Sheet1", Range("C4:L26"), False
With Sheet1 ' Worksheets("Sheet1")
.PageSetup.PrintArea = Range("C4:L26").Address
.PrintPreview 'or PrintOut
.PageSetup.PrintArea = ""
End With
Propriété_Imprimer_Graph_Ds_Plage "Feuil1", Range("C4:L26"), True
End Sub
'------------------------------------

Function Propriété_Imprimer_Graph_Ds_Plage(Feuille As String, Rg As Range, Valeur)
Dim Sh As Shape, Obj As Object
For Each Sh In Worksheets(Feuille).Shapes
Set Obj = Sh.OLEFormat.Object
If TypeName(Obj) = "ChartObject" Then
With Obj
If Union(Rg, Range(.TopLeftCell, .BottomRightCell)).Address = Rg.Address Then
Obj.PrintObject = Valeur
End If
End With
End If
Next
End Function
'------------------------------------

| 2) Imprimer seulement le ou les graphiques tels qu'ils apparaissent dans la sélection.

Si tu désires imprimer seulement les graphes dans la plage de cellule

'---------------------------
Sub test1()
Propriété_Imprimer_Graph_Ds_Plage "Feuil1", Range("C4:L26"), True
End Sub
'---------------------------

Même fonction + une ligne de code
'---------------------------
Function Propriété_Imprimer_Graph_Ds_Plage(Feuille As String, Rg As Range, Valeur)
Dim Sh As Shape, Obj As Object
For Each Sh In Worksheets(Feuille).Shapes
Set Obj = Sh.OLEFormat.Object
If TypeName(Obj) = "ChartObject" Then
With Obj
If Union(Rg, Range(.TopLeftCell, .BottomRightCell)).Address = Rg.Address Then
Obj.PrintObject = Valeur
Obj.Chart.PrintPreview 'or Printout
End If
End With
End If
Next
End Function
'---------------------------
1 2