VBA, Excel : liste de données ?

Résolu/Fermé
loukoum - 28 juil. 2009 à 14:23
 loukoum - 28 juil. 2009 à 16:04
Bonjour,

... et merci au forum Comment ça marche !

Jé débute en VBA, et les articles sur ce forum m'ont beaucoup aidée.
Voici mon problème : j'ai environ 150 fichiers excel (tous structurés pareils), et je souhaite centraliser les informations dans un autre classeur excel sous forme de tableau.

Je suis déjà hyper contente, j'ai réussi à faire quelque chose qui marche ! :D

Le problème précis vient de la façon dont je récupère les données, puis les stocke, pour enfin les réécrire.
Pour l'instant, je fais ça avec un Array, mais ça n'est ni très élégant, ni très efficace vu que j'ai tellement de données à récupérer que j'arrive au bout de la ligne !!! Hihihi :)

Quelle serait la meilleure structure à utiliser ? Une liste? Une pile ? En fait, je débute tellement que je ne connais pas les structure de données et mes recherches sur le web n'ont pas été très efficaces :(

Si vous pouviez juste m'aiguiller sur le nom de la structure de données, je serais très très reconnaissante!!

Voici le code en question (avec récupération de deux données seulement) :

Option Explicit

Const Dossier = "D:\xxx"
Const cteExcel = ".xls"

Sub RecupDonnes()

'Résumé de la démarche : la macro se promène dans un répertoire <Dossier>, et ouvre un fichier après l'autre.
'Dans chaque fichier, elle lit une série d'information stockée dans un tableau <ListeInfos>.
'Elle ferme le fichier, puis écrit les infos contenues dans <ListeInfos> dans le classeur de la macro.

Dim ListeInfos As Variant
Dim Colonne As Variant
Dim Ligne As Variant
Ligne = 2
Dim Fichier As Variant
Fichier = Dir(Dossier & "*" & cteExcel, vbDirectory)
Dim Version As Variant

Do While Fichier <> ""
If ((Fichier <> ".") And (Fichier <> "..")) Then
If Not ((GetAttr(Dossier & Fichier) And vbDirectory) = vbDirectory) Then
Workbooks.Open Dossier & Fichier
ListeInfos = Array(Range("E1").Value, Range("C2").Value)

ActiveWorkbook.Close SaveChanges:=False

For Colonne = 1 To UBound(ListeInfos) + 1 'UBound(Array) donne le nombre d'éléments -1
Cells(Ligne, Colonne).FormulaR1C1 = ListeInfos(Colonne - 1)
Next Colonne

End If
End If
Fichier = Dir
Ligne = Ligne + 1
Loop

End Sub

1 réponse

(Désolée pour le double-post ...)

Voici comment j'ai fait ...
Ce n'est toujours pas très élégant, mais ça me fait gagner de la place :)

Dim ListeEmplacement As Variant
ListeEmplacement = Array("C2", "D2", "D3", "A5", "E5", "D8", "D10", "D11", "D12", "D13", "D14", "D15", "F21", "E20", "G20", "F23", "E22", "G22", "F25", "E24", "G24", "F27", "E26", "G26", "F30", "G29", "G29", "F32", "E31", "G31", "F33", "E33", "G33", "F37", "E36", "G36", "F38", "E38", "G38", "F41", "E40", "G40", "F43", "E42", "G42", "F45", "E44", "G44", "F48")
Dim j As Integer

Dim TB(500) As Variant

Dim Colonne As Variant
Dim Ligne As Variant
Ligne = 2

Dim Fichier As Variant
Fichier = Dir(Dossier & "*" & cteExcel, vbDirectory)

Dim Version As Variant

Do While Fichier <> ""
If ((Fichier <> ".") And (Fichier <> "..")) Then
If Not ((GetAttr(Dossier & Fichier) And vbDirectory) = vbDirectory) Then
Workbooks.Open Dossier & Fichier
Version = Range("E1").Value

For j = 0 To UBound(ListeEmplacement)
TB(j) = Range(ListeEmplacement(j)).Value
Next j

ActiveWorkbook.Close SaveChanges:=False

For Colonne = 1 To UBound(ListeEmplacement) + 1 'UBound(Array) donne le nombre d'éléments -1
Cells(Ligne, Colonne).FormulaR1C1 = TB(Colonne - 1)
Next Colonne

End If
End If
Fichier = Dir
Ligne = Ligne + 1
Loop
0