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 :

créer mes listes déroulantes en cascade via VBA


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
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut créer mes listes déroulantes en cascade via VBA
    bonjour,

    suite au post précédent j'en créai un autre pour la création des mes 3 listes déroulantes en cascade en VBA

    il me donne un code panne erreur 1004 erreur definie par l'application ou par l'objet alors qu'elle fonctionne très bien quand je les créai à la main.

    je vous donne mon code simplifié:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
     
                'première validation de données avec saisie semi_automatique
                Range("B" & 15 + x).Select
                With Selection.Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:= _
                    "=IF(B" & 15 + x & "<>"""",OFFSET(l_jeandot,MATCH(B" & 15 + x & " & ""*"",l_jeandot,0)-1,,COUNTIF(l_jeandot,B" & 15 + x & " & ""*""),1),l_jeandot)" 
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = ""
                    .ErrorMessage = ""
                    .ShowInput = True
                    .ShowError = False
                End With
     
     
               '2eme liste déroulante faisant référence à la première
               Range("C" & 15 + x).Select
                With Selection.Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:= _
                    "=OFFSET(cel_prenom,MATCH($B$" & 15 + x & ",l_jeandot,0),,COUNTIF(l_jeandot,$B$" & 15 + x & "))" 
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = ""
                    .ErrorMessage = ""
                    .ShowInput = True
                    .ShowError = False
                End With
     
              ' et la troisième liste déroulante qui fait référence au 2 premières.
              Range("F" & 15 + x).Select
                With Selection.Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:= _
                    "=OFFSET(cel_nationalite,MATCH(1,(l_jeandot=B" & 15 + x & ")*(l_jeandot_p=C" & 15 + x & "),0),,COUNTIF(l_jeandot_p,C" & 15 + x & "))"
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = ""
                    .ErrorMessage = ""
                    .ShowInput = True
                    .ShowError = False
                End With
    Il me sort comme erreur: erreur 1004 erreur définie par l'application ou par l'objet

    Quand je fais la première liste à la main, comme en VBA ça marche, pas de soucis.



    par contre c'est à la 2ème que ça bloque. à la main elle me sors quand la 1ère liste est vide: erreur de la source est reconnu comme erroné. vous vous continuer? si je clicl oui ca marche quand même
    Alors que je n'ai pas cette erreur si ma première liste est remplie. donc je suppose que ça vient de là mais je ne sais pas faire.

    et par le code VBA il me sort: erreur 1004 erreur definie par l'application ou par l'objet



    quand à la troisième, je n'arrive pas jusque là en VBA mais je pense que le résultat sera le même car, à la main, le résultat est le même.


    quelqu'un aurai une idée?
    il n'y aurai pas, un .errorformula = false dans la selection.validation pour surpasser le code erreur?
    merci par avance.

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, à voir

  3. #3
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 40
    Par défaut
    merci de ta réponse.

    Alors j'y arrive moi aussi par un:

    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
    21
    22
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
       If [B15] <> "" Then
            Worksheets("Element").Unprotect
            Range("C" & 15 + x).Select
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:= _
                "=OFFSET(cel_prenom,MATCH($B$" & 15 + x & ",l_jeandot,0),,COUNTIF(l_jeandot,$B$" & 15 + x & "))"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = False
            End With
            Worksheets("Element").Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
        End If
    cela marche même très bien mais comme ma page varie selon une varie globale et que cela doit être actif que si la variable = x et non y j'aurai aimé que cela ne soit pas active non stop.

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

Discussions similaires

  1. [XL-2013] Créer une liste déroulante de choix alimentée via un fichier texte
    Par arnaudperfect dans le forum Excel
    Réponses: 2
    Dernier message: 14/11/2014, 16h36
  2. [XL-2007] Créer une liste déroulante dans une cellule avec vba
    Par destroyed dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/07/2014, 09h19
  3. Réponses: 5
    Dernier message: 21/06/2012, 14h22
  4. Réponses: 3
    Dernier message: 06/05/2011, 11h30
  5. [XL-2003] Créer une liste déroulante par VBA
    Par lil404 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/05/2009, 17h17

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