Juxtaposer vertic. tables variables dans fichiers & sheets différents
Bonjour,
J'aurais besoin de votre support pour voir quelles seraient les options possibles pour résoudre le problème suivant
- J'aimerais "consolider", ou plutôt concatener / juxtaposer verticalement plusieurs tableaux Excels.
- Ces tableaux ont tous la même structure et le même nombre de colonnes, mais... le nombre de lignes est variable
- Autre difficulté, ces tableaux sont tous dans des fichiers Excels différents, et au sein de chaque Excel dans des sheets différentes
- Le nombre de "sheets" contenant ces tableaux est déterminé et ne changera plus, ainsi que le nom des sheets
Je précise que ne sais pas programmer en VBA mais j'ai déjà programmé, et je me demandais avant de me lancer dans tout codage si le problème ci-dessous ne pouvait être solutionné que par du coding, ou si d'autres solutions comme des macros ou autre pourraient convenir.
Si la solution passe par du VBA, je ne demande pas la solution mais peut être un peu de guidage pour pouvoir ensuite me renseigner par moi même. Par exemple les quelques fonctions qui pourraient m'aider, ou comment vous procéderiez .
Je ne suis pas expert donc je viens consulter vos lumières
Un grand merci d'avance pour votre aide
Michel
'Bonjour,
Voici un exemple,
Avant d 'exécuter la macro, n'oublie pas de modifier les lignes qui ont un commentaire " à adapter "
et d'activer la référence: Microsoft ActiveX Data Objects xx Library -->au menu vba, Outils, Référence
Sub Read_File_xlsx()
Dim Repertoire As String, Fichier As String, Feuille As String, AddrLire As String
Dim Ligne As Long, oFile As Object
Sheets.Add After:=Sheets(Sheets.Count) 'à adapter
Repertoire = "C:\Users\isabelle\Documents\Test1" 'à adapter
Set fso = CreateObject("Scripting.FileSystemObject")
Set sfofolder = fso.GetFolder(Repertoire)
NomFeuille = Array("Feuil1", "Feuil2") 'à adapter
For Each oFile In sfofolder.Files
If Right(oFile, 5) = ".xlsx" Then 'à adapter
Set Cnn = New ADODB.Connection
'--- Connexion ---
With Cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& oFile & ";Extended Properties=""Excel 12.0;HDR=NO;"""
.Open
End With
'--- récupérer les données --
For i = LBound(NomFeuille) To UBound(NomFeuille)
Set rs = Cnn.Execute("SELECT * FROM [" & NomFeuille(i) & "$" & "]")
If i = 0 Then
For iCols = 0 To rs.Fields.Count - 1
Cells(1, iCols + 1).Value = rs.Fields(iCols).Name
Next iCols
End If
Cells(Ligne, "A").CopyFromRecordset rs
rs.Close
Ligne = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
Next i
End If
Next oFile
Cnn.Close
Set rs = Nothing
Set Cnn = Nothing
End SubHello,
Merci beaucoup ! c'est bien plus que de simples conseils !
Sorry pour le timing de ma réponse.. pas vu direct la réponse, un peu distrait ...
Je teste ça et encore merci !