Validation d'une cellule par vb

Résolu
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010 - 31 janv. 2008 à 18:34
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 18 févr. 2008 à 23:42
Bonsoir tout le monde,
Je veux mettre une validation de liste dans une cellule via VB mais ça ne marche pas
Voici le code :
   Liste_Précédente = Range("a3").Validation.Formula1
    With Range("A3").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=Liste_précédente & "toto"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = False
        .ShowError = False
    End With
Ce qui me donne un joli message d'erreur !!!
Si vous voyez une erreur dites le moi parce que là je craque
Merci

Nanardino64
Développons-nous, développeurs.

16 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
15 févr. 2008 à 11:20
OK, je viens de trouver le problème. C'est le séparateur de liste. Un peu comme lorsqu'on utilise Formula ou FormulaLocal.

J'utilise Modify plutôt que Add, mais les 2 devraient faire l'affaire.

    Dim Liste_Précédente As String
   
    Liste_Précédente = Replace(Range("A3").Validation.Formula1, ";", ",") & ",tete"
   
    With Range("A3").Validation
        .Modify xlValidateList, xlValidAlertStop, xlBetween, Liste_Précédente
    End With

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
18 févr. 2008 à 13:20
Bon ben ça y est j'ai trouvé et tu vas pas le croire !!!
A la place de With Range("a3").Validation j'ai mis
Range("a3").select
With Selection.Validation
Et là ôh miracle ça fonctionne super bien à condition de garder ton morceau de macro qui transforme les ; en , évidemment. modify et add fonctionnent aussi tous les deux.
Je te remercie pour tout le temps que tu as consacré à mon problème mais ce n'était pas vain.
encore merci.

Nanardino64
Développons-nous, développeurs.
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
31 janv. 2008 à 22:52
D'une part, ce n'est pas VB mais VBA...
Peux-tu expliquer un peu plus ?
Qu'y a-t-il en A3 ? Quel est le message d'erreur et son numéro ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
1 févr. 2008 à 08:14
Salut,
ben en fait dans la cellule A3 il y a déjà une liste de validation que je souhaite modifier en y ajoutant des noms suite à des modifications de mon fichier.
le message d'erreur c'est Erreur d'exécution '-2147417848 (80010108)':
La méthode 'Add' de l'objet 'Validation' a échoué

Nanardino64
Développons-nous, développeurs.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
1 févr. 2008 à 10:23
Est-ce que tu as préalablement créé une liste qui se nomme Liste_précédentetoto ?
Formula1:=Liste_précédente & "toto"

Si toto est une variable et disons qu'elle vaut 2. Et disons que tu as créé une liste se nommant Liste_précédente2
Il faudrait alors enlever les apostrophes
Formula1:=Liste_précédente & toto

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
1 févr. 2008 à 13:40
Ben là pour l'exemple j'ai mis toto mais sinon j'ai une variable string à la place et sans les apostrophes
Liste_précédente c'est ce qu'il y avait avant dans la liste de validation
J'ai essayé en mettant Formula1:= "toto;titi" (ce qui devrait marcher en tant que liste) pour voir si l'erreur se situait à ce niveau mais ça ne marchait toujours pas... Je ne comprend pas d'autant plus que pour avoir les commandes de cette macro j'ai fait un enregistrement que j'ai modifié juste un peu pour mon fonctionnment mais pour 'Add' j'ai juste changé la valeur de Formula1. Et pour l'exemple que je donne il est faux j'aurais du mettre  Formula1:=Liste_précédente & ";toto"
Voilà

Nanardino64
Développons-nous, développeurs.
0
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
14 févr. 2008 à 15:15
Bon ben visiblement MPi t'as laché le morceau, tant pis j'ai toujours pas réussi à résoudre le problème.

Nanardino64
Développons-nous, développeurs.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
14 févr. 2008 à 22:45
Il faudrait que tu expliques clairement ce que tu as créé comme nom de liste , la valeur de la ou les variables que tu utilises et le code écrit correctement.

Donc, en recommençant depuis le début, on pourrait peut-être y arriver ...
C'est difficile pour moi de reproduire un code qui n'est finalement pas le code parce que les guillemets..., parce que la variable..., parce que le nom de la liste... etc.

