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

Combobox et txtbox erreur"13"

3 réponses
Avatar
Pierre
Bonjour

Dans un formulaire de saisie d'articles j'ai une combobox qui remplit 3
textbox. Le problème est quand l'utilsateur saisi un article qui ne se
trouve pas dans la liste, un message d'erreur apparaît : (erreur d'éxécution
"13" incompatibilité de type) et le userform se ferme et l'utilisateur
hurle car il a perdu ses saisies. Est ce possible de permettre la saisie
d'un article inconnu et que les textsbox ne se remplissent pas ou sinon de
prévenir que la saisie n'est pas bonne et de permettre à l'utilisateur de
modifier sa saisie?

Ci-joint mon code:
Private Sub cbodesign_Change() 'remplit automatiquement les txt suivants par
rapport à la selection dans cbodesign
Txttarif.Text = Application.Index(Range("fichierarticles!tarifs"),
Cbodesign.ListIndex + 1)
Txttarif1.Text = Application.Index(Range("fichierarticles!cdt"),
Cbodesign.ListIndex + 1)
Txttarif2.Text = Application.Index(Range("fichierarticles!articles"),
Cbodesign.ListIndex + 1)

Merci à tous
Pierre

3 réponses

Avatar
Pierre Fauconnier
Bonjour

Dans les propriétés du combobox, tu as la propriété Match Required qui, mise
à True, empêche la saisie d'une donnée ne se trouvant pas dans le combo.
Mais le message indiqué n'est guère attrayant.

Tu peux dès lors utiliser l'évènement Exit du combobox de deux manières,
selon l'organisation de tes données.

1.
Les donnés du combobox et des textbox sont dans la même feuille, sur la même
ligne. PAr exemple, l'ID de l'article en A, le prix 1 en B et le prix 2 en
C.
Dès lors, remplis ton combobox multicolonne (3 colonnes) avec les données de
A, B et C, même si tu n'affiches que la seule colonne A(ColumnWidths avec
les valeurs appropriées, par exemple 200;0;0 pour n'afficher que la première
colonne). Attention que la première colonne est la colonne d'index 0.
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1 = ComboBox1.Column(1)
TextBox2 = ComboBox1.Column(2)
End Sub

2.
Si les données ne sont pas ordonnées de cette façon-là, tu peux rechercher
la donnée dans la zone voulue et gérer des décalages de cellule
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim Cellule As Range

Set Cellule = Range("A1:A10").Find(what:=ComboBox1, LookIn:=xlValues,
lookat:=xlWhole)
If Cellule Is Nothing Then
' Valeur non trouvée
Cancel = True ' Annulation de la saisie
MsgBox "Valeur non trouvée, veuillez saisir une valeur existante",
bvokonly + vbExclamation, "Erreur de saisie"
Else
TextBox1 = Cellule(1, 2)
TextBox2 = Cellule(1, 3)
End If

End Sub

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"Pierre" a écrit dans le message de news:
%23ttn%
Bonjour

Dans un formulaire de saisie d'articles j'ai une combobox qui remplit 3
textbox. Le problème est quand l'utilsateur saisi un article qui ne se
trouve pas dans la liste, un message d'erreur apparaît : (erreur
d'éxécution "13" incompatibilité de type) et le userform se ferme et
l'utilisateur hurle car il a perdu ses saisies. Est ce possible de
permettre la saisie d'un article inconnu et que les textsbox ne se
remplissent pas ou sinon de prévenir que la saisie n'est pas bonne et de
permettre à l'utilisateur de modifier sa saisie?

Ci-joint mon code:
Private Sub cbodesign_Change() 'remplit automatiquement les txt suivants
par rapport à la selection dans cbodesign
Txttarif.Text = Application.Index(Range("fichierarticles!tarifs"),
Cbodesign.ListIndex + 1)
Txttarif1.Text = Application.Index(Range("fichierarticles!cdt"),
Cbodesign.ListIndex + 1)
Txttarif2.Text = Application.Index(Range("fichierarticles!articles"),
Cbodesign.ListIndex + 1)

Merci à tous
Pierre



Avatar
anonymousA
bonjour,

autre possibilité, mettre la propriété Style de ton combobox à
2-fmstyledropdownlist auquel cas, on ne peut rien saisir d'autre que ce qu'il
y a dans le combobox.
Sous la condition précédente, tu peux même si tu souhaites accelerer la
saisie en jouant sur la propriété MatchEntry de ce même combobox.

A+


Bonjour

Dans un formulaire de saisie d'articles j'ai une combobox qui remplit 3
textbox. Le problème est quand l'utilsateur saisi un article qui ne se
trouve pas dans la liste, un message d'erreur apparaît : (erreur d'éxécution
"13" incompatibilité de type) et le userform se ferme et l'utilisateur
hurle car il a perdu ses saisies. Est ce possible de permettre la saisie
d'un article inconnu et que les textsbox ne se remplissent pas ou sinon de
prévenir que la saisie n'est pas bonne et de permettre à l'utilisateur de
modifier sa saisie?

Ci-joint mon code:
Private Sub cbodesign_Change() 'remplit automatiquement les txt suivants par
rapport à la selection dans cbodesign
Txttarif.Text = Application.Index(Range("fichierarticles!tarifs"),
Cbodesign.ListIndex + 1)
Txttarif1.Text = Application.Index(Range("fichierarticles!cdt"),
Cbodesign.ListIndex + 1)
Txttarif2.Text = Application.Index(Range("fichierarticles!articles"),
Cbodesign.ListIndex + 1)

Merci à tous
Pierre





Avatar
Pierre
Bonsoir,

Je vous remercie Pierre et Anonymous, j'ai testé les 2 solutions et c'est
ok. Je vais avoir des utilisateurs contents (si c'est possible d'avoir un
jour un utilisateur content...!)

Bonne soirée
Pierre

"Pierre" a écrit dans le message de news:
%23ttn%
Bonjour

Dans un formulaire de saisie d'articles j'ai une combobox qui remplit 3
textbox. Le problème est quand l'utilsateur saisi un article qui ne se
trouve pas dans la liste, un message d'erreur apparaît : (erreur
d'éxécution "13" incompatibilité de type) et le userform se ferme et
l'utilisateur hurle car il a perdu ses saisies. Est ce possible de
permettre la saisie d'un article inconnu et que les textsbox ne se
remplissent pas ou sinon de prévenir que la saisie n'est pas bonne et de
permettre à l'utilisateur de modifier sa saisie?

Ci-joint mon code:
Private Sub cbodesign_Change() 'remplit automatiquement les txt suivants
par rapport à la selection dans cbodesign
Txttarif.Text = Application.Index(Range("fichierarticles!tarifs"),
Cbodesign.ListIndex + 1)
Txttarif1.Text = Application.Index(Range("fichierarticles!cdt"),
Cbodesign.ListIndex + 1)
Txttarif2.Text = Application.Index(Range("fichierarticles!articles"),
Cbodesign.ListIndex + 1)

Merci à tous
Pierre