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

Résolu/Fermé
CamilleDR - 24 oct. 2016 à 10:17
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 24 oct. 2016 à 11:47
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

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
24 oct. 2016 à 10:45
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
CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017
24 oct. 2016 à 10:57
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
CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017
24 oct. 2016 à 11:16
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 24/10/2016 à 11:19
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
CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
24 oct. 2016 à 11:26
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
CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017 > CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017
24 oct. 2016 à 11:27
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
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017
Modifié par f894009 le 24/10/2016 à 11:29
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
CamilleDR Messages postés 29 Date d'inscription lundi 24 octobre 2016 Statut Membre Dernière intervention 12 juin 2017 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
24 oct. 2016 à 11:34
"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