Peux-tu mettre le fichier sur un serveur public ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
15 févr. 2008 à 08:20
Salut,
Ben non désolé depuis le boulot j'ai pas accés à un serveur public on a seulement quelques sites de déverrouillés mais par contre je peux reprendre mes explications en étant plus clair.
Sur mon fichier Excel en cellule "a3" j'ai mis une validation de cellule sous forme de liste. Ce que j'aimerais faire c'est modifier les données de cette liste via vba pour y ajouter une valeur.
   Liste_Précédente = Range("a3").Validation.Formula1 'je récupère la liste qu'il y avait dans ma cellule, ça marche et ça me donne quelque chose de ce genre "toto;titi;tata" et Liste_Précédente est dimensionnée en string
    With Range("A3").Validation 'définition de la validation de la cellule "a3"
        .Delete 'on efface ce qu'il y avait avant
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:=Liste_Précédente & ";tete" 'c'est ici que je voudrais ajouter "tete" à ma liste, le ";" est le séparateur de liste et c'est là que la macro plante
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = False
        .ShowError = False
    End With
Comme je te l'ai dit pour avoir cette commande j'ai enregistré une macro puis j'ai regardé dans l'aide donc je ne comprend pas pourquoi ça plante.

Nanardino64
Développons-nous, développeurs.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
15 févr. 2008 à 11:14
OK, je comprends mieux le problème... Tu inscris tes valeurs de liste directement dans la boîte de dialogue Validation plutôt que de créer une liste sur la feuille directement. C'est bien ça ?

J'essaie de refaire le même processus et ça ne me donne pas d'erreur. Par contre, lorsque je sélectionne la liste, j'ai les données sous ce format
tata;titi;toto;tete
toutes ensembles une à côté de l'autre plutôt qu'une en dessous de l'autre comme une vraie liste... Je vais fouiller encore un peu.

Si je regarde l'aide, ça dit que Formula1 est en lecture seule...(?)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
15 févr. 2008 à 11:20
C'est exactement ça tu as bien compris le problème.
en ragardant l'aide ils mettent que les données dans la liste sont séparées par des virgules donc peut être essayes avec une virgule à la place de ton point virgule mais moi ça marche avec le point virgule !?! ça fait partie des petits mystères excel

Nanardino64
Développons-nous, développeurs.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
15 févr. 2008 à 11:25
On s'est croisé dirait-on

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
15 févr. 2008 à 14:57
C'est terrible, le problème persiste il me met que la méthode modify de l'objet validation a échoué
Private Sub Valider_Click()
    Dim Liste_Précédente As String
    Application.ScreenUpdating = False
    Liste_Précédente = Replace(Range("A3").Validation.Formula1, ";", ",") & "," & Nom_SST.Text 
    With Range("a3").Validation
         .Modify xlValidateList, xlValidAlertStop, xlBetween, Liste_Précédente
    End With
    Application.ScreenUpdating = True
End Sub
Voilà la macro je ne comprend où ça foire
Nom_SST.text c'est pour récupérer la valeur d'une textbox
Mes cellules ne sont pas verrouillées
Et si ça marche chez toi pourquoi ça ne marche pas chez moi?

Nanardino64
Développons-nous, développeurs.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
15 févr. 2008 à 22:25
Où est ton code et où est le textbox ? sur un UserForm ?
Si c'est le cas, peut-être faudrait-il que tu spécifies explicitement le nom de la feuille (?)

Et laisse tomber le ScreenUpdating. Il y a trop peu à faire dans cette procédure pour l'utiliser...

Finalement, l'as-tu essayé avec ta méthode du Delete et Add plutôt que le Modify ?
Tes cellules ne sont pas verrouillées, mais est-ce que la feuille est protégée ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
nanardino64 Messages postés 131 Date d'inscription vendredi 18 août 2006 Statut Membre Dernière intervention 17 mars 2010
18 févr. 2008 à 09:53
Oui le tout est sur un userform, pour le nom de la feuille il prend par défaut la feuille active. J'ai mis un espion sur Liste_Précédente et il est correct.
Ma feuille n'est pas protégée et je teste immédiatement le delete et add

Nanardino64
Développons-nous, développeurs.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
18 févr. 2008 à 23:42
Bienvenue et bonne continuation

Excel est bien pointilleux quelquefois ...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous