Récupération de données d'un tableau et ajout comboBox

Résolu
deschanp - 15 avril 2013 à 09:47
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 15 avril 2013 à 21:22
Bonjour à tous, je débute dans le VBA et je viens donc à vous car j'ai un petit problème.
Je m'explique:

je suis entrain de créer une petite application qui récupère d'abord les données d'un classeur et les enregistre dans un tableau. Voici le code :

Function InitDonnee() As Variant
    Dim NomFicher(101) As String
    Dim CdoMessage As CDO.Message
    Dim FichiersChoisis As String
    Dim remplace As String
    remplace = ".csv"
    FichiersChoisis = ""
    
    ChDir "C:\Documents and Settings\pdeschanels\Mes documents\Projet VBA"
    FichiersChoisis = Application.GetOpenFilename("Fichier de Production, *.csv", 2, "Choisissez un Fichier de production")
     
    If FichiersChoisis <> "" Then
    
        'Ouverture du fichier text
        Workbooks.OpenText Filename:= _
                            FichiersChoisis, _
                            Origin:=xlWindows, _
                            StartRow:=1, _
                            DataType:=xlDelimited, _
                            TextQualifier:= _
                            xlDoubleQuote, _
                            ConsecutiveDelimiter:=False, _
                            tab:=False, _
                            Semicolon:=True, _
                            Comma:=False, _
                            Space:=False, _
                            Other:=False
               
       ' On enlève l'adresse complète du fichier et on garde son nom
        FichiersChoisis = Mid(FichiersChoisis, InStrRev(FichiersChoisis, "") + 1)
        'On active le classeur
        Workbooks(FichiersChoisis).Activate
        Application.Visible = True
        
        Range("A1").Select

        Dim var1, var2 As Integer
        Dim l, c As Integer
        l = 1
        c = 1
        
        derniereLigne = Application.WorksheetFunction.CountA(Range("A:A"))
        
        ReDim tableau(derniereLigne, 8)
        
        While (Not IsEmpty(Cells(l, c)))
            If Range("A" & l).Value = "Année" Then
                l = l + 1
            
            Else
                var1 = Cells(l, c).Value
                While (var1 = Cells(l, c).Value)
                    var2 = Cells(l, c + 1).Value
                    tableau(l - 1, c + 1) = var2
                        While (var2 = Cells(l, c + 1).Value)
                            tableau(l - 1, c + 2) = ActiveSheet.Cells(l, c + 2)
                            l = l + 1
                        Wend
                Wend
                tableau(l - 1, c) = ActiveSheet.Cells(l, c + 2)
            End If
        Wend
    End If
    InitDonnee = tableau
End Function

Nous avons un tableau qui ressemble donc à ceci :
Année Mois 1 Jour X
Année Mois 1 Jour Y
Année Mois 2 Jour X

Jusque là tout va bien.

J'utilise ensuite une combobox d'un userform dans lequel je mets toutes les années. Et la il y a un petit problème. Voici le code :

Public Sub UserForm_Init(tableau)
    ComboBox1.ColumnCount = 1
    Dim l, c As Integer
    l = 1
    While (Not (IsEmpty(tableau(l, 1))))
        With ComboBox2
            .AddItem tableau(l, 1)
        End With
        l = l + 1
    Wend
End Sub


Je n'ai pas d'erreurs, mais ma combobox reste vide.. J'ai beau tourner et virer je ne trouve pas la source du problème..

Une idée ?

Merci :)

Je précise que je travaille sous excel 2000.

9 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 avril 2013 à 11:44
Je dis des bêtises, du coup !!! ===>>
ComboBox1.ListFillRange = "A1:A2"


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 avril 2013 à 10:26
Bonjour,
Tu cherches un peu midi à quatorze heures
Je te rappelle les points suivants :
- La dernière ligne remplie d'une colonne x a pour N° :
Range("X" & rows.count).end(xlup).row
- le tableau tablo :
tablo = range("B1:D6")
sera un tableau de 3 colonnes et 6 lignes contenant toutes les valeurs de la plage B1:D6
- une combobox possède la propriété ListFillRange.
Si celle-ci contient par exemple : E4:E10, la combobox contiendra toutes les valeurs de la colonne E, de la ligne 4 à la ligne 10 incluse.

Tu as là de nouvelles bases sur lesquelles travailler différemment.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Merci ucfoutu ! Effectivement ça simplifie grandement mon code (je débute ).

Une chose sur laquelle je me heurte encore :

Public Sub UserForm_Init(tableau)
    ComboBox1.ColumnCount = 1
    ComboBox1.ListFillRange = tableau("a1:a2")
End Sub


Erreur de compilation : membre de méthode ou de données introuvable.

Il me semble pourtant que je passe bien un Range au ListFill.

Je creuse de mon côté
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 avril 2013 à 11:42
que viendrait faire un tremplin/tableau dans cette affaire ?
=>> rien ===>>
ComboBox1.ListFillRange = Range("A1:A2")


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 avril 2013 à 11:52
Et rien ne t'empêche, en plus, de "jouer" entre deux feuilles, genre :
Worksheets("Feuil2").ComboBox1.ListFillRange =  "Feuil1!A1:A2"

ce code, mis sur Feuil1, remplira la combo mise sur feuil2 avec les données de la plage A1:A2 de Feuil1 ( exemple )
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
D'accord je comprends ! Mais le problème est toujours le même : Erreur de compilation.
Sachant que je veux copier la première colonne de mon tableau dans ma combobox je pensais que le préfixe tableau.XX était nécessaire.

Est ce que le problème serait du au contenu de mon tableau ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 avril 2013 à 12:51
Rhooo ...
Une autre fois, donc : ton tableau est une chose, ta combobox en est une autre !
L'un, comme l'autre, peuvent contenir les données d'une plage
Les deux se traitent indépendamment l'un de l'autre ! Pour remplir ta combo, nul besoin de ton tableau. Pour remplir ton tableau, nul besoin d'une combo !
Excuse-moi, maintenant, mais j'ai d'autres choses à faire que de m'éterniser sur ce qui est évident et qui, de surcroît, me parait déjà avoir été exposé (suis trop vieux et devenu moins patient).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Merci quand même d'avoir passé du temps sur mon cas

Je vais bosser dessus.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
15 avril 2013 à 21:22
Bonjour,
Peut-être que ceci peut aider (?)

Dim Tablo As Variant

'remplit un tableau avec les valeurs des cellules mentionnées
'le tableau a 2 colonnes (A et B)
Tablo = Range("A1:B10").Value   

'remplit un combobox avec les valeurs de la 1ere colonne du tableau
Me.ComboBox1.List = Tablo       


Si tu veux remplir le combo avec les données autres que celles de la 1ere colonne du tableau, il faudrait alors boucler, je pense.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous