Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Evénement change pour un combobox dans une barre d'outil

2 réponses
Avatar
MiMa
Bonjour la communauté

Dans une barre d'outil crée spécialement pour un classeur, j'ai inserré un
combobox de type "msoControlEdit".
J'ai réussi à afficher le texte par défaut que je souhaitais et à le faire
réagir lorsque l'utilisateur valide avec le bouton "Entrée".
Je voudrai que ce contrôle réagisse dès qu'il reçois le focus à la facon du
combobox de recherche affiché sur le haut de la fenêtre "Tapez une
question". Et là, je me perds.

J'ai trouvé un début de réponse dans l'aide à la rubrique "Change, événement
(Office)" de commandbarcombobox, mais l'exemple donné ne fonctionne pas. Il
bloque dirrectement sur la ligne :
"Private ctlComboBoxHandler As New ComboBoxHandler"
en donnant le message d'erreur suivant :
"Erreur de compilation : Type défini par l'utilisateur non défini"

J'ai essayé de l'adapter à ma barre d'outil, mais je sèche lamentablement...
Si quelqu'un à une idée pour me débloquer la situation, je l'en remercie
d'avance

Voici le texte de l'aide:
Change, événement
Cet événement se produit quand l'utilisateur final modifie la sélection dans
une zone de liste déroulante d'une barre de commandes.

Private Sub CommandBarComboBox_Change

(ByVal Ctrl As CommandBarComboBox)


Note
L'événement Change est reconnu par l'objet CommandBarComboBox. Pour renvoyer
cet événement pour un contrôle CommandBarComboBox particulier, utilisez le
mot clé WithEvents pour déclarer une variable, puis attribuez la valeur du
contrôle CommandBarComboBox à la variable. Lorsque l'événement Change est
déclenché, il exécute la macro ou le code que vous avez spécifié avec la
propriété OnAction du contrôle.

Exemple
Cet exemple montre comment créer une barre de commandes avec un contrôle
CommandBarComboBox contenant quatre sélections. La zone de liste déroulante
répond aux actions de l'utilisateur par l'intermédiaire de l'événement
CommandBarComboBox_Change.

Private ctlComboBoxHandler As New ComboBoxHandler
Sub AddComboBox()

Set HostApp = Application

Dim newBar As Office.CommandBar
Set newBar = HostApp.CommandBars.Add(Name:="Test CommandBar",
Temporary:=True)
Dim newCombo As Office.CommandBarComboBox
Set newCombo = newBar.Controls.Add(msoControlComboBox)
With newCombo
.AddItem "First Class", 1
.AddItem "Business Class", 2
.AddItem "Coach Class", 3
.AddItem "Standby", 4
.DropDownLines = 5
.DropDownWidth = 75
.ListHeaderCount = 0
End With
ctlComboBoxHandler.SyncBox newCombo
newBar.Visible = True
End Sub
L'exemple qui précède est fondé sur le code suivant, qui est stocké dans
un module de classe du projet VBA.

Private WithEvents ComboBoxEvent As Office.CommandBarComboBox
Public Sub SyncBox(box As Office.CommandBarComboBox)
Set ComboBoxEvent = box
If Not box Is Nothing Then
MsgBox "Synced " & box.Caption & " ComboBox events."
End If

End Sub

Private Sub Class_Terminate()
Set ComboBoxEvent = Nothing
End Sub

Private Sub ComboBoxEvent_Change(ByVal Ctrl As Office.CommandBarComboBox)
Dim stComboText As String

stComboText = Ctrl.Text

Select Case stComboText
Case "First Class"
FirstClass
Case "Business Class"
BusinessClass
Case "Coach Class"
CoachClass
Case "Standby"
Standby
End Select

End Sub
Private Sub FirstClass()
MsgBox "You selected First Class reservations"
End Sub
Private Sub BusinessClass()
MsgBox "You selected Business Class reservations"
End Sub
Private Sub CoachClass()
MsgBox "You selected Coach Class reservations"
End Sub
Private Sub Standby()
MsgBox "You chose to fly standby"
End Sub

2 réponses

Avatar
MiMa
Bonjour

J'ai résolu une partie de mon problème.
Pour ceux qui comme moi ne sont pas familiarisé avec les modules de classe,
l'erreur provoquée par
"Private ctlComboBoxHandler As New ComboBoxHandler" provient que le module
de classe doit avoir le nom du type défini par l'utilisateur, à savoir dans
l'exemple de Microsoft : "ComboBoxHandler".

Il reste que le contrôle ne réagie pas tout à fait comme je le souhaiterai !
Je voudrai le faire réagir comme une procédure événementielle
"Worksheet_Change"
Exemple
Saisie du chiffre 2 dans le combo entraine la sélection de la ligne 2
saisie du chiffre suivant, 3 par ex, sélection de la ligne 23
etc...

Merci à tous ceux qui pourront me répondre




"MiMa" a écrit dans le message de news:
47d2ccb1$0$19142$
Bonjour la communauté

Dans une barre d'outil crée spécialement pour un classeur, j'ai inserré un
combobox de type "msoControlEdit".
J'ai réussi à afficher le texte par défaut que je souhaitais et à le faire
réagir lorsque l'utilisateur valide avec le bouton "Entrée".
Je voudrai que ce contrôle réagisse dès qu'il reçois le focus à la facon
du combobox de recherche affiché sur le haut de la fenêtre "Tapez une
question". Et là, je me perds.

J'ai trouvé un début de réponse dans l'aide à la rubrique "Change,
événement (Office)" de commandbarcombobox, mais l'exemple donné ne
fonctionne pas. Il bloque dirrectement sur la ligne :
"Private ctlComboBoxHandler As New ComboBoxHandler"
en donnant le message d'erreur suivant :
"Erreur de compilation : Type défini par l'utilisateur non défini"

J'ai essayé de l'adapter à ma barre d'outil, mais je sèche
lamentablement...
Si quelqu'un à une idée pour me débloquer la situation, je l'en remercie
d'avance

Voici le texte de l'aide:
Change, événement
Cet événement se produit quand l'utilisateur final modifie la sélection
dans une zone de liste déroulante d'une barre de commandes.

Private Sub CommandBarComboBox_Change

(ByVal Ctrl As CommandBarComboBox)


Note
L'événement Change est reconnu par l'objet CommandBarComboBox. Pour
renvoyer cet événement pour un contrôle CommandBarComboBox particulier,
utilisez le mot clé WithEvents pour déclarer une variable, puis attribuez
la valeur du contrôle CommandBarComboBox à la variable. Lorsque
l'événement Change est déclenché, il exécute la macro ou le code que vous
avez spécifié avec la propriété OnAction du contrôle.

Exemple
Cet exemple montre comment créer une barre de commandes avec un contrôle
CommandBarComboBox contenant quatre sélections. La zone de liste
déroulante répond aux actions de l'utilisateur par l'intermédiaire de
l'événement CommandBarComboBox_Change.

Private ctlComboBoxHandler As New ComboBoxHandler
Sub AddComboBox()

Set HostApp = Application

Dim newBar As Office.CommandBar
Set newBar = HostApp.CommandBars.Add(Name:="Test CommandBar",
Temporary:=True)
Dim newCombo As Office.CommandBarComboBox
Set newCombo = newBar.Controls.Add(msoControlComboBox)
With newCombo
.AddItem "First Class", 1
.AddItem "Business Class", 2
.AddItem "Coach Class", 3
.AddItem "Standby", 4
.DropDownLines = 5
.DropDownWidth = 75
.ListHeaderCount = 0
End With
ctlComboBoxHandler.SyncBox newCombo
newBar.Visible = True
End Sub
L'exemple qui précède est fondé sur le code suivant, qui est stocké dans
un module de classe du projet VBA.

Private WithEvents ComboBoxEvent As Office.CommandBarComboBox
Public Sub SyncBox(box As Office.CommandBarComboBox)
Set ComboBoxEvent = box
If Not box Is Nothing Then
MsgBox "Synced " & box.Caption & " ComboBox events."
End If

End Sub

Private Sub Class_Terminate()
Set ComboBoxEvent = Nothing
End Sub

Private Sub ComboBoxEvent_Change(ByVal Ctrl As Office.CommandBarComboBox)
Dim stComboText As String

stComboText = Ctrl.Text

Select Case stComboText
Case "First Class"
FirstClass
Case "Business Class"
BusinessClass
Case "Coach Class"
CoachClass
Case "Standby"
Standby
End Select

End Sub
Private Sub FirstClass()
MsgBox "You selected First Class reservations"
End Sub
Private Sub BusinessClass()
MsgBox "You selected Business Class reservations"
End Sub
Private Sub CoachClass()
MsgBox "You selected Coach Class reservations"
End Sub
Private Sub Standby()
MsgBox "You chose to fly standby"
End Sub





Avatar
MiMa
Bonjour

J'ai résolu une partie de mon problème.
Pour ceux qui comme moi ne sont pas familiarisé avec les modules de classe,
l'erreur provoquée par
"Private ctlComboBoxHandler As New ComboBoxHandler" provient que le module
de classe doit avoir le nom du type défini par l'utilisateur, à savoir dans
l'exemple de Microsoft : "ComboBoxHandler".

Il reste que le contrôle ne réagie pas tout à fait comme je le souhaiterai !
Je voudrai le faire réagir comme un combobox sur un formulaire réagit à
l'évenement "Change", c'est à dire recalculé à chaque changement

Exemple
Saisie du chiffre 2 dans le combo entrainerai la sélection de la ligne 2
saisie du chiffre suivant, 3 par ex, sélection de la ligne 23
saisie du chiffre suivant, 5 par ex, sélection de la ligne 235
etc...

Merci à tous ceux qui pourront me répondre

"MiMa" a écrit dans le message de news:
47d2ccb1$0$19142$
Bonjour la communauté

Dans une barre d'outil crée spécialement pour un classeur, j'ai inserré un
combobox de type "msoControlEdit".
J'ai réussi à afficher le texte par défaut que je souhaitais et à le faire
réagir lorsque l'utilisateur valide avec le bouton "Entrée".
Je voudrai que ce contrôle réagisse dès qu'il reçois le focus à la facon
du combobox de recherche affiché sur le haut de la fenêtre "Tapez une
question". Et là, je me perds.

J'ai trouvé un début de réponse dans l'aide à la rubrique "Change,
événement (Office)" de commandbarcombobox, mais l'exemple donné ne
fonctionne pas. Il bloque dirrectement sur la ligne :
"Private ctlComboBoxHandler As New ComboBoxHandler"
en donnant le message d'erreur suivant :
"Erreur de compilation : Type défini par l'utilisateur non défini"

J'ai essayé de l'adapter à ma barre d'outil, mais je sèche
lamentablement...
Si quelqu'un à une idée pour me débloquer la situation, je l'en remercie
d'avance

Voici le texte de l'aide:
Change, événement
Cet événement se produit quand l'utilisateur final modifie la sélection
dans une zone de liste déroulante d'une barre de commandes.

Private Sub CommandBarComboBox_Change

(ByVal Ctrl As CommandBarComboBox)


Note
L'événement Change est reconnu par l'objet CommandBarComboBox. Pour
renvoyer cet événement pour un contrôle CommandBarComboBox particulier,
utilisez le mot clé WithEvents pour déclarer une variable, puis attribuez
la valeur du contrôle CommandBarComboBox à la variable. Lorsque
l'événement Change est déclenché, il exécute la macro ou le code que vous
avez spécifié avec la propriété OnAction du contrôle.

Exemple
Cet exemple montre comment créer une barre de commandes avec un contrôle
CommandBarComboBox contenant quatre sélections. La zone de liste
déroulante répond aux actions de l'utilisateur par l'intermédiaire de
l'événement CommandBarComboBox_Change.

Private ctlComboBoxHandler As New ComboBoxHandler
Sub AddComboBox()

Set HostApp = Application

Dim newBar As Office.CommandBar
Set newBar = HostApp.CommandBars.Add(Name:="Test CommandBar",
Temporary:=True)
Dim newCombo As Office.CommandBarComboBox
Set newCombo = newBar.Controls.Add(msoControlComboBox)
With newCombo
.AddItem "First Class", 1
.AddItem "Business Class", 2
.AddItem "Coach Class", 3
.AddItem "Standby", 4
.DropDownLines = 5
.DropDownWidth = 75
.ListHeaderCount = 0
End With
ctlComboBoxHandler.SyncBox newCombo
newBar.Visible = True
End Sub
L'exemple qui précède est fondé sur le code suivant, qui est stocké dans
un module de classe du projet VBA.

Private WithEvents ComboBoxEvent As Office.CommandBarComboBox
Public Sub SyncBox(box As Office.CommandBarComboBox)
Set ComboBoxEvent = box
If Not box Is Nothing Then
MsgBox "Synced " & box.Caption & " ComboBox events."
End If

End Sub

Private Sub Class_Terminate()
Set ComboBoxEvent = Nothing
End Sub

Private Sub ComboBoxEvent_Change(ByVal Ctrl As Office.CommandBarComboBox)
Dim stComboText As String

stComboText = Ctrl.Text

Select Case stComboText
Case "First Class"
FirstClass
Case "Business Class"
BusinessClass
Case "Coach Class"
CoachClass
Case "Standby"
Standby
End Select

End Sub
Private Sub FirstClass()
MsgBox "You selected First Class reservations"
End Sub
Private Sub BusinessClass()
MsgBox "You selected Business Class reservations"
End Sub
Private Sub CoachClass()
MsgBox "You selected Coach Class reservations"
End Sub
Private Sub Standby()
MsgBox "You chose to fly standby"
End Sub