VBA : comment aller chercher une liste dans un autre classeur ?

Résolu
CamilleDR -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis en train de créer un petit programme de gestion avec vba.
L'objectif est de créer des recettes à partir d'ingrédients contenus dans un autre classeur qui me sert de base de données.
Comment coder pour que la liste des ingrédients de ma base de données apparaisse dans la combobox de mon userform ?
Merci d'avance,
Camille

2 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Si tous les ingredients sont dans le meme colonne, il serait plus judicieux de prendre une listbox multiselectmulti ou vous pouvez selectionner les x ingredients et apres par programme les recuperer pour creer votre recette

    A vous de voir

    A+
    0
    1. CamilleDR Messages postés 30 Statut Membre
       
      Bonjour,
      Je pourrais faire avec une listbox aussi,mais il faut que je sélectionne les ingrédients 1 par 1 pour indiquer leur quantité... Je valide 1 par un les ingrédients et leur quantité. Et ensuite mon ingrédient et ma quantité s'affichent dans 2 colonnes d'une listbox située en dessous. Et pour finir je valide la recette totale.
      J'ai déjà fait un programme comme ça mais javais tous dans le même fichier, hors la je dois faire une référence a un autre fichier.
      0
  2. CamilleDR Messages postés 30 Statut Membre
     
    Pourriez vous m'aider à faire fonctionner ce code, ou un code de ce type, sachant que j'ai bricolé avec mes vieux fichiers et internet :


    Private Sub UserForm_Initialize()

    'Dimensionner les variables
    Dim Lig As Long
    Dim DLig As Long

    'Vider tous les champs
    Texte_Titre.Value = ""
    Combo_Ing.Clear
    ZoneTexte_Qtt.Value = ""
    Liste_Ing.Clear

    'Aller chercher les ingrédients pour remplir la combobox Combo_Ing
    ChDir "D:\#_ENTREPRISE\Calcul des valeurs nutritionnelles"
    Set Données = Workbooks.Open(Filename:="D:\#_ENTREPRISE\Calcul des valeurs nutritionnelles\Base de données.xlsx")
    With Données.Sheets("BDD finale")
    DLig = .Range("A" & Rows.Count).End(xlUp).Row
    For Lig = 3 To DLig
    Combo_Ing.Value = .Cells(Lig, 1).Value
    If Combo_Ing.ListIndex = -1 Then
    Combo_Ing.AddItem .Cells(Lig, 1).Value
    End If
    Next Lig
    End With

    End Sub


    Merci d'avance,
    Camille
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Justement un code pour recuperer les infos

      Private Sub UserForm_Activate()
          Dim TIngredients    'Table des ingredients
          
          Workbooks.Open "D:\_Docs_Prog_Excel\_recettes\Ingredients.xlsx"     'fichier recette
          With ActiveWorkbook.Worksheets("Ingredients")
              derlig = .Range("A" & Rows.Count).End(xlUp).Row     'derniere cellule non vide colonne A
              'mese en table des ingredients colonne A
              TIngredients = ActiveWorkbook.Worksheets("Ingredients").Range("A2:A" & derlig).Value
          End With
          ActiveWorkbook.Close SaveChanges:=False
          
          x = TIngredients(1, 1)      'premier ingredient
          xx = TIngredients(2, 1)      'deuixeme ingredient
          xxx = TIngredients(3, 1)     'troisieme ingredient
      
      End Sub
      


      Je vous l'adapte pour votre code si besoin

      A+
      0
    2. CamilleDR Messages postés 30 Statut Membre > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      Avec ce code la je vais pouvoir remplir ma combobox ?
      Je veux bien une adaptation, sachant que :
      - la combobox en question s'appelle Combo_Ing
      - le fichier base de données s'appelle Base de données.xlsx
      - la feuille du fichier ou est écrite la base de données s'appelle BDD finale
      - la liste des ingrédients est sur la première colonne de la feuille BDD finale
      - le chemin d'accès au fichier Base de données.xlsx est D:\#_ENTREPRISE\Calcul des valeurs nutritionnelles
      Merci d'avance !
      0
    3. CamilleDR Messages postés 30 Statut Membre > CamilleDR Messages postés 30 Statut Membre
       
      Après, j'ai une sacré liste d'ingrédients donc j'aimerais bien éviter de les écrire un par un à la fin du code...
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > CamilleDR Messages postés 30 Statut Membre
       
      Re,

      A tester:

      Private Sub UserForm_Initialize()
          'Dimensionner les variables
          Dim Lig As Long
          Dim DLig As Long
          Dim TIngredients    'Table des ingredients
      
          'Vider tous les champs
          Texte_Titre.Value = ""
          Combo_Ing.Clear
          ZoneTexte_Qtt.Value = ""
          Liste_Ing.Clear
      
          'Aller chercher les ingrédients pour remplir la combobox Combo_Ing
          Set Données = Workbooks.Open(Filename:="D:\#_ENTREPRISE\Calcul des valeurs nutritionnelles\Base de données.xlsx")
          With Données.Sheets("BDD finale")
              DLig = .Range("A" & Rows.Count).End(xlUp).Row
              'mise en table des ingredients colonne A
              TIngredients = .Range("A3:A" & DLig).Value
          End With
          Données.Close SaveChanges:=False
          Combo_Ing.List() = TIngredients
          Set Données = Nothing
      End Sub
      0
    5. CamilleDR Messages postés 30 Statut Membre > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      "Erreur d'exécution '91': Variable objet ou variable de bloc With non définie"

      > Serait-ce TIngredients qui n'aurait pas été définie ?
      0