ZOOM POUR GRAPHES EXCEL

G4industri Messages postés 6 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 14 mai 2007 - 14 mai 2007 à 09:15
cs_fbobo Messages postés 1 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 14 mai 2007 - 14 mai 2007 à 20:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42670-zoom-pour-graphes-excel

cs_fbobo Messages postés 1 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 14 mai 2007
14 mai 2007 à 20:48
Une bonne idée, qui me trottait dans la tête depuis longtemps...
Cependant réalisation (fonctionnelle) trop complexe (que je n'ai pas réussi à utiliser d'ailleurs, mais sans grands efforts !).

A mon avis, s'inspirant du look and feel d'autres applis graphiques, il faudrait utiliser un évènement "Chart_MouseDown" associé automatiquement aux graphiques présents (tous et quelque soit leur emplacement feuille graphique ou incorporé.
Cet évènement initiant le tracé du rectangle de zoom (bouton maintenu), qui serait abandonné si on relâche (Chart_MouseUp) le bouton SANS s'être déplacé, pour permettre les actions "normales" de clic d'Excel.
Au relâchement du bouton (Chart_MouseUp) après déplacement (donc tracé d'un rectangle), le zoom s'afficherait dans ce rectangle, avec un facteur par défaut (x4 p.ex.).
Un clic DROIT dans le rectangle de zoom ferait apparaitre un menu contextuel avec des commandes "changer le facteur de zoom", "annuler zoom", "avec/sans axes dans zoom", "zoom translucide" etc....
Les commandes normales de drag and drop du rectangle (forme) permettraient de se déplacer sur le graphique, avec prise en compte des déplacements à l'extérieur (soit on n'affiche que ce qui est affichable, soit la dimension du rectangle s'ajuste à ce qui est traçable).
G4industri Messages postés 6 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 14 mai 2007
14 mai 2007 à 09:15
L'idée est originale. Mais la mise en oeuvre un peu trop lourde a mon goût.
Il y a une manière plus "élégante" de le faire.

Tout d'abord vérifier que la personne a bien un graph sur l'écran.
Et ensuite modifier directement l'échelle de ce graphe sans passer par ton cadre.

Tu verras dans mes bouts de codes qu'il y a des répétitions qui méritent la création de fonctions. Le but pourrait être de proposer un menu du type GoogleEarth [Monter/descendre/Droite/Gauche // Zoom+ // Zoom+ // RESET]

Je te met un 5 pour l'originalité mais pas plus a cause de la complexité de ta solution.

Voici mes exemples:

Function TestPresenceGraph() As Boolean
'On test la présence d'un objet dans ActiveGraph
TestPresenceGraph = False
If ActiveChart Is Nothing Then
MsgBox "Rien de sélectionné"
Else
TestPresenceGraph = True
End If
End Function


Sub ZoomBy2_ActivGraph()
'
' Macro enregistrée le 14/05/2007 par G4industri
'

Dim ValMin As Long
Dim ValMax As Long
Dim ValRange As Long

'Pour un programme entier il faudrait memoriser les valeurs Xmin, Xmax, Ymin, Ymax
'pour y revenir suite a une demande de RESET

' On controle qu'il y ait un graph a zoomer
If Not TestPresenceGraph Then Exit Sub
'

'On travail sur les ordonnees
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
'on recupere les infos pour determiner l'amplitude
ValMin = .MinimumScale
ValMax = .MaximumScale
ValRange = ValMax - ValMin

'on modifie les valeurs de l'echelle
.MinimumScale = ValMin + ValRange / 4
.MaximumScale = ValMax - ValRange / 4
End With

'Puis sur les abscisses
ActiveChart.Axes(xlCategory).Select
With ActiveChart.Axes(xlCategory)
'on recupere les infos pour determiner l'amplitude
ValMin = .MinimumScale
ValMax = .MaximumScale
ValRange = ValMax - ValMin

'on modifie les valeurs de l'echelle
.MinimumScale = ValMin + ValRange / 4
.MaximumScale = ValMax - ValRange / 4
End With
End Sub

Sub UnZoomBy2_ActivGraph()


Dim ValMin As Long
Dim ValMax As Long
Dim ValRange As Long

' On controle qu'il y ait un graph a zoomer
If Not TestPresenceGraph Then Exit Sub
'

'On travail sur les ordonnees
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
'on recupere les infos pour determiner l'amplitude
ValMin = .MinimumScale
ValMax = .MaximumScale
ValRange = ValMax - ValMin

'on modifie les valeurs de l'echelle
.MinimumScale = ValMin - ValRange / 4
.MaximumScale = ValMax + ValRange / 4
End With

'Puis sur les abscisses
ActiveChart.Axes(xlCategory).Select
With ActiveChart.Axes(xlCategory)
'on recupere les infos pour determiner l'amplitude
ValMin = .MinimumScale
ValMax = .MaximumScale
ValRange = ValMax - ValMin

'on modifie les valeurs de l'echelle
.MinimumScale = ValMin - ValRange / 4
.MaximumScale = ValMax + ValRange / 4
End With
End Sub


'Autres fonctionalités : le déplacement
Sub AllerVersDroite_ActivGraph()

Dim ValMin As Long
Dim ValMax As Long
Dim ValRange As Long

' On controle qu'il y ait un graph a zoomer
If Not TestPresenceGraph Then Exit Sub
'

'On ne touche pas les ordonnees
'ActiveChart.Axes(xlValue).Select

'Mais bien les abscisses
ActiveChart.Axes(xlCategory).Select
With ActiveChart.Axes(xlCategory)
'on recupere les infos pour determiner l'amplitude
ValMin = .MinimumScale
ValMax = .MaximumScale
ValRange = ValMax - ValMin

'on modifie les valeurs de l'echelle
.MinimumScale = ValMin + ValRange / 10
.MaximumScale = ValMax + ValRange / 10
End With
End Sub
Rejoignez-nous