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 :

Liste Déroulante Limite de Paramètres


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Par défaut Liste Déroulante Limite de Paramètres
    Bonsoir,

    En programmant, je me suis heurté à un problème intéressant mais embêtant.

    Je crée des listes déroulantes à partir d'une base de données de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'chainea été définie plus tôt au format string
      With selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertWarning, Operator:= _
                 xlBetween, Formula1:=chaine
            End With
    Ce code ne pose aucun problème quand "chaine" ne comporte pas un nombre de données trop importantes. Mais disons que je veuille insérer le nom de 100 villes, là ça ne passe plus.
    J'ai testé sur excel, les listes déroulantes sur un excel, elles prennent sans problème une centaine de paramètres.
    Alors ma question est, le problème est que la variable est trop grande pour du format String? Cela m'étonnerait puisque j'ai lu qu'un string pouvait contenir jusqu'à 2milliards de caractères, et je ne pense pas dépasser les 1500.

    Une autre hypothèse, il y a une limite dans la version VBA et j'imagine qu'il doit y avoir un moyen de la contourner.

    Si vous avez une solution, je suis très curieux car cela me bloque. Je précise que le code s'exécute correctement mais je n'ai aucune liste déroulantes dans ce cas.

    Je vous remercie encore une fois par avance.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Je pense que ce n'est pas un problème VBA mais un problème Excel. Tu as du atteindre la limite du nombres de caractères que l'on peut mettre dans une formule Excel (de mémoire, je crois que ça tourne autour de 450 caractères).

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Par défaut
    Ah effectivement ça doit être ça, imaginons que j'essaye de contourner le problème en créant des listes sur un fichier excel, de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set plage= xlSheet1.Range(xlSheet1.Cells(100, J + 1), xlSheet1.Cells(3, J + 1))
             plage.Name = "Dep"
            Sheets(Requete_Export).Activate
            Set percel = XlBook.ActiveSheet.Cells(3, J + 1)
            Set dercel = XlBook.ActiveSheet.Cells(3, J + 1).End(xlDown)
            Set selection = XlBook.ActiveSheet.Range(percel, dercel)
            selection.Select
            With selection.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertWarning, Operator:= _
                xlBetween, Formula1:="=Dep"
            End With
    Je veux qu'à chaque J de ma boucle ma liste soit actualisé, et je ne sais pas pourquoi avec cette méthode ce n'est pas le cas. ça me met toujours la liste du premier J, avez vous une solution?

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Il faudrait au moins que tu mettes la boucle qui incrémente le "J" dans le code que tu montres.

  5. #5
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour GreatTeacherOnizuka

    Ton erreur est causée par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set selection = XlBook.ActiveSheet.Range(percel, dercel)
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set sel = XlBook.ActiveSheet.Range(percel, dercel)
     
            With sel.Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertWarning, Operator:= _
                xlBetween, Formula1:="=Dep"
            End With

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 69
    Par défaut
    Non ça me donne le même résultat, on se retrouve avec des listes déroulantes qui ont toutes les mêmes membres, je viens de faire un test ma sélection est la bonne.

    Enfin vous me proposiez juste de changer mon mot selection en sec, si j'ai bien compris?

    Merci

    Je viens de regarder de nouveau en fait, c'est la dernière liste qui est gardée, ce qui est assez logique. Puisque "Dep" n'est pas dynamique, il faut que j'arrive à faire avec des noms différents, du style tableau et encore je ne suis pas sûr que ça va marcher.

  7. #7
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par GreatTeacherOnizuka Voir le message
    Je viens de regarder de nouveau en fait, c'est la dernière liste qui est gardée, ce qui est assez logique. Puisque "Dep" n'est pas dynamique, il faut que j'arrive à faire avec des noms différents, du style tableau et encore je ne suis pas sûr que ça va marcher.
    Avec des noms différents,tu créerais des champs différents et ça devrait marcher mieux qu'en utilisant toujours le champs "Dep" en effet.

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

Discussions similaires

  1. PopUp liste déroulant limité à 255 entrées?
    Par stephane46 dans le forum 4D
    Réponses: 3
    Dernier message: 09/03/2009, 17h22
  2. Formulaire et liste déroulante limitée
    Par sat478 dans le forum Word
    Réponses: 0
    Dernier message: 22/11/2007, 10h41
  3. Gestion de 5 listes déroulantes liées avec paramètres SQL
    Par kenshir0 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 06/04/2007, 18h46
  4. Réponses: 5
    Dernier message: 13/10/2005, 10h19
  5. Liste déroulante limitée en fonction d'un choix...
    Par Gabrielle dans le forum Access
    Réponses: 7
    Dernier message: 28/09/2005, 14h54

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