VBA, Excel : liste de données ?

Résolu
loukoum -  
 loukoum -
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
Configuration: Windows XP
Firefox 3.5.1

1 réponse

  1. loukoum
     
    (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