Office 365 VBA Equivalent d'ActiveControl pour un Label

F22Raptor

XLDnaute Occasionnel
Hello,
Si je crée un objet CommandButton, avec un événement CLICK associé. Dans cet évènement, si je fais un MsgBox ActiveControl.Name j'aurai bien le nom de mon bouton.

Mais si c'est un Label, et que je lui associe un événement CLICK également, le ActiveControl ne fonctionne pas (un Label n'étant pas sélectionnable en tant que tel).
Du coup, puis-je récupérer au sein de l'événement le nom du Label ?

Merci !
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne vous suis pas. Si vous avez pu lui faire exécuter une procédure associée à son évènement Click vous savez forcément de quel Label il s'agit, puisque c'est celui dont le nom est mentionné avant "_" dans le nom de la procédure, non ? Quelle curieuse idée de prendre ActiveControl.Name même quand c'est un CommandButton !
 

F22Raptor

XLDnaute Occasionnel
Je suis obligé de me dévoiler ! ;)

Je vais avoir 36 Labels qui auront comme nom Label1 à Label36.
Chacun aura son évènement Click.
Et dans l'évènement click, je veux récupérer la référence du Label, la multiplier par 10, ce qui me donnera un angle/cap sur une rose des vents.

Et dans l'idéal, chacun de mes 36 événements aurait un code du genre

Sub Label1_Click()

CodeDesLabels

End Sub


avec

Sub CodeDesLabels()

'récup de la référence de label dans une variable

CapChoisi = RefLabel * 10

'traitements divers avec le CapChoisi

End Sub


Donc le même code s'applique pour chacun des 36 événements. Pas d'adaptation dans chacun des événements.
 

Dranreb

XLDnaute Barbatruc
Ben alors c'est hyper simple: dans chaque Sub LabelX_Click spécifiez derrière CodeDesLabel une valeur spécifique au Label, votre procédure étant équipée d'un argument pour la recueillir : Sub CodeDesLabel(ByVal V As Double)

Mais pour 36 Label, je me demande si ça ne vaudrait pas le coup de faire autre chose. Je pensais d'abord à un module de classe mais… l'utilisateur ne cliquerait-il pas déjà sur une image de rose des vents ?

En attendant, si c'est pour un cap, je suis étonné que votre nombre de Label ne soit pas multiple de 8.
 
Dernière édition:

F22Raptor

XLDnaute Occasionnel
J'ai mis mon fichier en exemple : on clique sur le bouton pour lancer le UF.
On a une rose des caps : Chaque petit carré représente 10°, de 10 en 10, jusqu'au cap 360° tout en haut.
Je n'ai mis de code événement Click que pour les labels 1 à 4 pour l'instant.

Donc, pour spécifier un cap, on clique sur un petit carré, et le cap s'affiche au milieu (et le carré en rouge).
On peut aussi renseigner un cap dans la boîte centrale, et le carré concerné s'affiche.
J'ai juste un souci pour l'instant : je voudrais afficher le format avec le ° des degrés.
C'est OK par le clic sur les petits labels carrés, mais ça ne marche pas en sélection manuelle.

Pour revenir sur la simplification des macros de Labels, effectivement, je peux mettre un paramètre que j'envoie à CodeDesLabels, mais si ça avait été possible de standardiser au point de ne même plus avoir cette différence, ça aurait été encore mieux !
En fait ce serait possible avec des CommandButtons plutôt que des labels (dans ce cas, j'utiliserais ActiveControl), mais le changement de couleur sur un CommandButton se voit moins (l'aspect 3D casse la lisibilité : je passe les Labels en fmSpecialEffectFlat, mais ce n'est pas possible sur un bouton)

PS : pourquoi un multiple de 8 sur des caps ? J'aurais dans ce cas 45 carrés, et ce n'est pas divisible par 4 ou 2, je n'aurais donc pas le carré du "180°" plein sud ?
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Ça confirme ce que je pensais. Je vais vous dessiner une rose des vents, si c'est bien l'image en rapport avec le vrai sujet, et on va détecter la position dans l'image où on enfoncera (ou relâchera) le bouton de la souris, ce sera bien plus simple !
 

F22Raptor

XLDnaute Occasionnel
L'objectif est effectivement de choisir la direction d'où vient le vent.
Idéalement, ça aurait été en faisant coulisser une flèche autour d'un cercle ... Mais VBA est un peu limité pour ça je pense
 

Dranreb

XLDnaute Barbatruc
Regardes cette ressource. J'y fais définir plein de choses dans des images. L'image dans laquelle on pourrait choisir votre direction s'apparenterait plus à celle permettant de choisir A (l'angle de teinte), mais le système de récupération de l'information serait bien plus proche de ce qui est employé pour F (la force).
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Elle vous plairait ma rose des vents ?
1033120
Remarquez, je pourrais y apporter des changements …
 

