OVH Cloud OVH Cloud

Récupération de données

3 réponses
Avatar
Sunburn
Bonjour,
je voudrais savoir s'il est possible de récupérer, par macro, des données
dans un autre tableau excel, sans que le fichier soit ouvert. (tous mes
fichiers sont dans le meme dossier : C:\MOI\essai)

En fait, dans mon fichier Analyse, feuille "2005", je voudrais récupérer
toutes les feuilles "2005" des mes autres fichiers Excel de ce dossier
"essai".

Est-ce possible?
Merci.
Yann

3 réponses

Avatar
MichDenis
Tu peux utiliser ceci en adaptant la valeur d'un certain nombre de variables
selon ton environnement.

Pour utiliser cette macro, tu dois ajouter une référence (blibliothèque) à ton
projet VBA. Pour ce faire, à partir de la barre des menus des la fenêtre de
l'éditeur de code / outils / référence / et tu coches :
"Microsoft Activex Data Objects 2.x Librairy"

P.S. Si ton classeur compilation se retrouve dans le même répertoire
que les fichiers dont tu veux extraire les données, tu devras ajouter
au début de la boucle Do While dans le genre
if file <> "NomDuClasseurCompilation.xls" then
'Traitement

End if
'--------------------------------------------------
Sub MaRequêteAvecADO()

'Extrait les données de plusieurs classeurs d'un même
'répertoire en prenant pour acquis que les données ont
'la même structure et sont placées sur la même feuille.

Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
Dim Requete As String, NomFeuille As String, Rg As Range
Dim file As String, C As Integer, Ok As Integer
Dim Chemin As String

NomFeuille = "denis" 'A déterminer
Chemin = "C:Data" 'à déterminer

'La requête qui sera exécutée ' `a déterminer
Requete = "SELECT * From [" & NomFeuille & "$]"

'Récupérer dans un tableau, la liste des
'fichiers excel du répertoire.

file = Dir(Chemin & "*.xls")
Do While file <> ""
'Défini la première cellule où seront copiées les
'données des requêtes ADO
'Nom de la feuille du classeur actif où seront copiées les données.
With Worksheets("Feuil1")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65356").End(xlUp).Row)(2)
Ok = 1
End If
End With

'établir la connection avec le fichier...
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & file & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic

'Copie les étiquettes du recordset vers Excel
If Ok <> 1 Then
Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
x = x + 1
Loop Until x = Rst.Fields.Count
Rg.Offset(1).CopyFromRecordset Rst
Else
Rg.CopyFromRecordset Rst
End If
file = Dir()
Rst.Close: Conn.Close
Loop
Set Rst = Nothing: Set Conn = Nothing
Set Rg = Nothing
End Sub
'--------------------------------------------------




"Sunburn" a écrit dans le message de news:

Bonjour,
je voudrais savoir s'il est possible de récupérer, par macro, des données
dans un autre tableau excel, sans que le fichier soit ouvert. (tous mes
fichiers sont dans le meme dossier : C:MOIessai)

En fait, dans mon fichier Analyse, feuille "2005", je voudrais récupérer
toutes les feuilles "2005" des mes autres fichiers Excel de ce dossier
"essai".

Est-ce possible?
Merci.
Yann
Avatar
Sunburn
Ouah,
ça a l'aire méga compliqué, je compren malheureusement pas grand chose au
VBA, malgré moi....
Le premier "DO While
Loop ",
je ne vois pas comment le remplir à l'intérieur, que dois-je mettre dans
cette boucle?

La macro suivante cré un fichier excel qui énumère tous les fichiers excel
présent dans mon répertoire prénomé?
le nom de la feuille du classeur, doit en fait etre la feuille ou je veux
récupérer les infos dans mon fichier de compilation ,c'est ça?
Et après, je ne comprend rien, mais y'a pas de variable, donc je suppose
qu'il n'y a rien à changer, c'est une commande "classique"

Merci si tu peux éclairer mes lanternes.
YANN
Avatar
MichDenis
| je compren malheureusement pas grand chose au VBA

Alors la solution proposée n'est et ne sera jamais évidente !!!

Place ton classeur qui reçoit les données ailleurs que dans le répertoire
où sont l'ensemble de tes classeurs pour le temps que tu exécutes
la macro.

Les variables sont identifiées...il est écrit pour la majeure partie de celles là, à déterminer.



"Sunburn" a écrit dans le message de news:

Ouah,
ça a l'aire méga compliqué, je compren malheureusement pas grand chose au
VBA, malgré moi....
Le premier "DO While
Loop ",
je ne vois pas comment le remplir à l'intérieur, que dois-je mettre dans
cette boucle?

La macro suivante cré un fichier excel qui énumère tous les fichiers excel
présent dans mon répertoire prénomé?
le nom de la feuille du classeur, doit en fait etre la feuille ou je veux
récupérer les infos dans mon fichier de compilation ,c'est ça?
Et après, je ne comprend rien, mais y'a pas de variable, donc je suppose
qu'il n'y a rien à changer, c'est une commande "classique"

Merci si tu peux éclairer mes lanternes.
YANN