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 :

Erreur dans macro Donnée/Validation [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Par défaut Erreur dans macro Donnée/Validation
    Bonjour à toutes et à tous,

    Je suis en train de faire une mise en forme d'une feuille "masque de saisie" via des macros excel et malgré les nombreuses recherches, je n'ai pas réussi à trouver de solution à mon problème ...

    J'ai nommé plusieurs plages de données qui sont sur une autre feuille.

    Dans ma cellule A1 de ma feuille 'masque de saisie' j'ai mis une validation de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Range("A1").Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=Liste1"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = True
        End With
    Jusque là tout fonctionne.
    La liste de validation de la cellule B1 dépend de la valeur dans A1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       Range("B1").Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=Indirect(A1)"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = True
        End With
    Et là, l'erreur arrive.

    J'ai tenté de faire la même manipulation avec l'enregistreur de macro, il me sort le même code, et lorsque j'exécute la macro nouvellement enregistrée, l'erreur arrive au même endroit ...

    J'ai tenté du coup à la main, et Excel m'affiche une boîte de dialogue :

    "La source est reconnu comme erronée. Voulez vous continuer ?"

    Avez-vous une idée de comment résoudre/contourner ce problème ?

  2. #2
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour

    et comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=" & [A1]"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = True
        End With
    mais je pense à une chose plutot

    lorsque que tu fait cela
    il essaye d'évaluer la formule, mais à cet instant précis, la première liste est vide
    donc indirect lui renvoie une erreur.

    tu devrais essayer de remplir une référence dans la première cellule avant de créer la liste de validation dans la deuxième je pense.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Par défaut
    Oui, c'est un contournement auquel j'ai pensé :

    Rajouter une ligne, remplir A1, B1, C1, etc.
    et faire mes validations par la suite, recopier vers le bas et supprimer cette ligne à la fin.

    Ca fait un peu bidouille et j'espérais contourner le problème autrement.

    Merci mayekeul pour ta réponse, si quelqu'un à mieux à proposer, je suis preneur !!!

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut SkååL et le forum
    des remarques en passant :
    Tu recherches une solution d'un code dont tu sais qu'il ne fonctionne pas comme tu le voudrais. Et ce code, est celui fournit par Excel, mais ne renvoie qu'une erreur.
    - Que renvoie excel quand tu fais manuellement tes manips ?
    - D'après ce que je lis, ta première liste contient des noms de listes que tu veux utiliser dans ta seconde. Est-ce ça ?
    - Comment lances-tu le code de ta seconde macro (ou/et quand) ?

    Même si quelques fois certains font de véritables miracles, Excel ne marche ni à l'intuition, ni à la boule de cristal. Pour un dépannage, il faut comprendre exactement le problème et le but. Ce qui est évident ne l'est que pour celui qui à le problème, le fichier, les données... pas pour le dépanneur qui a sa propre méthode de travail !
    A+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Par défaut
    Alors ! Je vais tenter de préciser un peu mon problème.

    Je souhaite faire une feuille qui se met en forme automatiquement.

    Donc le code est situé dans la partie "Thisworkbook"
    dans une macro "Private Sub Workbook_open()".

    Je souhaite mettre dans la cellule A1 une validation de données par liste avec comme formule "=Liste1".

    Cette Liste1 est une plage de donnée avec comme nom Liste1 située dans une autre feuille de mon classeur.

    Je souhaite insérer dans la cellule B1 une validation de données par liste dépendante de la valeur de A1.

    => J'ai bien entendu fait autant de listes que de valeurs dans la Liste1

    Explication (ce n'est pas mon code, juste les valeurs dans la liste) :

    Liste1 : Alpha, Bravo, Charlie, Delta

    J'ai créé une liste nommée Alpha, une liste Bravo, etc... contenant une plage de donnée associée.

    Du coup, dans mon classeur, je me retrouve avec 5 listes au total.

    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Range("A1").Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=Liste1"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = True
        End With

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       Range("B1").Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=Indirect(A1)"
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = True
        End With

    Lorsque je lance la macro (cqfd ouvre mon classeur), la macro s'arrête et excel m'alerte avec la fameuse erreur d'exécution '1004' Erreur définie par l'application ou par l'objet.

    Lorsque je fais la même manipulation à la main, Excel m'ouvre une boîte de dialogue avec marqué : "La source est reconnu comme erronée. Voulez vous continuer ?".

    En validant, j'ai le résultat que je souhaite, mais via macro, ça bloque.
    Si la cellule A1 contient une des valeurs Alpha, Bravo, Charlie ou Delta, celle-ci se déroule sans encombre.

    Ma requête ici est de savoir s'il existait un moyen autre que de remplir les cellules via macro, de mettre en forme les validation par macro toujours et ensuite d'effacer juste le contenu ?

    J'espère avoir tout détaillé et été plus clair sur ma demande.

    Merci à ceux qui réfléchissent et prennent du temps sur ce problème !

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Open()
    With Sheets("Feuil1")
        With .Range("A1").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=Liste1"
        End With
    End With
    End Sub
    et dans module feuil1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        With Range("B1").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                 xlBetween, Formula1:="=" & Target.Value
        End With
    End If
    End Sub

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut SkååL et le forum
    Hormis le fait que je vois pas très bien la nécessité de redéfinir la liste de validation de A1 (il faudra penser à effacer la valeur de A1), Mercatog te propose une solution : la liste en B1 n'a aucune raison d'exister si la cellule A1 n'est pas renseignée (penser à faire une vérification de A1 non vide).
    Si tu change A1, Excel trouve une valeur qui lui sert de référence pour sa liste.
    A+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Par défaut
    Bonjour !

    Rapidité, efficacité et très grande utilité !

    Un très grand merci à mercatog, Gorfael et mayekeul pour vos réponses et avoir passé du temps sur mon problème et un encouragement à tous les autres qui aident sur ce forum !

    Et ça fait un [résolu] +1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Message d'erreur dans macro
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/11/2010, 08h11
  2. Erreur dans macro programme
    Par 8twilight8 dans le forum Macro
    Réponses: 5
    Dernier message: 04/05/2009, 11h53
  3. [AS/400] Erreur dans une donnée décimale
    Par mehdi501 dans le forum Cobol
    Réponses: 40
    Dernier message: 21/05/2008, 15h51
  4. Réponses: 2
    Dernier message: 28/12/2007, 11h23

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