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 :

Problème listes déroulantes


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Coordinateur Logistique
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Coordinateur Logistique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut Problème listes déroulantes
    Citation Envoyé par graphikris;
    Vas voir ici dans le menu listes déroulantes :
    Hello Graphikris, je viens de jeter un oeil à l'URL que tu as laissé .. et ca correspond à ce que j'avais besoin aussi ...
    Seul bémol, quand j'ai appliqué dans mon cas, j'ai une erreur :

    Lorsque je selectionne la première valeur du menu déroulant il m'indique : "L'indice n'appartient pas à la sélection"
    Et il surligne la partie de code suivant : "If choix1(i) = Condition Then"
    Code faisant partie de la "Private Sub ComboBox1_Change()"

    Aurais tu un filon à me donner ? une piste ? ou tout ce qui pourrait m'être utile ^^

    Merci
    Bonne journée!

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour.

    Notre faq possède plusieurs Q/R sur les listes déroulantes... https://excel.developpez.com/faq/?page=ListeValidation

  3. #3
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 865
    Points
    3 865
    Par défaut
    Hello,
    Non seulement, il y a de la lecture mais en plus, il y a un forum 'Macro et VBA excel'. Tu risques, après lecture, d'y avoir plus de réponses.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Coordinateur Logistique
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Coordinateur Logistique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Hello Pierre

    Dans mon cas il ne s'agit pas d'un problème de menu déroulant quoi que cela pourrait répondre à mon besoin.
    Il s'agit un problème de VBA : faire apparraitre une box lorsque je clique dans une plage de cellule afin de remplir 2 champs dont un dépend de l'autre.

    Bonne journée

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Comme tu t'étais greffé sur une discussion parlant de listes déroulantes, j'ai cru que tu avais un problème de... listes déroulantes

    Pourrais-tu donner le code complet de Combobox1_Change?

    Ca évitera de jouer aux devinettes...

  6. #6
    Membre à l'essai
    Homme Profil pro
    Coordinateur Logistique
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Coordinateur Logistique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Ah pardon c'est de ma faute désolé

    Oui bien sur, je te mets le code complet associé, avec en rouge l'erreur que j'ai.
    Pour info j'ai récupéré le code dans le forum
    Et j'ai sélectionné "DVConditionSaisieIntuitiveForm"

    Sinon voilà le code rattaché à la feuille principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect([ak2:ak999999], Target) Is Nothing And Target.Count = 1 Then
      UserForm1.Left = Target.Left - 700
      UserForm1.Top = Target.Top + 300 - Cells(ActiveWindow.ScrollRow, 1).Top
      UserForm1.Show
    End If
    End Sub


    Puis le code rattaché à ma userform1, qui n'est autre qu'une box avec PAYS, FOURNISSEUR, OK et une croix pour fermer.



    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
    Dim TblChoix2(), choix1(), choix2()
    --------------------------------------------------------------------------
    Private Sub Label1_Click()
    
    End Sub
    -------------------------------------------------------------------------
    Private Sub UserForm_Initialize()
      choix2 = Application.Transpose(Range("paysfournisseurs"))
      choix1 = Application.Transpose(Range("pays"))
      Set d1 = CreateObject("Scripting.Dictionary")
      For Each c In choix1
        d1(c) = ""
      Next c
      Me.ComboBox1.List = d1.keys
    End Sub
    -----------------------------------------------------------------------------
    Private Sub ComboBox1_Change()
        Condition = Me.ComboBox1
        If Condition = "" Then Exit Sub
        ligne = 0
        ReDim TblChoix2(1 To UBound(choix2))
        For i = LBound(choix2) To UBound(choix2)
          If choix1(i) = Condition Then ligne = ligne + 1: TblChoix2(ligne) = choix2(i)
        Next i
        ReDim Preserve TblChoix2(1 To ligne)
        Me.ComboBox2.List = TblChoix2
        Me.ComboBox2.SetFocus
        On Error Resume Next
        SendKeys "{f4}"
    End Sub
    --------------------------------------------------------------
    Private Sub ComboBox2_Change()
      Set d1 = CreateObject("Scripting.Dictionary")
      tmp = UCase(Me.ComboBox2) & "*"
      For Each c In TblChoix2
         If UCase(c) Like tmp Then d1(c) = ""
      Next c
      Me.ComboBox2.List = d1.keys
      Me.ComboBox2.DropDown
    End Sub
    ----------------------------------------------------------
    Private Sub CommandButton1_Click()
      ActiveCell = Me.ComboBox1
      ActiveCell.Offset(, 1) = Me.ComboBox2
      Unload Me
    End Sub

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    C'est le problème quand quelqu'un te renseigne un autre site que DVP, que tu vas y pêcher du code (sans personne pour t'aider derrière) et que tu reviens ici avec un code malfoutu que tu dois adapter à ton cas.

    Déjà, ce code lie trop le userform au contexte dans lequel on l'utilise (c'est aberrant d'utiliser des plages nommées dans l'initialize du userform, ça t'oblige à devoir adapter le userform à ton contexte, ce qui est une mauvaise pratique de programmation et qu'en plus, je me demande bien à quoi Initialize peut bien servir dans un userform )

    Cela étant dit, le problème que tu rencontres est provoqué par le fait que tu tentes d'arriver sur la ligne i du tableau choix1 alors que celui-ci ne contient pas de ligne i. Dès lors, il faut vérifier que tes variables choix1 et choix2 contiennent bien ce qu'elles doivent contenir. Lorsque le code s'arrête sur la ligne que tu mentionnes, tu peux regarder ce qu'il y a dans tes variables via la fenêtre des variables locales. Par exemple, si i vaut 3, tu dois avoir dans choix1 une ligne mentionnée choix1(3). Tes plages "pays" et "paysfournisseurs" sont-elles correctement remplies?

    Le code que tu donnes boucle entre les bornes de choix2 et utilise le i qui voyage entre ces bornes pour pointer vers la même ligne en choix1. A toi de voir si c'est cohérent.

    Question: Comprends-tu le code que tu as été cherché? C'est la base car sans cela, je ne vois pas comment tu pourrais l'adapter à ta situation de façon adéquate.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Coordinateur Logistique
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Coordinateur Logistique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Je le comprends un peu mieux maintenant oui, cette histoire de i me déranger, de même que les notions de keys qu'on retrouve dans le code.
    Sinon je comprends en effet le principe de fonctionnement, je n'aurai juste jamais été capable de le trouver par moi même.

    Maintenant être capable de dire que ce code n'est pas écrit correctement .. je ne sais pas mais peut être peux tu m'aider à être meilleur pour qui sait un jour réussir à me débrouiller

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par alexc88 Voir le message
    [...]je ne sais pas mais peut être peux tu m'aider à être meilleur pour qui sait un jour réussir à me débrouiller
    Oui, c'est pour cela que je t'ai expliqué la manoeuvre à suivre. Lorsque le code s'arrête sur une ligne en jaune, tu regardes la valeur des variables locales (affiche éventuellement la fenêtre des variables locales via le menu d'affichage et regarde ce qu'il y a dans tes tableaux Choix1 et Choix2. Tu cliques sur le + à gauche du nom des tableaux.

    Tu as deux plages: Pays et PaysFournisseurs (renseignées dans Initialize. Qu'y-a-til dans ces plages? Peux-tu les montrer?
    A priori, il doit y avoir le même nombre de lignes dans les deux listes, au vu de la boucle sur les bornes de choix2.

    Je passe sur le fait qu'apparemment, Option Explicit n'est pas placé en début de module (d'où sortent le c de For each c in choix1, le Condition... mystère et boule de gomme), que les contrôles ne sont pas renommés, ...

    PS: Je ne t'en veux pas d'être allé chercher un code ailleurs, mais je constate une fois de plus qu'on va chercher un code ailleurs où l'aide est quasi inexistante, puis qu'on vient ici pour réparer les bobos... C'st pas grave, on a l'habitude

    Tiens, avant d'aller plus loin: Que cherches-tu à réaliser avec tes listes déroulantes?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Coordinateur Logistique
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Coordinateur Logistique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    J'ai compris mon erreur car d'une part j'avais sélectionné le mauvais nom ce qui provoqué une erreur de range non connu ..
    De ce fait mon fameux i ne trouvait pas les bonnes valeurs. Double peine mais cela fonctionne.
    Bémol .. j'ai l'impression que cela alourdi mon document.

    En fait, je réalise actuellement une aide à laisie de produit pour des acheteuses.

    j'importe des données dans un fichier excel à part via oracle.
    Dans mon fichier d'achat je rafraichi les données en faisant un copie/colle de la source.
    Dans ce fichier dédié à l'acheteuse j'ai donc un onglet (masqué et protégé) source de données dans lequel j'ai une liste de PAYS et une liste de FOURNISSEUR associée.
    Dans l'onglet disponible pour l'acheteuse pouvoir faire sa feuille de route, on retrouve X infos dont un moment donné une colonne avec le pays et le fournisseur dans lequel l'acheteuse va réalisé son achat.
    Mon souhait : sélectionner le pays (liste des valeurs pays) et avoir dans la seconde une liste ne donnant que les fournisseurs rattachés à ce pays, en ayant la possibilité de taper les premières lettres du nom du fournisseurs car certains pays ont malgré tout une liste importante de données.

    Est ce clair pour toi ?

    Je vais prendre de bonnes habitudes promis quand on confond vitesse et précipitation ..

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Je vais te proposer ma solution (exemple avec pays et localités, à adapter)

    Je pars du principe que tu as une liste des pays et une liste des paires pays/fournisseur dans deux tableaux structurés Excel séparés (ça peut être des plages nommées, mais c'est mieux les tableaux structurés et les lignes qui trient les données dans la fonction utilisent les références structurées)
    Dans le userform, deux combobox appelés cboCountries et cboCities et un bouton appelé btnValidate

    Dans le module du userform, tu places le code suivant
    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
    Option Explicit
     
     
    Public Choice As String
    Private mCities()
     
    Property Let Cities(Value)
      mCities = Value
    End Property
     
    Private Sub btnValidate_Click()
      Choice = "Validate"
      Me.Hide
    End Sub
     
    Private Sub cboCountries_Change()
      PrepareCities
    End Sub
     
    Property Let Countries(Value)
      cboCountries.List = Value
    End Property
     
    Sub PrepareCities()
      Dim Counter As Long
      cboCities.Clear
      For Counter = LBound(mCities) To UBound(mCities)
        If mCities(Counter, 2) = cboCountries.Value Then cboCities.AddItem mCities(Counter, 1)
      Next Counter
    End Sub
    Dans un module standard, tu as la fonction suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function ChoiceCity() As String
      ' Tri des données
      Range("t_Pays").Sort key1:=Range("t_Pays"), order1:=xlAscending, Header:=xlYes
      Range("t_Villes").Sort key1:=Range("t_Villes[Pays]"), key2:=Range("t_Villes[Ville]"), Header:=xlYes
      With usrChoiceCity
        .Countries = Application.Transpose(Range("t_Pays[Pays]"))
        .Cities = Range("t_Villes").Value
        .Show
        If .Choice = "Validate" Then ChoiceCity = .cboCities.Value
      End With
      Unload usrChoiceCity
    End Function
    Cette fonction renvoie soit la localité choisie, soit une chaine vide si on a fermé sans cliquer sur validate.

    Normalement, le code se lit facilement. Tu verras que ton userform n'est pas couplé à Excel. Tu dois juste lui passer les tableaux remplis avant de l'afficher. J'ai mis le fichier exemple en pj.

    Teste, étudie le code et reviens si pb...
    Fichiers attachés Fichiers attachés

  12. #12
    Membre à l'essai
    Homme Profil pro
    Coordinateur Logistique
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Coordinateur Logistique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Bonjour Pierre,

    En effet je comprends bien le code et la manière dont il travaille mais je suis dans l'incapacité de le réaliser moi même :/
    Malheureusement je m'auto forme en fonction des opportunités de travaux que je peux avoir ..

    J'ai bien vu en effet que tout était paramétré dans ta feuille mais je suis incapable de faire ce que tu me conseilles sur le fait de raccrocher le userform à ma feuille ..

    A tu des explications complémentaires pour m'aiguiller .. j'aimerai tellement savoir me débrouiller seulement c'est bien trop complexe .. et je me suis lancé dans un projet complexe mais je vais essayer d'arriver au bout

Discussions similaires

  1. Réponses: 13
    Dernier message: 01/06/2007, 14h02
  2. [Windows 2000 / XP] Problème listes déroulantes
    Par Invité(e) dans le forum Windows XP
    Réponses: 8
    Dernier message: 04/05/2007, 11h21
  3. Problème liste déroulante restreinte
    Par floriemor dans le forum Access
    Réponses: 6
    Dernier message: 11/07/2006, 14h44
  4. [presque résolu]Probléme liste déroulante
    Par jojo57 dans le forum Access
    Réponses: 5
    Dernier message: 21/04/2006, 11h57

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