Bonjour,

Je possède un dossier ("mon_dossier") qui contient "n" fichiers excel (aillant tous la même architecture).
Je souhaite récupérer, dans la feuille "ma feuille," les lignes non-vides (de la ligne 7 à dernière non-vides) des colonnes A à X de tous ces fichiers tout en les laissant fermés.
C'est lignes ainsi récupérées devront s'incrémenter les unes à la suite des autres afin de ne constituer qu'un seul fichier.

Voici ce que j'ai trouvé en fouillant un peu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
'Source : Frédéric Sigonneau
 
Sub LitDatas()
Dim Fich$, Arr
 
    Fich = "C:\Documents and Settings\mon dossier\fichier test.XLS"
 
  'récup des données à partir de l'adresse d'une plage de cellules
  GetExternalData Fich, "ma feuille", "A7:X65536", False, Arr
 
  'récup des données à partir du nom d'une plage de cellules ()
'  GetExternalData Fich, "", "plagenommée", False, Arr
 
  With ThisWorkbook.Sheets("Feuil1")
    .Range("A1", .Cells(UBound(Arr, 1), UBound(Arr, 2))).Value = Arr
  End With
 
End Sub
 
'renvoie les valeurs d'une plage de cellules contigües (srcRange)
'd'une feuille (srcSheet) d'un fichier (srcFile) fermé
'dans un tableau (outArr)
'le paramètre TTL indique si la plage a ou non une ligne d'entêtes
 
Sub GetExternalData(srcFile As String, _
                    srcSheet As String, _
                    srcRange As String, _
                    TTL As Boolean, _
                    outArr As Variant)
'd'après Héctor Miguel, mpep
Dim myConn As ADODB.Connection, myCmd As ADODB.Command
Dim HDR As String, myRS As ADODB.Recordset, RS_n As Integer, RS_f As Integer
Dim Arr
 
  Set myConn = New ADODB.Connection
  If TTL = True Then HDR = "Yes" Else HDR = "No"
  myConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
              "Data Source=" & srcFile & ";" & _
              "Extended Properties=""Excel 8.0;" & _
              "HDR=" & HDR & ";IMEX=1;"""
  Set myCmd = New ADODB.Command
  myCmd.ActiveConnection = myConn
  If srcSheet = "" _
    Then myCmd.CommandText = "SELECT * from `" & srcRange & "`" _
    Else myCmd.CommandText = "SELECT * from `" & srcSheet & "$" & srcRange & "`"
  Set myRS = New ADODB.Recordset
  myRS.Open myCmd, , adOpenKeyset, adLockOptimistic
  ReDim Arr(1 To myRS.RecordCount, 1 To myRS.Fields.Count)
  myRS.MoveFirst
  Do While Not myRS.EOF
    For RS_n = 1 To myRS.RecordCount  'lignes
      For RS_f = 0 To myRS.Fields.Count - 1  'colonnes
        Arr(RS_n, RS_f + 1) = myRS.Fields(RS_f).Value
      Next
      myRS.MoveNext
    Next
  Loop
  myConn.Close
  Set myRS = Nothing
  Set myCmd = Nothing
  Set myConn = Nothing
 
  outArr = Arr
 
End Sub
Le code fonctionne bien et je récupère bien les lignes (7 à 66536) du "fichier test".
Maintenant, je cherche à récupérer QUE les lignes non-vides et surtout à pouvoir incrémenter.

Il doit y avoir quelques choses comme ça à rajouter mais je n'y arrive pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
' pour faire ma selection de ligne 7 à non-vide
Range(Selection, Selection.End(xlDown)).Select
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
' pour lire tous les fichiers xls de "mon dossier"
Repertoire = "C:\Documents and Settings\\mon dossier\"
Fichier = Dir(Repertoire & "*.xls")
Je suis "ultra débutant" en VBA donc je ne sais pas si tout celà est compatible...

Un petit plus serait de pouvoir commencer cette compilation à la ligne 2 afin de mettre les entêtes de colonne sur la ligne 1.

J'espère que j'ai bien expliquer ce que je souhaite.

Merci d'avance pour vos contributions

Mathieu