virgule dans liste validation

A

adrien

Guest
Bonjour à tous

J'aimerais bien créer a partir de vba des listes de validation. Mais certaines données contiennent des virgules et donc il le prend comme séparateur de données. Comment pourrais-je faire pour le forcer comme caractère et non séparateur ?

Merci d'avance
 
A

adrien

Guest
voila un exemple bidon :

Range('A1').Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:='a,b;c'

c'est le code que vba génére lorsque j'enregistre une macro, en créant une liste avec 2 éléments : 'a,b' et 'c'.
Mais lorsque j'exécute ce code vba, il me créé cette fois ci une liste avec 2 éléments : 'a' et 'b;c'.

Voila où est mon problème (j'ai excel 2003)

Adrien
 

adebrux

XLDnaute Occasionnel
Je sais pas si j'ai bien compris, mais tu pourrais peut être essayer de déclarer tes listes (ou plages de données) auparavant par VBA.

Dans le cas ou a et b sont 2 plages de données , tu peux faire (à mettre avant le code de ta liste de validation):
Code:
 Union(range('a'), range('b')).name = 'liste1'
dans le cas ou ce ne sont que des cellules, tu peux faire un code du style:
Code:
range('A1:B2').name = 'liste1'

ensuite, tu change légèrement le code de ta liste de validation:
Code:
Range('A1').Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= xlBetween, Formula1:='liste1 ,c'
si ca marche pas, tu peux essayer de changer ',' en ';', ou encore de faire du 'formula1 = 'liste1' & 'c'

Tiens nous au courant

Bon courage
Arnaud
 
A

adrien

Guest
En fait, mes valeurs a, b et c ne sont pas des plages de cellules mais du texte. j'ai mal choisi mon exemple donc je vais en donner un autre.

Je veux par exemple mettre dans une liste les valeurs '20' et '10,5'.
Si j'enregistre une macro en créant cette liste a la main, le code vba me donne :
Range('BH1').Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:='20;10,5'
end with

Mais si, sans toucher à ce code, je l'exécute à nouveau avec F5, il me créé une liste avec les valeurs '20;10' et '5'.
Et si j'inverse les ',' avec les ';', j'obtiens '10;5' au lieu de '10,5' donc ca ne me conviens pas trop.

Merci
 

adebrux

XLDnaute Occasionnel
et tu peux pas mettre tes valeures dans une cellule ??? ca leur permettrait en plus d'être évolutive plutôt que de devoir te retaper ton code à modifier à chaque fois.

Si par exemple ce sont des prix dans ta liste de validation, tu peux choisir de mettre tt tes prix dans la feuille 2 par exemple, les uns en dessous des autres, et avec le code suivant, ca devrait marcher. En plus tu peux rajouter des données, ca le prend en compte tt seul...
Code:
Dim premier as integer ' pour enregistrer le 1er élément de la liste
Dim i as long

premier = true
with sheets('feuil2')
      For i = 1 To .Range('A65536').End(xlUp).Row
            If premier Then
                .Cells(i, 1).Name = 'prix': premier = False
            Else
                Union(Range('prix'), .Cells(i, 1)).Name = 'prix'
            End If
      Next i
end with
'ce code a pour effet de sélectionner et de nommer ttes les valeurs contenues dans la colonne A de la feuille 2 et de les nommer 'prix'
ensuite tu met ton code de liste de validation, comme tt à l'heure, et t'adapte le nom de la formule au nom que t'as donné juste au dessus.

En espérant avoir été assez clair et pu t'aider..

A+
Arnaud

PS: il faut supprimer tt les &nbs p, je sais pas ce que c'est...

Message édité par: adebrux, à: 14/11/2005 15:52

Message édité par: adebrux, à: 14/11/2005 15:54
 
A

adrien

Guest
Ok merci beaucoup,
j'espérais ne pas avoir à conserver les valeurs des listes dans une feuille étant donné que j'ai beaucoup de listes.
Ca me prendra pas mal de place en mémoire. mais au moins ca marchera.

merci
Adrien
 

Discussions similaires

Statistiques des forums

Discussions
312 220
Messages
2 086 381
Membres
103 199
dernier inscrit
ATS1