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

ChristophePT

XLDnaute Nouveau
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
 

Fichiers joints

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour ChristophePT,

Voir un essai dans le fichier. Le code est dans le module de la feuille "Conditions" :
VB:
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
 

Fichiers joints

ChristophePT

XLDnaute Nouveau
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)
 

Fichiers joints

ChristophePT

XLDnaute Nouveau
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.
 

Si...

XLDnaute Barbatruc
Bon_soir

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

Un autre code à tester

VB:
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 !
 

Fichiers joints

ChristophePT

XLDnaute Nouveau
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 :

VB:
'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".
 

Fichiers joints

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

.Add Type:=xlValidateList, Formula1:="=" & FeuilPlage
'.Add Type:=xlValidateList, Formula1:=Join(MonDicoDescChamp.Keys, ",")
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.
 

ChristophePT

XLDnaute Nouveau
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 ...
 

ChristophePT

XLDnaute Nouveau
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:
.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 ?
 

ChristophePT

XLDnaute Nouveau
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 !
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas