1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

Récupérer les valeurs d'une liste dans ComboBox

Discussion dans 'Forum Excel' démarrée par ChristophePT, 12 Octobre 2017 à 13:59.

  1. ChristophePT

    ChristophePT XLDnaute Nouveau

    Inscrit depuis le :
    Jeudi
    Messages :
    9
    "J'aime" reçus :
    0
    Bonjour,

    je suis en train de créer un fichier dont le but sera de créer dynamiquement des scenarii de jeux de test.

    La partie génération du fichier de test à partir des scenarii est faite et fonctionne.

    Je bute sur la création proprement dite des scenarii.

    Mon point de départ est contenu dans la feuille "CreationCopyCobol" dont la dimension en nombre de ligne peut être différente d'un projet à un autre.
    Mon souhait est de récupérer les différents champs de la colonne "D" de cette feuille et de les placer dans une liste qui serait récupérée dans des cellule de type "ComboBox" dans la colonne "D" de le feuille "Conditions" (soit, sous le label "Champ donditionnel").
    En fait, je tente de créer une plage de donnée "nommée" qui contiendrait les valeurs récupérées précédemment et d'affecter cette plage de donnée aux cellules "ComboBox" mais j'obtiens une erreur 1004 lors du passage à cet endroit du code :
    " .Add Type:=xlValidateList, Formula1:="=ListChamp" "

    Le but étant que dans la feuille "Conditions" la personne choisisse le champ qui doit servir à une condition.

    Je voulais mettre ma macro "CommandButton_CreateScenarii_Click" dans le post mais il n'y a pas de balise "hide" ou "code" qui permettrait de réduire la taille du message, donc j'ai uploadé le fichier exemple.

    Si vous pouviez m'indiquer là où je me trompe, ce serait sympa !

    En vous remerciant par avance !

    Bonne journée à tou(te)s
     

    Pièces jointes:

  2. mapomme

    mapomme XLDnaute Barbatruc

    Inscrit depuis le :
    1 Novembre 2011
    Messages :
    4379
    "J'aime" reçus :
    653
    Sexe :
    Masculin
    Habite à:
    Angers
    Utilise:
    Excel 2010 (PC)
    Bonjour ChristophePT,

    Voir un essai dans le fichier. Le code est dans le module de la feuille "Conditions" :
    Code (Visual Basic):
    Private Sub CommandButton_CreateScenarii_Click()
    Dim Dico, x

       Set Dico = CreateObject("Scripting.Dictionary")
       With Sheets("CreationCopyCobol")
          For Each x In .Range("D2:D" & .Cells(.Rows.Count, "d").End(xlUp).Row)
             If Trim(x.Value) <> "" Then Dico(x.Value) = ""
          Next x
       End With

       With Sheets("Conditions").Range("d5:d100").Validation
          .Delete
          .Add Type:=xlValidateList, Formula1:=Join(Dico.Keys, ",")
          Application.Goto .Parent.Range("a1")
       End With
    End Sub
     

    Pièces jointes:

  3. ChristophePT

    ChristophePT XLDnaute Nouveau

    Inscrit depuis le :
    Jeudi
    Messages :
    9
    "J'aime" reçus :
    0
    Bonjour mapomme,

    tout d'abord, je te remercie de t'être penché(e) sur mon problème.

    Je viens de DL ton fichier et de le tester sur mon poste et j'obtiens toujours la même erreur au même endroit (cf. fichier joint)
     

    Pièces jointes:

    • Erreur.png
      Erreur.png
      Taille du fichier:
      33.1 Ko
      Affichages:
      7
  4. mapomme

    mapomme XLDnaute Barbatruc

    Inscrit depuis le :
    1 Novembre 2011
    Messages :
    4379
    "J'aime" reçus :
    653
    Sexe :
    Masculin
    Habite à:
    Angers
    Utilise:
    Excel 2010 (PC)
    Re,

    J'ai téléchargé mon fichier et aucune erreur ne se produit...

    Peut on savoir sur quelle ligne ou instruction l'erreur se produit sur votre PC ?
     
  5. ChristophePT

    ChristophePT XLDnaute Nouveau

    Inscrit depuis le :
    Jeudi
    Messages :
    9
    "J'aime" reçus :
    0
    Désolé de ne répondre que maintenant ... transport en commun ...

    Le plantage s'effectue au niveau de la ligne suivante :
    .Add Type:=xlValidateList, Formula1:=Join(Dico.Keys, ",")

    Si cela peut aider, la version Excel utilisée est la 2007.
     
  6. Si...

    Si... XLDnaute Barbatruc

    Inscrit depuis le :
    7 Octobre 2010
    Messages :
    2574
    "J'aime" reçus :
    387
    Bon_soir

    mapomme, pas de problème avec ta proposition ;) .

    Un autre code à tester

    Code (Visual Basic):
    Private Sub CommandButton_CreateScenarii_Click()
      Dim D, C As Range, Lst As String
      Set D = CreateObject("Scripting.Dictionary")
      For Each C In Feuil5.Range("D2", Feuil5.[D10000].End(xlUp))
      D(C.Value) = "": Lst = Lst & C & ","
      Next
      With [D5].Validation    'première liste
      .Delete
      .Add 3, Formula1:=Lst
      End With
      [D5].Copy [D6:D100]   'autres listes
    End Sub
    (si… problème, c'est le reste qu'il faut revoir)

    Voici une autre proposition : remplacer les Listes de validation par une Liste déroulante (ActiveX). Ne pas oublier de l'initialiser avec le bouton prévu pour cela !
     

    Pièces jointes:

    mapomme aime votre message.
  7. mapomme

    mapomme XLDnaute Barbatruc

    Inscrit depuis le :
    1 Novembre 2011
    Messages :
    4379
    "J'aime" reçus :
    653
    Sexe :
    Masculin
    Habite à:
    Angers
    Utilise:
    Excel 2010 (PC)
    Re,

    Peux tu joindre le fichier qui plante ?
     
  8. ChristophePT

    ChristophePT XLDnaute Nouveau

    Inscrit depuis le :
    Jeudi
    Messages :
    9
    "J'aime" reçus :
    0
    Bonjour @mapomme et tout le monde,

    je veux bien re-UL le fichier qui plante mais c'est celui qui se trouve dans mon premier message et également celui que j'ai DL de ton message.

    Cependant, de plus amples détails :
    - hier je testais depuis une version Excel 2007 installée sur mon poste de travail au boulot !
    - ce matin, je viens de DL ton fichier d'hier à 11h56 sur mon poste familial qui dispose d'une version Excel 2007 également et cela fonctionne !!

    Du coup, j'ai re-DL mon propre fichier du premier message et tenté de le faire tourner : sans succès.

    J'ai adapté mon code à tâtons avec vos propositions et la seule modification importante a été de remplacer la boucle "FOR RowInd" par "With Sheets("Conditions").Range("d5:d100").Validation" pour le faire tourner !

    Voici ce que j'ai désormais :

    Code (Visual Basic):
       
    'For RowInd = 5 To 100
         '   With ActiveWorkbook.Worksheets("Conditions").Cells(RowInd, 4)
                With Sheets("Conditions").Range("d5:d100").Validation
                    .Delete
                    ' L'une ou l'autre des 2 lignes .Add fonctionne parfaitement
                    .Add Type:=xlValidateList, Formula1:="=" & FeuilPlage
                    '.Add Type:=xlValidateList, Formula1:=Join(MonDicoDescChamp.Keys, ",")
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = ""
                    .ErrorMessage = ""
                    .ShowInput = True
                    .ShowError = True
                End With
          '  End With
        'Next RowInd
    La question désormais est : y a t'il des options d'Excel 2007 qui seraient actifs (autorisation d'action) ou inactifs (donc baisse de protection) sur mon poste "Familial" et qui seraient paramétrés différemment sur mon poste "Boulot" ? Par exemple au niveau des "Références du VBA ?
    En PJ mon paramétrage "PC Familial".
     

    Pièces jointes:

  9. mapomme

    mapomme XLDnaute Barbatruc

    Inscrit depuis le :
    1 Novembre 2011
    Messages :
    4379
    "J'aime" reçus :
    653
    Sexe :
    Masculin
    Habite à:
    Angers
    Utilise:
    Excel 2010 (PC)
    Re,

    Si la plage comporte des doublons, alors Dico.keys ne comportera aucun doublon contrairement à FeuilPlage. En général, les liste de validation ne comportent pas de doublon mais rien n’empêche d'en mettre.
     
  10. ChristophePT

    ChristophePT XLDnaute Nouveau

    Inscrit depuis le :
    Jeudi
    Messages :
    9
    "J'aime" reçus :
    0
    oups ! désolé, le message précédent n'était pas terminé ... je voulais faire une "prévisu" de celui-ci mais je l'ai envoyé ... Boulet !

    En tout cas, merci encore pour vos efforts :)

    Je pense que la suite désormais est de vérifier lundi si j'ai les mêmes références VB sur mon PC "Boulot".

    Si vous avez des idées de paramétrage ou options à activer/désactiver ...
     
  11. ChristophePT

    ChristophePT XLDnaute Nouveau

    Inscrit depuis le :
    Jeudi
    Messages :
    9
    "J'aime" reçus :
    0
    @mapomme :

    merci de ta précision, j'utiliserai donc "MonDicoDescChamp.Keys" au lieu de "FeuilPlage" préférentiellement.
     
  12. ChristophePT

    ChristophePT XLDnaute Nouveau

    Inscrit depuis le :
    Jeudi
    Messages :
    9
    "J'aime" reçus :
    0
    Bonjour,

    après avoir récupéré le fichier de mon PC familial et l'avoir installé sur mon PC de boulot, j'ai de nouveau l'erreur 1004 sur la ligne
    Code (Text):
    .Add Type:=xlValidateList, Formula1:=Join(MonDicoDescChamp.Keys, ",")
    J'ai vérifié les Références de VBA. Ce sont les mêmes que celles chez moi.
    Au niveau des paramètres de Macros/ActiveX, tout est sur "Activer" ...

    Je ne vois pas où chercher pour expliquer la différence de comportement entre ces deux Excel 2007.

    Auriez-vous une piste, svp ?
     
  13. ChristophePT

    ChristophePT XLDnaute Nouveau

    Inscrit depuis le :
    Jeudi
    Messages :
    9
    "J'aime" reçus :
    0
    Hello !

    finalement, j'ai trouvé une solution !

    J'ai :
    - remplacé mon Bouton de Contrôle Active X par un Bouton de Contrôle de Formulaire,
    - renommée la macro en supprimant le "_Click",
    - placé cette macro dans un Module,
    - affecté cette macro au Bouton.

    Je ne m'explique pas cette différence de comportement mais ça fonctionne !

    Merci à tous de votre aide !

    Bonne fin de journée !
     

Partager cette page