Microsoft 365 ComboBox ne pas sortir si clic hors sélection dans la list

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir à toutes et à tous :)

Quand on "lance " un UserForm" le choix modal ou non modal est possible :
Mon_UserForm.Show
modal :
Par défaut, un UserForm est "modal" ce qui implique que vous ne pouvez pas travailler sur une feuille tant que l'UserForm est ouvert.
Mon_UserForm.Show 0
non modal :
En mode "non modal", vous pouvez travailler sur une feuille tout en ayant un UserForm ouvert. Pour cela, ajoutez un "0" à l'ouverture.

Voici ma question
Dans mon fichier, j'ai un ComboBox mais sans UserForm :
Quand il est ouvert, est-il possible de bloquer la feuille comme pour "Mon_UserForm.Show" = modal ?

Jusqu'à maintenant, je n'ai pas trouvé.
Auriez-vous une solution ?
Merci à tous,
lionel :)
 
Solution
Bonjour Lionel, le forum,

Ton problème c'est que tu bricoles les codes qu'on te donne et après ils ne tiennent plus la route.

Ton test avec la cellule P1 est bien maladroit alors qu'il suffit de tester "MaCell".

Les macros Worksheet_Activate en Feuil1 et Feuil2 sont totalement inutiles puisque la macro "Affiche" renvoie toujours sur la feuille "Gérard".

Et la macro "désactive_alphabet' est vraiment sans intérêt puisqu'on peut entrer des chiffres ou d'autres caractères, il vaut mieux protéger la feuille, je l'ai fait avec le mot de passe toto.

Utilise donc ce fichier (6).

A+

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Gérard, tous les participants, le Forum :)
@Gérard, Voudrais-tu encore m'aider ?

Comme tu l'avais dit, il y a des soucis avec Application.Interactive qui bloque au bout de plusieurs utilisations et de n'ai pas trouvé pourquoi.
Egalement, sur l'ordinateur de ma collègue, ça bloque aussi mais chez elle, ça bloque à chaque fois.

Je préfère donc utiliser ton code qui répond sans aucun blocage à notre besoin.

Toutefois, je reviens car j'ai encore 2 demandes ... Rien que ça 🤣lol
VB:
demande 1
Quand la Combo1 est ouverte, si clic hors Combo1,
Private Sub Combo1_LostFocus() s'exécute et c'est très bien
Je souhaite ne pas rester sur la cellule cliquée mais que la cellule
Cells(ActiveCell.Row, 1) au niveau de la ligne de la cellule double cliquée soit sélectionnée
Par exemple : double clic en F6 = cellule A6 sélectionnée

demande 2
Le code semble s'exécuter plusieurs fois et " - Outre Mer" ou " - Métropôle" s'ajoutent 2 fois
Et + si je répète l'opération … Je n'arrive pas à faire 1 seul ajout.

Je joins le fichier test et je continue à chercher ....
Encore une super MERCI,
lionel :)
 

Pièces jointes

  • ComBo1_Gérard.xlsm
    33.2 KB · Affichages: 4
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lionel,

Ton fichier en retour.

Je ne vois pas trop l'intérêt de déplacer la sélection en colonne A mais bon il suffit de compléter la macro Worksheet_BeforeDoubleClick.

La colonne B est remplie par la macro Combo1_Change.

Es-tu sûr d'avoir besoin des Application.EnableEvents ? Sur ce fichier ils sont inutiles.

Enfin note qu'il n'y a pas d'accent circonflexe sur le 2ème o de Métropole.

A+
 

Pièces jointes

  • ComBo1_Gérard(1).xlsm
    35.5 KB · Affichages: 13

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Gérard, le Forum;
Bon dimanche à toutes et à tous :)

Me re-voilou avec encore 2 questions :
1 - Que signifie "If Combo1.ListIndex Then ActiveCell(1, 6) = Right$(Combo1.Text, 3) & Right$(ActiveCell(1, 6), 9)" :
If Combo1.ListIndex Then se réfère à quoi ?

2 - Est-il possible de laisser plus d'espace entre ? :
1650800209455.png

Merci d'avance une fois de plus ...
lionel :)
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lionel,

1. C'est la même chose que If ComBo1.ListIndex > 0 Then, ce test évite le 1er élément (0) de la liste.

2. Non, seule la taille de la police peut être modifiée

On pourrait intercaler des éléments vides dans la liste mais ça on ne le fait jamais.

A+
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Gérard, le Forum,
Je vous souhaite une belle journée :)

Je suis toujours à l'étude pour finaliser mon fichier de travail concernant ce fil.
Je voudrais qu'il soit "obligé" de cliquer dans la Combo1 pour en sortir.
L'application.interactive "ça craint" et j'ai bien trouvé d'autres méthodes possibles mais alourdissant mon "usine à gaz" lol.

L'idéal serait de retourner à la cellule double cliquée et de réafficher automatiquement la combo1 si clic hors combo1.
J'ai fait quelques essais et tests mais, pour l'instant, je n'y suis pas arrivé.
Je continue à chercher.
Si solution, ça m'arrangerait bien.
lionel :)
 
Dernière édition:

job75

XLDnaute Barbatruc
Ce qu'il faut que tu comprennes bien Lionel c'est ceci :

- si l'utilisateur veut modifier la cellule il clique dans la liste de Combo1, c'est bien évident

- s'il change d'idée la solution normale est de cliquer sur une cellule, ce qui masque Combo1

- la solution avec l'élément "Fermer = clic ICI" est du bricolage : Combo1 n'est pas masquée, on ne la voit pas parce que sa hauteur est très petite, c'est tout.

Comme je l'ai dit tu as tort de prendre l'utilisateur pour un neuneu.
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Gérard :)

"prendre l'utilisateur pour un neuneu" Ce n'est pas le cas mais nous devons "strictement" respecter nos procédures et nos actions sur nos fichiers de travail et c'est très rigoureux, d'où mes "usines à gaz"

Toutes nos actions et nos clics (j'y suis moi-même soumis) sont programmés et obligatoires :)
L'utilisateur (dont je fais partie) n'a pas la possibilité "de changer d'idée".

Toutefois, tu m'as donné l'élément qui m'a permis de trouver la solution "Combo1 n'est pas masquée, on ne la voit pas parce que sa hauteur est très petite, c'est tout.".

Voici, je pense, le fichier avec le problème résolu.
Encore merci Gérard ... Même tes conseils contiennent des solutions :)

P.S. J'ai pu faire une version sans l'élément "Fermer = clic ICI" est du bricolage
puisque devenue inutile.

lionel :)
 

Pièces jointes

  • ComBo1_Gérard(1).xlsm
    37 KB · Affichages: 3
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Lionel, le forum,

Avec ce fichier (2) la liste est déroulée mais la ComboBox n'est jamais activée :
VB:
Dim ferme As Boolean 'mémorise la variable

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Target, Range("f6:f15")) Is Nothing Then
        Cancel = True
        With Combo1
            .List = Array("Métropole 33", "988 Nouvelle-Calédonie  687", "987 Polynésie française 689", _
                "974 La Réunion  262", "973 Guyane 594", "972 Martinique 596", "971 Guadeloupe 590")
            .Left = Target.Offset(, 1).Left   '<-- position horizontale
            .Top = Target.Top '<-- position verticale
            .Width = 202 '<-- largeur
            .Height = 1 '<-- hauteur, pour masquer la zone de texte
            .Text = "" 'pour mettre le 1er élément en surbrillance
            .Visible = True
            Do
                DoEvents
                If ferme Then End 'arrête tout
                Target.Offset(, -5).Select 'déplace la sélection en colonne A mais est-ce bien utile ???
                .DropDown
            Loop
        End With
    End If
End Sub
 
Private Sub Combo1_Change()
    If Not Combo1.MatchFound Then Exit Sub
    Dim x$
    ActiveCell(1, 6) = Right$(Combo1.Text, 3) & Right$(ActiveCell(1, 6), 9)
    x = ActiveCell(1, 2) 'colonne B
    x = Replace(Replace(x, " - Métropole", ""), " - Outre Mer", "")
    Application.EnableEvents = False 'si c'est vraiment nécessaire...
    ActiveCell(1, 2) = x & IIf(Left(ActiveCell(1, 6), 2) = "33", " - Métropole", " - Outre Mer")
    Application.EnableEvents = True
    ferme = True 'arrête la boucle Do/Loop
End Sub
La boucle Do/Loop fonctionne tant que la liste n'est pas cliquée.

Edit : note aussi que la ComboBox n'est jamais masquée.

A+
 

Pièces jointes

  • ComBo1_Gérard(2).xlsm
    32.8 KB · Affichages: 3
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 317
Membres
102 862
dernier inscrit
Emma35400