Microsoft 365 UserForm : est-il possible de ne pas l'afficher - mais uniquement le ComboBox ?

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 !

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir à toutes et à tous,

En voilà une comme je les aime lol
Sans titre.jpg

Je ne parle pas de la croix de l'UserForm.
Mais afficher uniquement le ComboBox
J'ai des recherches mais je n'ai pas trouvé 😡
Peut-être impossible mais ...
Je pose quand même la question car ce serait super bien 🙂
Je joins un ch'ti fichier test,
Avec mes remerciements,
lionel,
 

Pièces jointes

Bonjour Lionel, bof, le forum,

Il est sûr qu'il vaut mieux ne pas avoir d'UserForm et utiliser une ListBox dans la feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal r As Range)
ListBox1.Visible = False
If Not Intersect(ActiveCell, [AD9:AD16]) Is Nothing Then Afficher "AD10:AD12"
If Not Intersect(ActiveCell, [AE9:AE16]) Is Nothing Then Afficher "AE10:AE13"
If Not Intersect(ActiveCell, [AF9:AF16]) Is Nothing Then Afficher "AF10:AF12"
If Not Intersect(ActiveCell, [AG9:AG16]) Is Nothing Then Afficher "AG10:AG12"
End Sub

Private Sub ListBox1_Change()
ActiveCell = ListBox1
[A1].Select
End Sub

Sub Afficher(adresse$)
With ListBox1
    .ListFillRange = adresse
    .Height = Range(adresse).Height 'àdapter éventuellement
    .Top = ActiveCell(2).Top
    .Left = ActiveCell.Left + (ActiveCell.Width - .Width) / 2
    .Visible = True
End With
End Sub
Bonne journée.
 

Pièces jointes

Il n'existe pas de solution simple pour adapter la hauteur d'une ListBox à sa liste.

J'en ai proposé une sur ce fil :

https://www.excel-downloads.com/threads/ajustement-automatique-hauteur-listbox.20016017/

Mais je pense qu'ici il vaut mieux adapter la hauteur au cas par cas avec un 2ème argument :
VB:
Private Sub Worksheet_SelectionChange(ByVal r As Range)
ListBox1.Visible = False
If Not Intersect(ActiveCell, [AD9:AD16]) Is Nothing Then Afficher "AD10:AD12", 44 'hauteur à adapter au besoin
If Not Intersect(ActiveCell, [AE9:AE16]) Is Nothing Then Afficher "AE10:AE13", 58
If Not Intersect(ActiveCell, [AF9:AF16]) Is Nothing Then Afficher "AF10:AF12", 44
If Not Intersect(ActiveCell, [AG9:AG16]) Is Nothing Then Afficher "AG10:AG12", 44
End Sub

Private Sub ListBox1_Change()
ActiveCell = ListBox1
[A1].Select
End Sub

Sub Afficher(adresse$, h#)
With ListBox1
    .ListFillRange = adresse
    .IntegralHeight = False
    .Height = h
    .Top = ActiveCell(2).Top
    .Left = ActiveCell.Left + (ActiveCell.Width - .Width) / 2
    .Visible = True
End With
End Sub
 

Pièces jointes

Dernière édition:
Mon modèle contenait une formule qui permet de régler la hauteur du combo en fonction du nombre d'éléments.
Dans le modèle la formule n'a pas été modifié donc c'est un peu trop long mais en changeant avec cette formule :
VB:
ActiveSheet.Shapes("ListBox1").Height = (18 - 1 / 4 * k) * k
on obtient une dimension optimale.
Après le problème est que cette formule est sensible à des tas de paramètres dont à minima la police et la taille de la police.
Dans le cas de ma démo la formule ci-dessus semble correcte avec du Calibri 12 (sous W10 + Exc 2016)
C'est d'autant plus important que dans le cas de cette démo le combo se décrémente ou s'incrémente à chaque ouverture.
Si vous basculez en Arial 14 ça va pas le faire, il faudra tatonner ! (la plupart du temps j'obtiens un réglage suffisant simplement en changeant le premier nombre...)
A+
 
- 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

Réponses
23
Affichages
2 K
Retour