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 une combobox à partir d'un tableau


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Remplir une combobox à partir d'un tableau
    Bonjour à tous,

    dans excel, je tente de remplir une combobox à partir d'un tableau qui lui même est alimenté à partir d'une feuille excel.
    Tout semble fonctionner sauf que la combobox se créee avec le bon nombre de lignes mais pas avec les données.
    J'ai bien vu qu'il y avait d'autres méthodes type .Additem mais je pensais gagner du temps par le chargement d'un tableau avec la méthode .List.

    Pouvez-vous me dire s'il est possible de créer une combobox à partir d'un tableau ? Si oui est-ce que vous pouvez m'aider à identifier ou je me suis trompé ?

    voici le code en question pour l'initialisation du userform dans lequel est placé la combobox :
    --------------------------------------------------------------------------------------------------
    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
    Private Sub UserForm_Initialize()
    Dim tab_typarret()
    nb_ligne = (Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row)
    ReDim Preserve tab_typarret(1 To nb_ligne, 1)
        For i = 1 To nb_ligne
     
            tab_typarret(i, 1) = Cells(i, 1).Text
            Debug.Print tab_typarret(i, 1)
        Next i
    'ces lignes ont été ajoutées pour voir si le tableau se charge bien avec les données
    'For i = 1 To UBound(tab_typarret, 1)
    '    Cells(i + 16, 1) = tab_typarret(i, 1)
    'Next i
     
    ComboBox1.List = tab_typarret
    End Sub
    -------------------------------------------------------------------------------------------------
    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Pourquoi ton tableau a-t-il deux dimensions ?
    Pour chaque valeur de i, tu crées :
    et
    Tu renseignes seulement la seconde valeur. Définis le tableau par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim Preserve tab_typarret(1 To nb_ligne)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution sans passer par une matrice et sans passer par Initialize du Userform

    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
    18
    19
    20
     
    Option Explicit
     
    Public Nb_Ligne As Long
    Public I As Long
     
    Sub LancerLeUserform1()
     
      With UserForm1
     
            Nb_Ligne = Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
            For I = 2 To Nb_Ligne
                .ComboBox1.AddItem Sheets("Feuil1").Cells(I, 1)
            Next I
     
            .Show
     
      End With
     
    End Sub
    Une solution via une matrice et sans passer par Initialize du Userform

    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
    18
    19
    20
    21
    22
    23
    Option Explicit
     
    Public Tab_TypArret() As Variant
    Public Nb_Ligne As Long
    Public I As Long
     
    Sub ChargerComboAvecMatrice()
     
          Nb_Ligne = Sheets("Feuil1").Cells(Rows.Count, 1).End(xlUp).Row
          ReDim Tab_TypArret(Nb_Ligne - 2) ' La dimension de la matrice part de 0 et on ne tient pas compte de la ligne de titre
     
          For I = 0 To Nb_Ligne - 2
                    Tab_TypArret(I) = Sheets("Feuil1").Cells(I + 2, 1) ' On démarre réellement de la ligne 2
          Next I
     
          With UserForm1
     
                .ComboBox1.List = Tab_TypArret
                .Show
     
        End With
     
    End Sub
    Nb : Preserve n'est à utiliser que si de nouveaux enregistrements doivent être ajoutés à la matrice "en cours de route". Si la matrice comporte plusieurs dimensions, Preserve n'ajoute des enregistrements que sur la dernière dimension. Dans votre exemple, si ce sont des lignes qui doivent être ajoutées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim Preserve tab_typarret(1,1 To nb_ligne)
    Sauf si vous avez stipulé Option Base 1 en tête du module, le 1er enregistrement de la matrice est le numéro 0. C'est pour cette raison que le dernier enregistrement de la matrice est nb_ligne -1. Il vous faut également ne pas tenir compte de la ligne de titre (le cas échéant), c'est pour cette raison que la matrice est nb_ligne - 2 dans mon exemple.

    Pour des raisons de lisibilité du code, je n'utilise plus Initialize pour mes userform, je trouve plus facile de travailler directement dans ma procédure de démarrage.

    Cordialement.

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Remerciement
    Eric, Daniel,

    merci beaucoup l'un comme l'autre vous m'avez éclairé, grâce à vous mon problème est résolu.

    Daniel, je m'étais trompé lorsque j'ai créé mon tableau ce qui explique les 2 dimensions alors qu'une seule était nécessaire.

    Eric,

    je trouve très intéressant cette possibilité de ne pas passer par l'initialisation du userform.

    Encore merci


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

Discussions similaires

  1. Remplir une listview à partir d'un tableau Array
    Par Gecoo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/04/2010, 16h05
  2. remplir une combobox à partir d'un fichier .csv
    Par wolverine1987 dans le forum MFC
    Réponses: 24
    Dernier message: 28/04/2009, 11h00
  3. Remplir une combobox à partir de la 2e ligne
    Par wagui26 dans le forum Débuter
    Réponses: 10
    Dernier message: 13/10/2008, 16h49
  4. [Stratégie] Remplir une ComboBox à partir du contenu d'un JTextField
    Par une_tite_question dans le forum Composants
    Réponses: 4
    Dernier message: 01/07/2008, 14h22
  5. Remplir une plage à partir d'un tableau
    Par roudy78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/05/2007, 10h56

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