Bouton poussoir personnalisé

Bonjour à tous, et meilleurs vœux pour cette nouvelle année de codage.

Je me galère sur un bouton poussoir personnalisé, j'ai étudié un peu le super tuto de Tristan, j'arrive à reproduire ces boutons, mais cherche a faire quelques chose qui n'y est pas décrit.

En gros j'aimerai faire exactement ce que fait un bouton Active_X mais sur un bouton perso, c'est a dire qui s'enfonce et surtout ne déclenche pas la macro tant que nous n'avons pas relâché la souris dessus, car les quelques personnes qui utilisent mon fichier galèrent trop avec les clics qui déhanchent immédiatement la macro.

Pourquoi me compliquer la vie me direz-vous, j'ai une 30aines de boutons donc je voudrais pouvoir faire varier formes, couleurs et placement en passant par le SmartArt afin de rendre le fichier plus facile à utiliser pour les autres qui s'y perdent un peu actuellement.

Après pas mal de recherches pour connaitre les noms des biseaux en VBA, j'ai essayé de partir d'un bouton arrondi (Origine sur mon Excel) de changer le format 3D du biseau supérieur en "incrustation relâchée" pour qu'il ressemble à "État pressé" sur mon fichier Excel. Mais pour l'instant j'échoue lamentablement.

Si quelqu'un s'y connait un peu et saurait m'aider sur le sujet, j'ai tenté pas mal de choses, sans succès. Le mieux que j'ai eu et de réussir à changer le format 3D mais sans revenir au format de base ensuite, j'aurai du sauvegarder à ce moment là car depuis avec la fatigue je n'arrive plus à le refaire...

8test-bouton.xlsm (24.70 Ko)

Bonsoir,

le soucis c'est qu'une forme ne possède pas l'événement mouse move ainsi que la détection du clic...
Sinon voici un code qui permet de passer d'un bouton Haut (BtnH + numéro) à un bouton Bas (BtnB+numéro) :

Sub LouReeD()
    Dim Btn
    Btn = Application.Caller
    ' si bouton non appuyé
    If Left(Btn, 4) = "BtnH" Then
        ' alors on montre le bouton appuyé et on cache le bouton non appuyé et on ne fait rien
        ActiveSheet.Shapes(Btn).Visible = False
        ActiveSheet.Shapes("BtnB" & Mid(Btn, 5, 99)).Visible = True
    ' bouton appuyé
    Else
        ' alors on montre le bouton non appuyé, on cache le bouton appuyé, et on lance la macro
        ActiveSheet.Shapes(Btn).Visible = False
        ActiveSheet.Shapes("BtnH" & Mid(Btn, 5, 99)).Visible = True
        Call macrotest
    End If
End Sub

Sub macrotest()

End Sub

Mais du coup il faut un deuxième clic...

@ bientôt

LouReeD

Voyez ce fichier (il ne restera pas longtemps ici, faites moi signe ):

12chamhotel-v2-05.zip (729.10 Ko)

un projet laissé à l'abandon... Mais le principe est là : une image avec la représentation des bouton, un label ActiveX par dessus et transparent.

Lors du clic souris dessus et seulement "au relâché", le code est lancé. Bon ici il y a un calcul de coordonnées pour savoir sur quel bouton on a cliqué et l'image des boutons n'est pas modifiée.

dans votre cas il faudrait un shape bouton haut, puis un shape bouton bas, puis un label ActiveX par dessus.
lors du clic souris sur le bouton de souris, alors code VBA qui cache le shape bouton haut et montre le shape bouton bas et "c'est tout".
lors du lâché du bouton de souris sur le label active X, on masque le shape bouton bas, on montre le shape bouton haut et on lance le code VBA voulu.

Le label ActiveX pourrait être plus petit que les deux autres.

A voir, mais si de vôtre côté vous arrivez à détecter l'action bouton souris sur un shape alors faites le moi savoir car j'évite au maximum d'utiliser des ActiveX !

@ bientôt

LouReeD

Bonjour Heelflip, LouReeD,

Même s'il est possible par API windows (mais macros plus importante à gérer) de simuler des actions souris.Utilisé notamment dans PENTO.

Il me semble plus aisé, vu que l'utilisateur relâchera de toute manière le bouton, de passer par un autre procédé.

Ci-dessous réalisé pour le bouton bleu, mais adaptable à une série de boutons s'ils sont numérotés.

Et en prime à droite, le bouton HOUSTON pour les étourdis et/ou les gaffeurs.

Rechercher des sujets similaires à "bouton poussoir personnalise"