Récupération de données de plusieurs classeurs

  • Initiateur de la discussion Riri
  • Date de début
R

Riri

Guest
Bonsoir le Forum ,

la macro jointe permet de lister tous les classeurs d'un répertoire et récupère les données de la cellule A1(Feuil1) de chaque fichier sans l'ouvrir.

Macro de MichelXLD que je remercie au passage.

Ce que je n'arrive pas à faire , c'est récupérer plusieurs lignes sur chaques classeurs.De la première ligne à la dernière ligne non vide .

Exemple : Récupérer la ligne 5 , 6 , 7 , ect ..... . colonnes A , B , C , D , E de Chaques classeurs .

Merci pour votre Aide et bonne soirée à vous .

Eric . D

'Macro de MichelXLD
Sub chercheFichiersFermesV03()
Dim X As Integer, nbFichiers As Integer, Y As Integer
Dim Tableau() As String
Dim Direction As String

Application.ScreenUpdating = False
Direction = Dir('C:\\Documents and Settings\\michel\\dossier\\general\\excel\\*.xls') 'adapter chemin repertoire

Do While Len(Direction) > 0
nbFichiers = nbFichiers + 1
ReDim Preserve Tableau(1 To nbFichiers)
Tableau(nbFichiers) = Direction
Direction = Dir()
Loop

If nbFichiers > 0 Then
For X = 1 To nbFichiers
If Tableau(X) <> ThisWorkbook.Name Then
Y = Y + 1
With ActiveSheet.Cells(Y, 1)
.Formula = '='C:\\Documents and Settings\\michel\\dossier\\general\\excel\\[' & Tableau(X) & ']Feuil1' & ''!' & 'A1'
.Value = .Value
End With
End If
Next X
End If

Application.ScreenUpdating = True
End Sub
 

Jam

XLDnaute Accro
Salut Riri,

L'idéal c'est de faire une requête SQL via ADO sur le classeur. Ca revient en fait à utiliser les fichiers XL comme si c'était des bases de données genre Access. Dans ce cas pas besoin de les ouvrir.

Mes souvenirs ne sont plus très frais, mais en gros voilà ce qu'il faut faire:

1. ajouter dans les références Microsoft ActiveX Data Object 2.x Library' afin de pouvoir utiliser les objets ADO.

2. Ensuite le bout de code suivant
Code:
Sub GetDataFromWorkbooks(chemin_et_nomdufichier As String, MaFeuilleDestination As String)
Dim oRec As ADODB.Recordset
Dim lsDSN As String
lsDSN = 'Provider=Microsoft.Jet.OLEDB.4.0;' & _
        'Data Source=' & chemin_et_nomdufichier & ';' & _
        'Extended Properties=''Excel 8.0;HDR=Yes;IMEX=1'''
Set oRec = New ADODB.Recordset
With oRec
    .Open Source:='SELECT ...' & vbCr & _
                  'FROM ...' & vbCr & _
                  'WHERE ... & vbCr & _
                  'ORDER BY ...', ActiveConnection:=lsDSN
    worksheets(MaFeuilleDesination).Cells(x, y).CopyFromRecordset oRec
    .Close
End With
Set oRec = Nothing
End Sub

Ce bout de code à arranger à ta sauce:
- passer les paramètres de destination de la requête genre Nom de la feuille de destination, range de destination, etc...
- déterminer les éléments de la requête SQL (y des clauses WHERE et ORDER BY, mais elles sont facultatives)

Bon j'ai pas le temps d'aller plus loin aujourd'hui, mais _Thierry ou une autre star ;) du forum pourra peut-être t'en dire un peu plus.

NB.: c'est pour moi la 'meilleure' solution, mais d'autre en ont peut-être de 'meilleure'.
 
R

Riri

Guest
Bonsoir le Forum et MrExcel ,

Je répond un peu tardivement car je ne suis pas allée sur le net depuis quelques jours.(Travail oblige)
Merci pour ta réponse MrExcel , mais la méthode ADO est trop complexe pour moi.
Ne pourrais t-on pas adapter une boucle pour récupérer les ligne de chaques fichiers dans la macro de MichelXLD.
Si quelqu'un pouvais m'aider ça serais sympa car moi j'ai essayé mais je ni arrive pas.

Encore merci pour vos réponses .

@ + Eric D et bonne soirée à vous.
 

Discussions similaires

Réponses
19
Affichages
2 K
Réponses
29
Affichages
1 K
Réponses
2
Affichages
176

Statistiques des forums

Discussions
312 486
Messages
2 088 821
Membres
103 971
dernier inscrit
abdazee