Doucle action à l'intérieur d'un ComboBox

  • Initiateur de la discussion Initiateur de la discussion Michou9
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Michou9

XLDnaute Occasionnel
Bonjour

J’ai réalisé un ComboBox pour lancer un nombre assez important de macros
Le nom de la macro ne permet pas toujours facilement de se rappeler la portée de la macro

J’ai pensé associer une information à chaque macro
Pour cela il faudrait une double action pour chaque macro contenue dans ce ComboBox.

Exemple :
Je clique sur Macro1 : Une TexBox ou Infobul s’afficherait
Je double clique sur Macro1 : Je lance la macro

Dans le fichier exemple joint :
Je clique sur Macro1 : L’information « Jaune » s’affiche
Je double-clique sur Macro1 : Je mets la zone en jaune

C'est certainement réalisable dans un UserForm

Mais est-ce réalisable directement dans une feuille ?

Merci
 

Pièces jointes

Re : Doucle action à l'intérieur d'un ComboBox

Bonjour Job75

Merci pour les explications,
J’avais fini par trouver hier soir pour le 2
J’aurais du regarder dans l’aide, c’est vrai 🙄

Dans ton 2ème développement, j’en croix pas mes yeux, si je comprends bien ? Je vois qu’en 7 lignes, je devrais être en mesure de gérer autant de macros que je veux, sans rien écrire
J’ai parlé trop tôt !

Dans votre post 6, vous vous servez sans doute de ce que les noms de macros sont semblables sauf pour le chiffre placé à la fin ?
Car si je change le nom d’une macro, cela plante juste après l’activation de la macro

Ex si je remplace « Macro3 » par « Couleur »
La macro fonctionne bien, mais cela plante juste après
Message « Erreur d’exécution 1004 »

Votre post 8, m’intéresse fortement
Mais j’ai un problème très bizzard
Dès que j’active les macros, la ListBox devient minuscule 😕

Ci-joint 2 vue d'écran

A+
 

Pièces jointes

  • Image avant.jpg
    Image avant.jpg
    99 KB · Affichages: 47
  • Image après.jpg
    Image après.jpg
    84.9 KB · Affichages: 41
  • Image après.jpg
    Image après.jpg
    84.9 KB · Affichages: 41
  • Combobox(3)2.xlsm
    Combobox(3)2.xlsm
    21.7 KB · Affichages: 46
  • Image après.jpg
    Image après.jpg
    84.9 KB · Affichages: 41
Re : Doucle action à l'intérieur d'un ComboBox

Bonjour Job75, 🙂

Par ailleurs pas compris à quoi sert vraiment TextBox2.
Je l'ai affichée en exécutant TextBox2.Select puis supprimée. Cela ne change rien .

En fait, sur ma bécane (Win7, excel 2010), je me suis apperçu que j'ai deux systèmes de coordonnées renvoyées par MouseMove en ce qui concerne la combobox. Un système qui correspond à la forme de la comboxbox repliée et un autre qui correspond à la zone de la liste dépliée de la combobox (en fait il y a pour le renvoi des coordonnées de la souris deux objets différents)

La première a un Y qui va de 0 à 17 et de 0 à 66. Je n'ai pas trouvé de moyen pour savoir sur quelle forme je suis quand Y est compris entre 0 et 17. Or si j'affiche Texbox1 lorsque je suis sur la combox repliée, j'affiche un message erroné qui correspond à l'un des deux premiers éléments de la liste. Pour éviter cela, j'ai superposé un Textbox2 de fond transparent. L'événement MouseMove se produit alors sur TextBox2 et je n'affiche rien.

Ceci fait, si TextBox2 recouvre toute la ComboBox, je n'ai plus accès à son bouton pour la déplier. TextBox2 s'arrête donc (en largeur) juste avant le bouton de la combobox. Mais alors, je réaffiche le commentaire quand la souris passe sur le bouton, ce que je ne veux pas. Pour éviter cela ==>

Mais l'affichage de TextBox1 est souvent aléatoire.
==> je limite l'apparition du commentaire à la largeur de la combobox moins une bande à droite correspondant grosso modo à la largeur de son bouton. Dans le code cela se traduit par si X>50 je n'affiche rien!
Donc (chez moi) le commentaire ne s'affiche que si la souris se meut (en gros) sur le texte de la liste dépliée. Dès qu'on part à gauche (X>50), je n'affiche plus rien.

C'est laborieux je sais!

Dans le fichier joint, j'ai retiré la Textbox2, affiché X et Y (pour voir les deux systèmes de coordonnées par le passage de Ypar 0 quand on passe de la zone supérieure de la combobox à sa liste dépliée. J'ai aussi remplacé le X>50 par x>1000 pour voir l'affichage de TextBox1 quand on passe la souris sur le bouton de la ComboBox. Quand on repasse sur TextBox2, TextBox1 disparaît.

Tout ceci sur mon matériel, peut-être que pour une autre configuration ce sera différent.

Je savais que l'emploi de MouseMove ne serait pas top mais les occasions de l'utiliser sont rares, je n'allais pas la rater!

Et je te remercie de t'y être intéressé quelque peu.
 

Pièces jointes

Re : Doucle action à l'intérieur d'un ComboBox

Re,

@ ma pomme : merci mais je dois m'absenter, je regarderai ça ce soir.

@ Michou9 :

Il faut évidemment que la macro "couleur" existe dans Module1... Renommez la Macro2.

Quant à l'aspect de la ListBox, pas trop d'idées, ça ne se produit pas chez moi.

Voyez du côté de ses propriétés (j'ai mis la propriété "Locked" à False, pour que l'ascenseur fonctionne).

A+
 
Re : Doucle action à l'intérieur d'un ComboBox

Bonjour

Il faut évidemment que la macro "couleur" existe dans Module1... Renommez la Macro2.
Effectivement cela parait évident 🙄


Voyez du côté de ses propriétés (j'ai mis la propriété "Locked" à False, pour que l'ascenseur fonctionne).
Non cela ne vient pas de cela, l’ascenseur fonctionne dans les 2 cas

Je suis parvenu à maitriser le problème en redimensionnant la ListBox ainsi que les polices.

Mais j’ai eu beaucoup de mal, car suivant la dimension, cela se joue au millimètre près. Un poil trop petit ou trop grand, je ne peux accéder à la 1ère ou à la dernière macro dans la ListBox

Je ne comprends pas bien pourquoi ??


Serait-il possible d’avoir la même chose, mais avec une ComboBox ?


Cordialement
 

Pièces jointes

Re : Doucle action à l'intérieur d'un ComboBox

Bonsoir

L’avantage avec un ComboBox c’est que la liste n’apparait que lorsqu’on en a besoin.

Mais c’est aussi vrai que ce n’est pas trop pratique,
Lors d’une recherche, car le ComboBox se referme lorsqu’on veut visualiser une information

L’idéal serait que le ComboBox se referme que lorsqu’on double-clique sur une macro et que l’on a donc pas besoin de visualiser une information …
 
Re : Doucle action à l'intérieur d'un ComboBox

Bonjour Michou9, le forum,

L’avantage avec un ComboBox c’est que la liste n’apparait que lorsqu’on en a besoin.

Avec une ListBox on peut faire pareil avec une macro Worksheet_SelectionChange :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With ListBox1
    .Visible = Target.Address = "$F$2"
    If .Visible Then .Activate
    .ListIndex = -1 'désélectionne
  End With
  Label1.Visible = False
End Sub

Private Sub ListBox1_Click()
  With Label1
    .Caption = [Essai].Cells(Application.Match(ListBox1, [Essai], 0), 2)
    .Width = 150 'à adapter
    .Visible = True
  End With
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  Application.Run (ListBox1) 'exécute la macro
  [F2].Select 'facultatif...
End Sub
Fichier (2).

A+
 

Pièces jointes

Re : Doucle action à l'intérieur d'un ComboBox

Re,

La ListBox avec une macro MouseMove chère à mapomme :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With ListBox1
    .Visible = Target.Address = "$F$2"
    If .Visible Then .Activate
  End With
  Label1.Visible = False
End Sub

Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Dim H As Single, I As Integer
  H = 1.25 * ListBox1.Font.Size
  I = Int(Y / H)
  ListBox1.ListIndex = I
  With Label1
    .Caption = [Essai].Cells(I + 1, 2)
    .Width = 150 'à adapter
    .Top = ListBox1.Top + H * I
    .Visible = True
  End With
  Exit Sub
End Sub

Private Sub Label1_Click()
  Application.Run (ListBox1) 'exécute la macro
  [F2].Select 'facultatif...
End Sub
Fichier (3).

Edit : la ListBox ne doit pas avoir d'ascenseur...

A+
 

Pièces jointes

Dernière édition:
Re : Doucle action à l'intérieur d'un ComboBox

Bonsoir Job75

La macro (post #22) est pratiquement parfaite
Vu que la liste n’apparait que lorsqu’on clique dessus, cela me convient parfaitement.
Subsiste juste le problème du paramétrage de la liste
Telle qu’elle, je ne sais pas si c’est pareil pour vous ?
Je ne peux pas accéder à la macro 5

La solution avec MouseMove est également très intéressante
Mais chez moi, le pointeur se transforme en « Sablier » et ce sablier a une tremblote pas possible 😡

Un autre problème apparait également, si on augmente considérablement le nombre de macros dans la ListBox, de ce fait on est obligé d’utiliser l’ascenseur pour visualiser les macros du bas et le pointeur se retrouve dès lors désynchronisé 🙁

Une autre solution idéale, qui du coup réunirait tous les avantages et supprimerait tous les inconvénients concernant la taille et le dimensionnement de la ListBox, quelque soient le nombre de macro à l’intérieur
Cela serait de pouvoir utiliser la molette de la souris à l’intérieur de la ListBox. 🙄

A+
 

Pièces jointes

Re : Doucle action à l'intérieur d'un ComboBox

Bonsoir Michou9, le forum,

Une autre solution idéale (...) serait de pouvoir utiliser la molette de la souris à l’intérieur de la ListBox. 🙄

Oui, je sais le faire dans un UserForm, et c'est bien compliqué...

Dans une feuille de calcul je ne sais pas, ce n'est peut-être pas possible.

Une autre solution encore : faire un contrôle de touches.

Voir ce fichier (5) avec le contrôle de la touche Entrée.

A+
 

Pièces jointes

Re : Doucle action à l'intérieur d'un ComboBox

Bonsoir

Impressionnant ! 😛

Je ne savais pas que l’on pouvait gérer les touches du clavier
En VBA
Je vais garder ce bout de code précieusement de côté

Problème :
La touche M équivaut à Entrée
Elle ne masque pas la ListBox ??

Je suis en train de transcrire la version du Post 22 dans mon tableau original
Et j’ai un bug au niveau de
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With ListBox1
    .Visible = Target.Address = "$M$3"
    If .Visible Then .Activate
    .ListIndex = -1 'désélectionne
  End With
  Label1.Visible = False
End Sub

Sur la ligne Label1.Visible = False



Je n’arrive pas à en trouver la cause

A+
 
Re : Doucle action à l'intérieur d'un ComboBox

Bonjour Michou9, le forum,

Tous les fichiers que j'ai déposés et leurs macros ont bien sûr été testés et fonctionnent chez moi (Excel 2010).

Il est plus que temps de nous dire clairement :

- si ces fichiers, non modifiés, fonctionnent chez vous

- quelle version Excel vous avez

- quel fichier vous désirez finalement utiliser et adapter.

Et si vous n'y arrivez pas, déposez ici votre fichier pour éviter de tourner en rond.

A+
 
Re : Doucle action à l'intérieur d'un ComboBox

Bonjour

Je vais répondre le plus exactement possibles à vos 3 questions

Il est plus que temps de nous dire clairement :

- si ces fichiers, non modifiés, fonctionnent chez vous

Le fichier non modifié fonctionne bien chez moi
(Sauf comme je l'ai dit précédemment, je ne peux accéder tel quel à la "Macro 5")

- quelle version Excel vous avez

Comme précisé dans mon post, j'utilise Excel 2007


- quel fichier vous désirez finalement utiliser et adapter.

Je l'avais précisé dans mon dernier post :
Je suis en train de transcrire la version du Post 22


Pour résumer
Je suis bien sous Excel 2007
J'ai retenu le fichier du post 22 qui fonctionne bien chez moi (sauf en ce qui concerne la macro 5 à laquelle je ne peux accéder)
Cela est sans importance, car si je mets la ListBox sur 3 niveaux au lieu de 4, je peux accéder aux 5 macros.

Le problème apparait quand je retranscris la macro

Pour être le plus clair possible
J'ai retranscris la macro de votre fichier en question sur la feuille 2
J'ai modifié le nom de la zone en "Essai2" et apporté les modifications dans la ListBox ainsi créée
Vous pourrez ainsi constater dans cette feuille 2
que cela plante au niveau de "Label1.Visible = False"

L'erreur vient forcément de ma part, quand je duplique cette macro
Mais je ne vois pas où ??

Merci
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

L
Réponses
10
Affichages
2 K
B
Réponses
4
Affichages
2 K
N
Réponses
0
Affichages
2 K
nicolasraque
N
M
  • Question Question
Réponses
4
Affichages
2 K
Retour