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 :

Remplir combobox à partir d'une colonne de longueur variable [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    technicien
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut Remplir combobox à partir d'une colonne de longueur variable
    Bonjour

    je debute en VBA et je me casse la tete sur ce pb

    je voudrais remplir ma combobox CboNom avec les données de la colonne A de la feuille Data.
    Le souci est que le nombre de ligne de la colonne A est variable.

    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub userform_initialize()
     
    'Récupération des listes permettant de remplir les différentes Combobox
    Me.CboNom.RowSource = Sheets("Data").Range("a2", Range("a2").End(xlDown)) 'Liste des Noms
    Me.CboBout.RowSource = "data!c2:c26" 'Liste des Bouteilles
    Me.CboGil.RowSource = "data!d2:d28" 'Liste des Gilets
    Me.CboDet.RowSource = "data!e2:e21" 'Liste des Détendeurs
    Me.CboCombi.RowSource = "data!f2:f19" 'Liste des Combinaisons
    Il me renvoie une erreur '1004'

    Quelqu'un peut il m'aider ?

    Merci

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub userform_initialize()
    Dim Derlg As Range, Tbl
    'Récupération des listes permettant de remplir les différentes Combobox
    With Sheets("Data")
      Set Derlg = .Range("A" & .Rows.Count).End(xlUp)
      Tbl = .Range("A2", Derlg)
      cbonom.List = Tbl
      'ci-dessous, tu peux adapter ou laisser tel quel
      CboBout.RowSource = "data!C2:C26" 'Liste des Bouteilles
      CboGil.RowSource = "data!d2:d28" 'Liste des Gilets
      CboDet.RowSource = "data!e2:e21" 'Liste des Détendeurs
      CboCombi.RowSource = "data!f2:f19" 'Liste des Combinaisons
    End With
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre averti
    Homme Profil pro
    technicien
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Merci casefayere, cela marche nickel.

    Je n'ai pas tout compris dans le code, mais le resultat est là.

    Si tu peux m'éclairer sur 2 petit points , cela m'aidera pour l'avenir (c'est le pb lorsque l'on débute, on a tendance à poser des questions qui peuvent paraitre évidentes)
    1 - dans la déclaration de la variable Derlg, tu la définis comme Range : OK. mais pourquoi mets tu ensuite ,Tbl ?
    2 - Pourquoi, dans la commande Set, mets tu un point avant range et avant rows.count ? Cela vient il du fait que tu as utilisé la commande With Sheets("data") et que le . permet de dire que cela s'y rapporte ?

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,
    l'erreur 1004 est ici due au fait que tu utilises un niveau Sheets dans ta ligne, mais aussi un niveau range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.CboNom.RowSource = Sheets("Data").Range("a2", Range("a2").End(xlDown)) 'Liste des Noms
    essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.CboNom.RowSource = Sheets("Data").Range("a2", Sheets("Data").Range("a2").End(xlDown)) 'Liste des Noms
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    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
    Private Sub userform_initialize()
    Dim Derlg As Range, Tbl
    'Récupération des listes permettant de remplir les différentes Combobox
    With Sheets("Data") 'donc avec feuille("Data")
      'c'est pour ça qu'il faut le point
      Set Derlg = .Range("A" & .Rows.Count).End(xlUp) 'une variable range qui stocke la cellule
      'cela remplace Sheets("Data").Range("A" & Sheets("Data").Rows.Count).End(xlUp)
      Tbl = .Range("A2", Derlg) 'Tbl est une variable tableau, ici elle remplace la plage spécifiée
      'plus pratique pour grands tableau, on gagne du temps
      cbonom.List = Tbl 'dans ce cas on utilise la propriété "List"
      'ci-dessous, tu peux adapter ou laisser tel quel
      CboBout.RowSource = "data!C2:C26" 'Liste des Bouteilles
      CboGil.RowSource = "data!d2:d28" 'Liste des Gilets
      CboDet.RowSource = "data!e2:e21" 'Liste des Détendeurs
      CboCombi.RowSource = "data!f2:f19" 'Liste des Combinaisons
    End With
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Membre averti
    Homme Profil pro
    technicien
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Merci beaucoup pour le temps que tu m'as accordé. C'est vraiment très sympa

    Donc, tu as défini la variable Derlg à la fois comme cellule et comme tableau.
    Je ne savais pas que l'on pouvait donner 2 types de données à la même variable.
    Très pratique.

    J'ai adapté ton code au reste de mes combobox.

    Génial

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Donc, tu as défini la variable Derlg à la fois comme cellule et comme tableau.
    non ce n'est pas une variable tableau, c'est un range !, le tableau sera en mémoire
    ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tbl = .Range("A2", Derlg)
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tbl = .Range("A2", "la derniere cellule")
    donc tbl qui est un tableau prend les valeurs de la plage

    je reviens pour que tu comprennes :

    1 - ouvres un nouveau fichier
    2 - remplis la feuille1 de A1 à A20 de ce que tu veux
    3 - essayes ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Derlg As Range, Tbl, x As Integer
    With Sheets("Feuil1")
      Set Derlg = .Range("A" & .Rows.Count).End(xlUp)
      Tbl = .Range("A1", Derlg)
      MsgBox "Valeur : " & Derlg & " adresse : " & Derlg.Address & " couleur police : " & Derlg.Font.Color
    End With
    For x = 1 To UBound(Tbl)
      MsgBox Tbl(x, 1)
    Next x
    End Sub
    sinon voir la manipulation des tableaux, ici, entre autres http://silkyroad.developpez.com/vba/tableaux/
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre averti
    Homme Profil pro
    technicien
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Ok, alors pourquoi avoir écrit cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Derlg As Range, Tbl
    Je ne pige pas


    En plus, j'ai essayé en l'enlevant et ça marche nickel aussi.
    A quoi ça sert ?

    Désolé d'être un boulet

  9. #9
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    tu n'es pas un boulet mais tu n'as peut-être pas vu mon dernier post, regardes-le et dis-moi
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  10. #10
    Membre averti
    Homme Profil pro
    technicien
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Yes, j'ai pigé.

    Merci beaucoup.
    Au plaisir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Code c# : pour remplir (combobox) à partir d'une BDD postgresql
    Par geoinformation dans le forum C#
    Réponses: 11
    Dernier message: 22/12/2012, 12h53
  2. Comment remplir combobox à partir d'une base dedonnée
    Par tito19 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/12/2009, 15h40
  3. [XL-2007] Valeur textbox dans une colonne de longueur variable
    Par luko6 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/10/2009, 14h42
  4. Réponses: 3
    Dernier message: 08/01/2009, 13h48
  5. Combobox à partir d'une colonne
    Par GTbenj dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/06/2008, 16h29

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