Utilisation de Graphique à l'aide de VB - Mise en page - Répondez au moins qqch :)

Hello à tous !! :slight_smile:

J’ai créé un programme qui me permet de faire les graphiques tout seul dans excel et qu’il soit affiché sur une autre feuille. :??:

Quelqu’un saurait-il comment faire pour que chaque graphique soit affiché un après l’autre de manière à ce qu’il soit chacun sur une page en tenant compte de (la résolution de l’écran => je suis pas sûr qu’il y aie besoin) et de la mise en page de l’imprimante ?

Merci d’avance de vos réponses …

PS : Même ceux qui aurait une petite idée ou une proposition à faire d’une partie de ce que je demande, me convient très bien également
:slight_smile:

Non, la résolution écran n’est pas importante, de toutes façons… Le plus important est plutôt de récupérer l’imprimante active, car Excel calcule la surface imprimable en temps réel et en fonction de l’imprimante…

Sinon, pour t’aider, une petite vue de ton code serait fort utile :wink:

Pour ce qui est du code, c’est pas moi qui l’ai fait à la base.
Je dois faire en sorte qu’il fonctionne correctement pour que les personnes de mon entreprise l’utilise …

Là je te donne un exemple pour le graphique

If UserForm1.CheckBox20.Value = True Then
Titre = UserForm3.TextBox1.Value
Offset1 = 1
For Num = 1 To 6
Select Case Num
Case 1
Nombre_cos = 0
Incr1 = 0
Incr2 = 0
If UserForm1.CheckBox1.Value = True Then
Call MulRange(Num, 1)
Call Graph("Canaux 1 à 3", "Courant [A]", 0)
End If

Il utilisait la résolution de l’écran pour afficher correctement les graphiques un après l’autre, mais ça fonctionnait seulement pour une seule résolution d’écran et une seule imprimante


ActiveSheet.Shapes(GraphName).IncrementLeft (-170 + Incr2 * 660)
ActiveSheet.Shapes(GraphName).IncrementTop (-105 + Incr1 * 461) ‘’’'moins le chiffre de base, moins 47.25, puis le chiffre de base plus 2.25
Incr1 = Incr1 + 1

Ce que je voudrais faire, mais je ne sais pas faire, c’est reprendre les informations de l’imprimante pour que mes graphiques soient mis correctement ?

J’ai trouvé sur internet un exemple pour reprendre la résolution d’écran afin de l’exploiter :

Option Explicit
Public Declare Function GetDC Lib "user32" _
(ByVal hwnd As Long) As Long

Private Declare Function GetDeviceCaps Lib "gdi32" _
(ByVal hdc As Long, _
ByVal nIndex As Long) As Long

Private Const HORZRES As Long = 8
Private Const VERTRES As Long = 10
Private Const BITSPIXEL As Long = 12
Private Const VREFRESH As Long = 116

Private Sub resEC()
Dim hdc As Long
Dim currHRes As Long
Dim currVRes As Long
Dim currBPP As Long
Dim currVFreq As Long
Dim sBPPtype As String
Dim sFreqtype As String
hdc = GetDC(0)
'get the system settings
currHRes = GetDeviceCaps(hdc, HORZRES)
currVRes = GetDeviceCaps(hdc, VERTRES)
currBPP = GetDeviceCaps(hdc, BITSPIXEL)
currVFreq = GetDeviceCaps(hdc, VREFRESH)

Merci si tu arrives à répondre à ma question :??: :??: :??:

qqch.

Si tu peux mettre un graphique par feuille, il seront forcément imprimés séparément, sinon, sur une feuille en passant en “Affichage/Aperçu des sauts de pages” tu peux régler le zoom et l’emplacement des sauts de pages, c’était ça que tu voulais savoir?
edit: à la vue du code non, ça a l’air balèze.

Je vais encore essayé 2 ou 3 trucs, sur le programme et si je n’arrive vraiment pas du tout, je reposterai

Un petit programme ça m’aurait fait plaisir pour apprendre à programmer en VB.

Mais celui-ci qui doit faire 81 graphiques de 144’000 valeurs d’un appareil de mesure pour moteur, je crois que ceux de l’entreprise veulent que mon cerveau explose … :confused:

:wink:

Tu veux récupérer les infos de l’imprimante active ?

Vas voir du coté de l’objet Application… Style Application.ActivePrinter :wink:

Ok je vais aller regarder cette option pour les informations de l’imprimante !

Mais je vais d’abord reposer les neurones en allant manger qqch :pt1cable:

:super: Prends des forces !

J’ai testé ce que tu m’as proposé “application.activeprinter”, en tout cas il détecte bien l’imprimante !!

Le seul petit soucis c’est comment prendre la mise en page de cette imprimante afin que les graphiques soit dessinés selon cette mise en page ?

En tout cas, je peux remarquer que l’aide de VB sous Windows, n’est pas génial :wink:

:smiley: Oui, c’est vrai, l’aide en ligne n’est pas top top, mais bon, il y a des forums ! :sol:

Pour ton truc, l’idéal, et le plus simple aussi pour toi, serait d’enregistrer à la main chaque mise en forme correspondante (selon l’imprimante), de revoir le code pour l’optimiser (l’enregistreur de macros est vraiment “naze” question écriture de code), tu renomme tes procédures avec des noms clairs (style Sub MiseEnPage_CanonReseau)

Ensuite, dans ta petite Sub, tu testes avec un petit Select Case…

Select Case Aplication.ActivePrinter
Case="HP LaserJetxxxx"
MiseEnPage_HPLaserJet
Case="Canon xxxx"
MiseEnPage_CanonReseau
End Select

etc…

Et si tu veux faire mieux, tu crées une seule procédure de mise en page, et tu passes le nom de l’imprimante en paramètres…

:smiley:

PS : On se chamaillait pas, avec DelTree… :smiley: Je me suis juste un peu moqué, gentiment, car insérer une ligne, bon, pour copier des cellules… :lol: C’était gentil :smiley:

Merci de tous vos renseignements…, car je dois faire autre chose jusqu’à jeudi,

Je reviendrai jeudi …

Merci beaucoup pour votre aide … :slight_smile:

Un copain a trouvé comment faire et m’a montré, alors c’est tout bon …

:clap: