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".
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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;"""
'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
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;"""
'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" <Sunburn@discussions.microsoft.com> a écrit dans le message de news:
A4D0BB68-C7CA-4970-A222-A5007D8D04B6@microsoft.com...
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".
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;"""
'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
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
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"
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
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
| 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" <Sunburn@discussions.microsoft.com> a écrit dans le message de news:
B46864CD-89AB-4610-BB95-5E1596E9D4C4@microsoft.com...
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"
| 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"