Dranreb

XLDnaute Barbatruc
Sérieux, je peux changer à volonté la couleur de fond de l'image et celle des 'pétales' ainsi que la largeur de ces dernières.
.1033127
Dites moi ce qui vous arrangerait, et si vous souhaiteriez un coup de main sur la programmation.
 

F22Raptor

XLDnaute Occasionnel
Sérieux, je peux changer à volonté la couleur de fond de l'image et celle des 'pétales' ainsi que la largeur de ces dernières.
.Voir la pièce jointe 1033127
Dites moi ce qui vous arrangerait, et si vous souhaiteriez un coup de main sur la programmation.
Je ne voudrais pas être lourdingue en réclamant des choses ;)

Mais voici une idée (peut-être irréalisable) que j'aurais en tête :

Une rose des caps de ce style, avec des cercles concentriques.
Quand on balade la souris sur le dessin, s'afficherait un point, et dans deux boîtes, le cap, et la force du vent (qui changeraient en temps réel avec le déplacement de la souris) :
le cap, c'est bien entendu l'angle de 0 à 360°, et la force du vent, serait la distance au centre (dans mon exemple, un maximum de 55 kt)

Ici mon curseur violet indiquerait un vent du 218° pour 15 kt.
Quand on est OK avec la position (et donc les valeurs affichées dans les boîtes dynamiques), on clique pour figer !
Un reclic libérerait à nouveau le curseur pour modifier la position.

rose_caps.PNG
 

Dranreb

XLDnaute Barbatruc
Oui, c'est tout à fait possible. Il faudrait juste arrondir un tout petit peu les valeurs calculées à partir du X et Y des procédures MouseMove et MouseUp. Pourquoi les valeurs sont-elles en ordre décroissant à partir du centre ?

Je trouve que le cap est plus difficile à visualiser avec des branches de longueurs différentes.
10331471033148
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Voilà ce qu'il est possible de faire.

Édition: Remarque: je viens de voir sur internet que la direction angulaire du vent est généralement donnée par rapport au nord, et en tournant dans le sens horaire, et non selon la règle trigonométrique. Je vais corriger ça.
 

Fichiers joints

Dernière édition:

F22Raptor

XLDnaute Occasionnel
Voilà ce qu'il est possible de faire.

Édition: Remarque: je viens de voir sur internet que la direction angulaire du vent est généralement donnée par rapport au nord, et en tournant dans le sens horaire, et non selon la règle trigonométrique. Je vais corriger ça.
Woof ! C'est carrément impressionnant !
Le plus impressionnant étant le code qu'il y a derrière : hyper court ! Mais comment fait-il ?! :eek:
Je m'attendais à voir des modules de classes et plein de choses que j'ignore !!!

Merci pour ce travail remarquable qui montre à quel point VBA est + puissant que je ne le pensais !


Pour les caps, voici une rose avec les degrés.
Si un vent souffle du sud-ouest, c'est un vent qui vient du 240° par exemple

 
Dernière édition:

F22Raptor

XLDnaute Occasionnel
Oui, c'est tout à fait possible. Il faudrait juste arrondir un tout petit peu les valeurs calculées à partir du X et Y des procédures MouseMove et MouseUp. Pourquoi les valeurs sont-elles en ordre décroissant à partir du centre ?

Je trouve que le cap est plus difficile à visualiser avec des branches de longueurs différentes.
Voir la pièce jointe 1033147Voir la pièce jointe 1033148
Oui, en effet tu n'as pas tort : avec des branches qui vont jusqu'au bout, on y lit mieux les caps.

Pour la force du vent, elle part de 0 à l'extérieur, car les vents à pointer dans mon cas sont généralement compris entre 5 et 25 (noeuds en fait, pas km/h, c'est à dire 1.852 km par heure). Et comme il est plus facile d'ajuster précisément le cap au plus loin du centre, il fallait mettre les zones 5 à 25 plutôt à l'extérieur.
 

Dranreb

XLDnaute Barbatruc
La réflexion m'avait conduit à une explication différente: Ç'aurait été pour que la longueur du vecteur croisse avec la force, sachant qu'on indique la direction d'où il vient …
C'est déjà corrigé, ainsi que l'origine et le sens de croissance des angles. Je vais peaufiner la prochaine version avec de petits ronds qui fixent le cap et la force. Par contre j'ai pour l'instant une échelle de 0 à 12 en Beaufort.
 

F22Raptor

XLDnaute Occasionnel
Et pour compléter sur les caps, on les mesure en dégrés, sans les minutes d'angle, trop précises pour quelque chose d'aussi approximatif que la direction du vent.
 

Discussions similaires


Haut Bas