deschanp
-
15 avril 2013 à 09:47
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 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.
A voir également:
Récupération de données d'un tableau et ajout comboBox
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
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.
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 ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 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