Bonjour à tous,
Cela fait longtemps que je ne suis pas venu faire appel à votre aide.
Je cherche à consolider une feuille de plusieurs fichiers Excel d'un répertoire ayant tous la même racine + la date.
Je préfère sans ouvrir le fichier source.
J'ai adapté une macro que j'avais déjà utilisée pour lequel il me fallait nommer les noms de chaque fichier source.
Cette macro fonctionne, j'obtiens un onglet data issu d'un fichier. Mais je ne peux à chaque fois nommer mes 20 fichiers chaque mois.
dans ma routine, j'utilise
à partir d'une chaine de connexion
NomFichier est la variable utilisée pour le nom du fichier source
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 Public Sub ConsoDatas(NomFichier$, FeuilleSource$, FeuilleCible$) ' 'Microsoft ActiveX Data Object 2.x Library Dim rsData As ADODB.Recordset Dim szConnect As String Dim szSQL As String Dim Li&, FeuilleDest Debug.Print NomFichier$, FeuilleSource$, FeuilleCible$ ' Crée la chaîne de connexion szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & NomFichier & ";" & _ "Extended Properties=Excel 8.0;"
pour lire mes champs
Comment pouvoir lancer autant de requête sql que de fichier ayant la même racine ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part szSQL = "SELECT ALL* FROM [OZ3L$] "
Mes routines pour lire les fichiers fermées
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Sub TestConso() Dim Feui1$, Fich1$, Source1$, Cible$ Feui1 = Worksheets("PARAMETRE").Range("B2") & "." & Worksheets("PARAMETRE").Range("B3") 'FICHIER à " Fich1 = "C:\EURO IT" & "\" & Feui1 Source1 = Worksheets("PARAMETRE").Range("B5") Cible = Worksheets("PARAMETRE").Range("B4") ConsoDatas Fich1, Source1, Cible End Sub
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 Public Sub ConsoDatas(NomFichier$, FeuilleSource$, FeuilleCible$) 'Va chercher dans le classeur NomFichier (sans l'ouvrir) les données 'de la feuille FeuilleSource et les copie dans la feuille FeuilleCible 'du classeur actif, à la suite des données (éventuellement) déjà présentes. '(La ligne d'entêtes de FeuilleSource n'est pas importée) 'inspiré de Rob Bovey, mpep 'nécessite une référence à la librairie 'Microsoft ActiveX Data Object 2.x Library Dim rsData As ADODB.Recordset Dim szConnect As String Dim szSQL As String Dim Li&, FeuilleDest Debug.Print NomFichier$, FeuilleSource$, FeuilleCible$ ''' Crée la chaîne de connexion szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & NomFichier & ";" & _ "Extended Properties=Excel 8.0;" ' La requête est basée sur le nom de la feuille. Ce nom ' doit se terminer par un $ et doit être entouré de crochets droits. szSQL = "SELECT ALL* FROM [OZ3L$] " Set rsData = New ADODB.Recordset rsData.Open szSQL, szConnect, adOpenForwardOnly, _ adLockReadOnly, adCmdText 'où envoyer les données : Set FeuilleDest = ActiveWorkbook.Sheets(FeuilleCible) Li = FeuilleDest.Range("A65536").End(xlUp).Row + 1 'envoi sur la première ligne vide If Not rsData.EOF Then FeuilleDest.Range("A" & Li).CopyFromRecordset rsData Else 'si la source était vide... MsgBox "Aucun enregistrement renvoyé.", vbCritical End If ''' On nettoie pour finir... rsData.Close Set rsData = Nothing End Sub
Merci de votre aide
Christian
Partager