IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Validation des données en VBA : forcer source erronée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut Validation des données en VBA : forcer source erronée
    Bonjour,

    Je génère dans mon tableur, et par VBA, une validation des données par une liste, dont le nom dépend du contenu d'une autre cellule.

    Par exemple, la cellule A2 contient le texte "Tous les jours", et je souhaite avoir en B2 un choix parmi la liste Tous_les_jours, que j'ai créée dans une autre feuille.

    Dans Excel, manuellement, j'utilise la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDIRECT(SUBSTITUE(A2, " ", "_"))
    que j'insère dans le champ Formule du menu Validation des données, en sélectionnant Liste.

    La source est reconnue comme erronée, je valide malgré tout, et le résultat me convient.

    Cependant, je dois maintenant modifier dans une macro le nom de cette liste.

    J'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("Feuill1").Range("B2").Validation.Add Type:=xlValidateList, Formula1:="=INDIRECT(SUBSTITUE(A2;" & Chr(34) & _
                                " " & Chr(34) & ";" & Chr(34) & "_" & Chr(34) & "))"
    J'obtiens une merveilleuse erreur 1004, que je mets sur le compte de la source erronée.

    Comment puis-je contourner ce problème ?

    J'espère avoir été clair dans mes explications.

    Cordialement,

    Mikro.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Il faut écrire la formule selon la syntaxe anglaise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Private Sub Validation()
     
      With Worksheets("Feuil1").Range("B2").Validation
        .Delete
        .Add Type:=xlValidateList, _
             Formula1:="=INDIRECT(SUBSTITUTE(A2,"" "",""_""))"
        .IgnoreBlank = True
        .InCellDropdown = True
      End With
     
    End Sub
    Vérifie le nom de la feuille parce qu'il me semble que tu avais fait une erreur.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut
    Bonjour,

    Merci pour cette réponse rapide.

    Le nom de la feuille n'a pas d'importance, ce n'est pas celui que j'utilise, et je l'ai bien vérifié.

    J'ai modifié la syntaxe pour la remplacer par l'anglaise, et j'ai toujours la même erreur... Je ne comprends pas du tout pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With .Range("B2").Validation
                        .Delete
                        .Add Type:=xlValidateList, _
                             Formula1:="=INDIRECT(SUBSTITUTE(A2,"" "",""_""))"
                        .IgnoreBlank = True
                        .InCellDropdown = True
                    End With
    Cordialement,

    Mikro.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Chez moi ça fonctionne l'erreur est donc ailleurs.

    La liste 'Tous_les_jours' a bien une portée classeur ?
    La cellule A2 contient bien le texte 'Tous les jours' ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut
    La liste a bien une portée classeur, en revanche la cellule A2 était vide.

    Mon problème va donc être le suivant :

    Parfois, la cellule Ax sera vide, néanmoins son contenu pourra changer, et je devrai adapter le contenu de Bx en fonction. En forçant la validation des données dans Excel, je n'ai pas de problème, puisque si Ax est vide, Bx ne me proposera pas de choix.

    Par contre, il semblerait que je ne puisse pas forcer en VBA ?

    Cordialement,

    Mikro.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut
    Re-bonjour,

    J'essaie de rentrer une formule du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(NOT(ISBLANK(A4)),INDIRECT(SUBSTITUTE(A4,"" "",""_"")),"""")
    La formule marche, mais seulement si la cellule n'est pas vide, ce qui, bien entendu, ne m'intéresse pas.

    Dois-je rajouter une valeur spéciale dans le cas où mon IF est à False ?

    Mikro.

Discussions similaires

  1. [XL-2007] écrire ou modifier formule dans DONNEES : validation des données : source.
    Par mistral123 dans le forum Conception
    Réponses: 10
    Dernier message: 23/06/2015, 08h03
  2. Valider des données en VBA
    Par louraluy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/04/2015, 11h41
  3. Réponses: 5
    Dernier message: 01/10/2006, 13h48
  4. [PHP-JS] validation des données
    Par emma des bois dans le forum Langage
    Réponses: 6
    Dernier message: 10/02/2006, 15h28
  5. dbgrid AND validation des données
    Par samlerouge dans le forum Bases de données
    Réponses: 10
    Dernier message: 11/06/2004, 23h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo