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

deschanp - 15 avril 2013 à 09:47 - Dernière réponse : cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 avril 2013 à 11:44
3
Merci
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.

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 avril 2013 à 10:26
0
Merci
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.
Commenter la réponse de ucfoutu
0
Merci
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é
Commenter la réponse de deschanp
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 avril 2013 à 11:42
0
Merci
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.
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 avril 2013 à 11:52
0
Merci
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.
Commenter la réponse de ucfoutu
0
Merci
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 ?
Commenter la réponse de deschanp
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 avril 2013 à 12:51
0
Merci
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.
Commenter la réponse de ucfoutu
0
Merci
Merci quand même d'avoir passé du temps sur mon cas

Je vais bosser dessus.
Commenter la réponse de deschanp
cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention - 15 avril 2013 à 21:22
0
Merci
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
Commenter la réponse de cs_MPi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.