OVH Cloud OVH Cloud

Validation avec des valeurs décimales

13 réponses
Avatar
Patrick EVEN
Bonjour,

Sous Excel 2000, en mode enregistrement de macro, après avoir créer
sur une cellule une liste de validation, j'ai obtenu le code suivant :

With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
_
xlBetween, Formula1:="0,5;1;1,5"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = _
"Seules les valeurs suivantes sont valides : 0,5 - 1 et 1,5."
.ShowInput = True
.ShowError = True
End With

Lorsque je rejoue cette macro, il semble qu'il y ait une confusion
entre le point virgule (séparateurs de valeurs de la liste)
et la virgule (séparateur des décimales).

Quelle astuce permet de résoudre ce petit problème ?

Cordialement,

Patrick EVEN

3 réponses

1 2
Avatar
Patrick EVEN
Bonjour,

Il y a quelque chose d'intéressant dans cette proposition,
qui consiste si j'ai bien compris à profiter de l'évènement "Change"
de la feuille pour convertir la chaîne de caractères en valeur numérique.

Je comprends aussi qu'elle s'applique seulement à la cellule B5.

J'aimerais pouvoir appliquer cette solution non pas sur la cellule B5
mais sur chaque cellule appartenant à 3 plages discontinues de 90 cellules
chacune
nommées P1, P2 et P3 par exemple.

La question devient maintenant :
Comment peut on prendre en compte ce paramétrage ?

Cordialement,
Patrick EVEN


"Alain CROS" a écrit dans le message de news:
%
Bonjour.

Par un évènement de feuille, il semble que ça fonctionne aussi mais il
faut connaître l'emplacement des 'Selection' possibles.

Sub Valid_Liste()
With [B5].Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=
_
xlBetween, Formula1:="0.5,1,1.5"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = _
"Seules les valeurs suivantes sont valides : 0,5 - 1 et 1,5."
.ShowInput = True
.ShowError = True
End With
End Sub

Et dans le module de feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B5]) Is Nothing Then Exit Sub
Application.EnableEvents = False
[B5] = Val([B5])
Application.EnableEvents = True
End Sub

Alain CROS

"anonymousA" a écrit dans le message de news:
436cd69b$0$27405$
| Bonjour,
|
| malgré bien des essais, phénomène qui ne m'était pas apparu jusqu'ici,
| en fait en VBA , quoiqu'on fasse, lors d'une définition avec le type
| xlvalidatelist, les virgules sont considérées comme des séparateurs de
| la liste et les autres caractères comme du texte. Or comme Excel est
| bon enfant avec les formats , si on passe des valeurs entières, il n'y a
| alors aucun problème, mais si on lui passe des valeurs décimales alors
| elles sont prises par Excel pour ce qu'elles sont dans le cadre de
| l'écriture d'un type xlvalidatelist c.à.d du texte.
| En synthèse, il apparaît que la seule solution qui puisse se présenter à
| toi est celle proposée par Mich Denis.
|
| A+
|
|
| > Bonjour,
| >
| > J'ai aussi pensé à cette éventualité.
| > Mais dans ce cas, il y a un autre effet de bord.
| > La cellule dotée de cette combo-box est considérée
| > comme une chaîne de caractères alors que je souhaite
| > récupérer une valeur numérique.
| >
| > Remplacer la virgule décimale par un point décimal
| > n'est donc pas tout à fait satisfaisant.
| >
| > Mais je ne doute pas que l'un d'entre vous saura
| > m'aider à surmonter cette difficulté passagère :
| >
| > Comment obtenir en VBA des valeurs décimales dans une combo-box de
| > validation ?
| >
| > Cordialement,
| >
| > Patrick EVEN
| > "JLuc" a écrit dans le message de
news:
| >
| >
| >>*Bonjour Patrick EVEN*,
| >>Et si tu remplace les virgule par des points ?
| >>Ca marche mieux ou pareil ?
| >>
| >>
| >>>Bonjour,
| >>>
| >>>Remplace les point-virgules par une virgule,
| >>>c'est la première chose qui m'est venue à l'esprit.
| >>>
| >>>La mauvaise nouvelle, c'est que le contenu de la combo-box de
validation
| >>>contient dans ce cas 5 valeurs (0 ; 5 ; 1 ; 1 ; 5) au lieu de 3 (0,5
; 1
| >>>; 1,5)
| >>>car VBA ne peut distinguer les virgules de type séparateur de valeurs
| >>>des virgules décimales.
| >>>
| >>>La question reste donc entière :
| >>>Comment obtenir en VBA des valeurs décimales dans une combo-box de
| >>>validation ?
| >>>
| >>>Cordialement,
| >>>
| >>> Patrick EVEN
| >>>
| >>>
| >>>"michdenis" a écrit dans le message de news:
| >>>uus$
| >>>
| >>>>Bonjour Patrick
| >>>>
| >>>>Tu es en VBA
| >>>>Remplace les point-virgules par une virgule dans
Formula1:="0,5;1;1,5"
| >>>>
| >>>>
| >>>>Salutations!
| >>>>
| >>>>
| >>>>"Patrick EVEN" a écrit dans le message de news:
| >>>>
| >>>>Bonjour,
| >>>>
| >>>>Sous Excel 2000, en mode enregistrement de macro, après avoir créer
| >>>>sur une cellule une liste de validation, j'ai obtenu le code suivant
:
| >>>>
| >>>> With Selection.Validation
| >>>> .Delete
| >>>> .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
| >>>>Operator: > | >>>>_
| >>>> xlBetween, Formula1:="0,5;1;1,5"
| >>>> .IgnoreBlank = True
| >>>> .InCellDropdown = True
| >>>> .InputTitle = ""
| >>>> .ErrorTitle = ""
| >>>> .InputMessage = ""
| >>>> .ErrorMessage = _
| >>>> "Seules les valeurs suivantes sont valides : 0,5 - 1 et 1,5."
| >>>> .ShowInput = True
| >>>> .ShowError = True
| >>>> End With
| >>>>
| >>>>Lorsque je rejoue cette macro, il semble qu'il y ait une confusion
| >>>>entre le point virgule (séparateurs de valeurs de la liste)
| >>>>et la virgule (séparateur des décimales).
| >>>>
| >>>>Quelle astuce permet de résoudre ce petit problème ?
| >>>>
| >>>>Cordialement,
| >>>>
| >>>> Patrick EVEN
| >>>>
| >>>>
| >>>>
| >>>>
| >>
| >>
| >>--
| >>JLuc
| >>
| >>Pensez a regarder ces sites très bien fait, ce sont des mines de trucs
et
| >>astuces !
| >>http://www.excelabo.net
| >>http://jacxl.free.fr/
| >>http://dj.joss.free.fr/
| >>C:Program FilesMicrosoft OfficeOffice1036VBALIST.XLS
| >>
| >>
| >
| >
| >




Avatar
Alain CROS
Bonjour.

P1, P2 et P3 ne sont pas autorisé comme nom de plage.
Donc avec Plg1, Plg2 et Plg3 :

Sub Valid_Liste()
If Intersect(ActiveCell, [Plg1]) Is Nothing And _
Intersect(ActiveCell, [Plg2]) Is Nothing And _
Intersect(ActiveCell, [Plg3]) Is Nothing Then Exit Sub
With ActiveCell.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="0.5,1,1.5"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = _
"Seules les valeurs suivantes sont valides : 0,5 - 1 et 1,5."
.ShowInput = True
.ShowError = True
End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(ActiveCell, [Plg1]) Is Nothing And _
Intersect(ActiveCell, [Plg2]) Is Nothing And _
Intersect(ActiveCell, [Plg3]) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = Val(Target)
Application.EnableEvents = True
End Sub

Alain CROS

"Patrick EVEN" a écrit dans le message de news:
| Bonjour,
|
| Il y a quelque chose d'intéressant dans cette proposition,
| qui consiste si j'ai bien compris à profiter de l'évènement "Change"
| de la feuille pour convertir la chaîne de caractères en valeur numérique.
|
| Je comprends aussi qu'elle s'applique seulement à la cellule B5.
|
| J'aimerais pouvoir appliquer cette solution non pas sur la cellule B5
| mais sur chaque cellule appartenant à 3 plages discontinues de 90 cellules
| chacune
| nommées P1, P2 et P3 par exemple.
|
| La question devient maintenant :
| Comment peut on prendre en compte ce paramétrage ?
|
| Cordialement,
| Patrick EVEN
|
Avatar
Patrick EVEN
Bonjour,

Merci encore à tous pour vos contributions.
Mention spéciale pour Alain.
Je vais dès demain mettre en oeuvre cette solution
que je crois être un bon palliatif.

Cordialement,
Patrick EVEN

"Alain CROS" a écrit dans le message de news:
%
Bonjour.

P1, P2 et P3 ne sont pas autorisé comme nom de plage.
Donc avec Plg1, Plg2 et Plg3 :

Sub Valid_Liste()
If Intersect(ActiveCell, [Plg1]) Is Nothing And _
Intersect(ActiveCell, [Plg2]) Is Nothing And _
Intersect(ActiveCell, [Plg3]) Is Nothing Then Exit Sub
With ActiveCell.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:= _
xlBetween, Formula1:="0.5,1,1.5"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = _
"Seules les valeurs suivantes sont valides : 0,5 - 1 et 1,5."
.ShowInput = True
.ShowError = True
End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(ActiveCell, [Plg1]) Is Nothing And _
Intersect(ActiveCell, [Plg2]) Is Nothing And _
Intersect(ActiveCell, [Plg3]) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target = Val(Target)
Application.EnableEvents = True
End Sub

Alain CROS

"Patrick EVEN" a écrit dans le message de news:

| Bonjour,
|
| Il y a quelque chose d'intéressant dans cette proposition,
| qui consiste si j'ai bien compris à profiter de l'évènement "Change"
| de la feuille pour convertir la chaîne de caractères en valeur
numérique.
|
| Je comprends aussi qu'elle s'applique seulement à la cellule B5.
|
| J'aimerais pouvoir appliquer cette solution non pas sur la cellule B5
| mais sur chaque cellule appartenant à 3 plages discontinues de 90
cellules
| chacune
| nommées P1, P2 et P3 par exemple.
|
| La question devient maintenant :
| Comment peut on prendre en compte ce paramétrage ?
|
| Cordialement,
| Patrick EVEN
|




1 2