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 :

VBA - Liste de choix - DECALER


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut VBA - Liste de choix - DECALER
    Bonjour,

    Je vous écris concernant une erreur VBA que je recontre, lors de la création par une macro d'une liste de choix déroulante.

    Explication :
    Je commence l'enregistrement de ma macro, je vais successivement dans :
    Données / validation des données /
    Dans l'onglet Options, j'autorise Liste, et dans la textbox Source, je met le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(Feuil2!A1;1;0;3;1)
    La liste est bien créée, et est fonctionnelle.

    J'arrête l'enregistrement de ma macro, le code source suivant à été généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Macro5()
    '
    ' Macro5 Macro
    '
     
    '
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    End Sub
    Sans rien changer au code généré par Excel, je sélectionne une autre cellule, et je lance ma macro.
    J'obtiens alors une belle erreur :
    Erreur d'exécution '1004':
    Erreur définie par l'application ou par l'objet
    Je clique sur "débogage", et la ligne en cause est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)"
    Alors que ce code a lui même été généré par Excel !

    Après des heures de recherche, j'ai essayé de remplacer DECALER par OFFSET, ça ne marche pas.

    J'ai aussi essayé cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Selection.Validation.Delete 
    Selection.Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)"
    Qui ne fonctionne pas non plus...

    Par contre, en remplaçant la ligne en cause par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=A1:C1"
    ,
    Alors là ça fonctionne, donc le problème doit venir de ma formule.

    Mais je ne vois pas d'où, car quand je met la même formule dans la source de Données de validation, sans passer par une macro, la formule fonctionne parfaitement.

    Ce qui ne va pas, c'est l'utilisation de la formule, au sein du VBA.

    J'en perd mon latin, merci de m'aider !

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut et bienvenu
    Ton erreur vient de l'utilisation de Feuil2! dans la formule de la validation, une validation ne peut faire appelle a une autre feuille que celle ou elle se trouve.

    Tu as 2 choix
    Soit tes données sont sur la meme feuille ou tu mets ta validation et alors il te suffit de supprimer Feuil2! de ta formule.

    Soit tes données sont sur une autre feuille, si c'est la cas il te faut d'abord créer une etiquette (Insertion -> Nom -> Créer) avec la formule suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(Feuil2!A1;1;0;NB.SI(Feuil2!$A:$A;"<>")-1;1)
    (tu peut le faire via du code bien sur, je te laisses regarder avec l'enregistreur)
    Puis lors de la création de ta validation tu fais référence a cette étiquette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=LeNomDeTonEtiquette)"

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre averti
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Par défaut
    L'utilisation de différentes feuilles est correcte.
    Mais merci tout de même pour la réponse !

    Par contre j'avais essayé de mettre offset au lieu de décalage, mais je ne savais pas que les formules en anglais attendent des virgules au lieu des point virgules !
    il faut donc mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=offset(Feuil2!A1,1,0,3,1)"
    à la place de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=DECALER(Feuil2!A1;1;0;3;1)"
    Résolu !

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut
    En effet j'ai dis une bêtise, il faut en effet utiliser la formule anglaise, mais par contre quelle version d'Excel utilises tu? parce que j'utilise excel 2003 et il n'est pas possible dans une validation de faire référence a une autre feuil?
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. [VBA-E]Liste a choix multiple ?
    Par Vince_93700 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/04/2007, 16h58
  2. [VBA-E] Comment créer un control sur une liste de choix ?
    Par Soulsurfer dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2007, 12h42
  3. [vba-e] Liste de choix dans ComboBox
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/07/2006, 15h53
  4. [VBA] Pas de choix dans liste deroulante = ALL
    Par hugo69 dans le forum Access
    Réponses: 4
    Dernier message: 04/05/2006, 12h03
  5. [VBA-E]Liste de choix
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/03/2006, 15h04

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