Manipulations formes sur graphes excel avec vba

Soyez le premier à donner votre avis sur cette source.

Vue 6 761 fois - Téléchargée 735 fois

Description

Ce code permet de
1* déplacer une forme (ici un ovale) sur un graphe avec un survol de la souris
2* faire apparaitre cette forme à l'endroit du graphe où on clique avec la souris
3* faire apparaitre un rectangle sur l'élément du graphe (ici une barre) au moment du survol avec la souris, avec une indication sur l'élément survolé
Il est présenté avec les 2 façons de gérer un graphe sous Excel:
- graphe(s) intégré(s) à une feuille de calcul
- utilisation d'une feuille graphique
Limites de ce code:
-fonctionne seulement avec un graphe type histogramme.
Cependant, il est possible de l'adapter facilement à un autre type de graphe
-dans le cas de la feuille graphique, le code fonctionne correctement seulement si on affiche le graphe "Ajusté à la fenêtre". Je verrai si je peux résoudre ce point si nécessaire (en effet, dans une feuille graphique, on ne met qu'un seul graphe et il est bon de l'avoir pleine page)

Source / Exemple :


Voir zip

Conclusion :


Pour établir ce code, j'ai utilisé en grande partie un excellent travail de Stephen Bullen présenté dans l'ouvrage "Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft® Excel and VBA®", livre "Bible" que je conseille fortement aux fans d'Excel VBA (il est à ma connaissance uniquement disponible en langue anglaise)
J'ai largement commenté le code pour qu'il soit facilement compris si quelqu'un veut le modifier
Je précise qu'il m'a été inspiré par une question d'un membre VB France (COYOTE26) que je remercie car il m'a permis d'apprendre des choses intéressantes et assez méconnues en VBA.
Merci de vos commentaires

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

Salut MIMIZANZAN,

*Concernant la protection: si, si on peut "gérer indépendamment" les protections du shape et du grapphique : je l'utilise dans une de mes appli (je t'ai envoyé un MP à ce sujet).

J'avoue que je n'ai pas exploré "à fond" les limites d'action sur les paramètres de la form avec une macro associée, mais a priori, puisque la form est de facto sélectionnée, je ne vois pas pourquoi on ne pourrais pas en modifier les paramètres (couleur, etc.).
Je vais creuser.

*Concernant le problème que je rencontre lors d'un déplacement vertical, il est lié à mon PC (un EeePC Asus) et uniquement en 1024x600.

Cordialement
Messages postés
301
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
17 décembre 2017

Salut CERBERUSPAU,
Merci pour ton commentaire.
-Concernant la protection:
*on peut protéger la feuille graphique, le code fonctionne.
*par contre, pour le graphique intégré à la feuille de calcul Feuil1, on ne peut en aucun cas protéger le graphique car il est lui-même une forme, et que les formes (ovale ou rectangle) ne peuvent plus être manipulées (même sans le code). On peut seulement protéger le contenu de la feuille avec
Feuil1.Protect DrawingObjects:=False
-Affectation macro à la forme: ne gère que l'évènement Clic qui n'informe sur aucun paramètres de la forme.
-Blocage du déplacement vertical: j'ai essayé de fenêtrer et de changer le zoom, et je n'ai pas détecté d'anomalies...Peux-tu donner un exemple précis de quand tu constates un pb?
Cordialement
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

Salut mimizanzan,
C'est juste un point de détail, mais si le code peut tourner sur une feuille protégée(et le graphique aussi), ça peut être intéressant pour un utilisateur de toujours pouvoir déplacer la forme ovale sur un point particulier du graphique (pour attirer l'attention par exemple ou "pointeur" sur une présentation Excel), ce dans une feuille verrouillée, donc sans risquer "d'accrocher" ou "de modifier" tout ou partie du graphique.
Quant à ta réponse, on pourrait aussi passer par l'affectation d'une macro à la forme (Oval1_QuandClic) qui permettrait par exemple de changer de couleur (c'est vrai qu'on ne fera pas la même chose qu'avec MouseDown) ; j'ai aussi remarqué que pour un affichage fenêtré du graphique dans la feuil1 (pas visible en entier), il y a parfois un blocage du déplacement vertical (résolution d'affichage, zoom, ...? je sais pas trop) qui ne se produit pas avec un glisser-déplacer "classique". Mais bon, c'est juste des interrogations et remarques qui me viennent. Je vais creuser un peu. En tout cas merci pour ta source qui regorge de potentialités.
Cordialement.
Messages postés
301
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
17 décembre 2017

Pour CERBERUSPAU,
Salut,
Je ne comprends pas vraiment ce que tu entends par "protection du graphique". En tout cas le code ne fonctionne pas avec une feuille verrouillée, il faut le modifier un peu, mais je ne vois pas l'intérêt...
Par contre, pour le déplacement de l'ovale, on peut bien sûr utiliser la fonction normale de Excel. Mais on n'a pas de lien avec un code, et donc pas d'info sur le déplacement. Admettons par exemple que l'on veuille que l'ovale prenne une teinte rouge quand il survole la première barre de données: on peut obtenir ceci en ajoutant la ligne suivante dans le module de classe CChart, dans la sub mchtChart_MouseMove, à la fin du paragraphe With mchtChart.Shapes("Oval1") avant le End with:

If dXVal > tpX(1) - Lpt / 2 And dXVal < tpX(1) + Lpt / 2 And _
dYVal > tpY(1) Then .Fill.ForeColor.RGB = RGB(255, 0, 0) Else _
.Fill.ForeColor.RGB = RGB(255, 255, 255)

Cà, on ne peut pas l'obtenir autrement...
Cdt
Messages postés
301
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
17 décembre 2017

Pour LAW44
Salut,
Pour Excel 2007, je te signale les 2 ouvrages suivants (seulement dans la langue de Shakespeare à ma connaissance à l'heure actuelle...):
* Excel 2007 Power Programming with VBA de John Walkenbach
(Wiley Publishing, Inc.)
* Excel® 2007 VBA Programmer’s Reference de John Green,Stephen Bullen,Rob Bovey et Michael Alexander, chez Wiley aussi.
A toutes fins utile
Cdt
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.