Ici je propose par l'intermédiaire d'un exemple, une solution alternative aux evenements dans les graphiques. Cette Solution est destinée en particulié au debutant que les modules de classe et autre API peuvent rebuter.
Ce fichier Excel permet de recuperer et d'exporter vers une nouvelle feuille, les données de n'importe quelle courbe de n'importe quel gaphique contenu dans une feuille excel.
Le probleme que j'ai rencontré etait de lancer une macro tout en gardant le focus sur l'objet graphique préalablement sélectionné. En effet tout les evenements d'un control (par exemple un bouton) dans une feuille excel font perdre le focus à l'objet. Mais il y a une exception qui est l'évènement Mousse_Move.
L'autre probleme est qu'avec l'évènement Mousse_Move, tant que vous déplacez votre souris sur le bouton la macro se lance. Si une courbe a ete sélectionnée pas de probleme une MsgBox en fin d'execution limitera l'execution à une fois.
Mais il restait 2 problemes à résoudre qui sont : ne pas lancer la macro si ce n'est pas une courbe qui a le focus et ne pas lancer la macro par inadvertance lors d'un passage involontaire sur le bouton.
Comment cela fonctionne ?
Et bien il suffit de selectionner une courbe puis de cliquer sur le bouton [Ddonnées Courbe]
Pour le reste voir le code.
Source / Exemple :
Option Explicit
Dim Passage As Boolean, Clique As Boolean
Private Sub CommandButton1_Click()
Application.EnableEvents = False
DoEvents
On Error Resume Next
Sheets.Item(1).Shapes("InfoBulle1").Visible = False
DoEvents
If Not GraphName = "" Then
LetsGo
Else
MsgBox "Aucune courbe n'est selectionée ", vbExclamation
Application.EnableEvents = True
End If
End Sub
Private Sub CommandButton1_MouseMove(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
On Error Resume Next
ActiveSheet.Shapes("InfoBulle1").Visible = True 'on allume l'info bulle
If Passage = False Then 'ici on veut limite le lancement de la macro _
QuelleCourbe a 1 fois par passage sur le bouton
Passage = True 'la limitation ce fait ici
QuelleCourbe
End If
End Sub
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single) 'ce Label sert a detecter le curseur de souris apres _
son passage sur le bouton CommandButton1. Ceci pour autoriser a nouveau le lancement de la macro QuelleCourbe
ActiveSheet.Shapes("InfoBulle1").Visible = False 'on eteint l'info bulle
GraphName = ""
Passage = False 'on est sortie du bouton donc on autorise a nouveau le _
lancement de la macro QuelleCourbe
End Sub
Conclusion :
En fait ce code est une mise a jour d'un code que j'ai posté en réponse a une question posée sur le forum.
Merci de votre visite
3ddI7IHd
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.