Import. de plusieurs feuilles externes ds 1 seule
Bonjour,
J'ai plusieurs centaines de documents structurés de manière identiques. Seules les valeurs sont différentes.
J'aimerais importer toutes ces valeurs là dans un seul document, pour que les valeurs s'additionnent.
J'ai déjà fait quelques recherches sur le net à ce sujet, et aussi sur ce forum, mais je n'ai pas trouvé mon bonheur.
Je joins le fichier en question. Ce tableau contient des valeurs que j'ai besoin d'importer dans un tableau identique, mais vierge.
https://www.excel-pratique.com/~files/doc/Fichier_donnees.xls
J'espère que mon explication est assez claire.
merci,
balty!
Personne ne peut m'aider ?
Dites-le moi si mon explication n'est pas assez claire.
Le but est de pouvoir faire une tonne de statistiques qui, jusque là, est totalement impossible dans mon département.
Merci,
Bonne journée
balty
Bonsoir Balty (Bon après midi pour toi)
Si toutes les feuilles à consolider sont dans des classeurs différents, je ne vois que la solution ADO (je n'y connais strictement rien, mais comme elle est expliquée sur le net en tapant ADO Excel, cela me semble possible)
Cordialement
Bonsoir l'Europe (bon après-midi les autres
Non non, toutes les feuilles sont dans le même répertoire.
Comme j'écrivais plus haut, j'ai essayé d'adapter les formules ADO, mais sans succès. (Faut dire que je suis pas loin en VBA...)
J'ai appliqué la formule (voir ci-bas) qui me semblait la plus appropriée à un bouton (en modifiant les chemins d'accès (C:\), je clique sur le bouton et pouf!, erreur dès la première ligne
Attribute VB_Name = "ValeursDansClasseursFermes"
'récupère dans une série de classeurs fermés (dans le même répertoire)
'les valeurs d'une plage et les écrit dans la feuille active
Sub LoopThruFiles()
'Ron De Bruin, mpep
Dim place As String
Dim FilesArray() As String, FileCounter As Integer
Dim FName As String, LoopCounter As Integer
FName = Dir("c:\*.xls")
Do While Len(FName) > 0
FileCounter = FileCounter + 1
ReDim Preserve FilesArray(1 To FileCounter)
FilesArray(FileCounter) = FName
FName = Dir()
Loop
If FileCounter > 0 Then
Application.ScreenUpdating = False
For LoopCounter = 1 To FileCounter
x = LoopCounter
'calcul de la plage de destination
place = Range(Cells((((x - 1) * 10) + 2), 1), Cells(((x * 10)), 3)).Address
GetValues "c:", FilesArray(LoopCounter), "Blad1", "a1:c10", place
Next
Application.ScreenUpdating = True
End If
End Sub
Sub GetValues(fPath As String, FName As String, sName, _
cellRange As String, place As String)
'recopie une plage des valeurs externes dans une plage de
'la feuille active sous forme d'une formule matricielle
With ActiveSheet.Range(place)
.FormulaArray = "='" & fPath & "\[" & FName & "]" & sName & "'!" & cellRange
.Value = .Value
End With
End Sub
Merci
Re bonjour balty
Désolé, je suis nul en VBA, je passe la main
Cordialement
Merci quand même Amadéus, j'espère que quelqu'un d'autre pourra m'aider
Salut le forum
Balty je vais tenter de te répondre
Efface la ligne suivante
Attribute VB_Name = "ValeursDansClasseursFermes"
Modifie ton répertoire ici
FName = Dir("c:\Excel\*.xls")
et la aussi
GetValues "c:\Excel", FilesArray(LoopCounter), "Blad1", "a1:c10", place
Remplace Blad1 par le nom de la feuille à récupérer ainsi que la plage A1:C10
Cela devrait déjà régler la majeure partie de tes problème.
Reviens si d'autre question...
Mytå
Génial, j'essaie ça de suite.
Edit: Rah ca tombe mal la journée se termine et je dois partir.
A priori, ca avance deja plus loin, mais ca bug encore à la ligne
.FormulaArray = "='" & fPath & "\[" & FName & "]" & sName & "'!" & cellRange
Le message d'erreur qu'il indique est:
Unable to set the FormulaArray property of the range class.
Peut-être est-ce pqrce que j'ai des cellules fusionnées ?
Je reviens là dessus demain matin.
merci en tt cas.
balty
J'viens de faire plusieurs tests, mais j'obtiens toujours ce message d'erreur (voir plus haut).
As-tu une idée ?
Je joins mes fichiers (à décompresser dans le répertoie C:\Excel\ )
https://www.excel-pratique.com/~files/doc/Excel.zip (c'est un fichier RAR renommé en ZIP pour qu'il soit accepté)
Merci,
balty
Évidemment, suffit que j'envoie un message pour que mon test suivant soit concluant...
Ca marche avec des fichiers "neufs". J'vais faire d'autres tests
Voilà, finalement, ça fonctionne bien. Sauf que le résultat est collé seulement dans 3 colonnes et sur 10 lignes.
Mon but est de coller les valeurs des cases J2:BK55 de chaque feuille vers ma page les cases A2:BB55 A57:B111 A112:BB165 etc etc
Autrement dit, je crois qu'il faut modifier cette ligne, mais je ne parviens pas à comprendre la logique.
place = Range(Cells((((x - 1) * 10) + 2), 1), Cells(((x * 10)), 3)).Address
Sub LoopThruFiles()
'Ron De Bruin, mpep
Dim place As String
Dim FilesArray() As String, FileCounter As Integer
Dim FName As String, LoopCounter As Integer
FName = Dir("c:\Excel\*.xls")
Do While Len(FName) > 0
FileCounter = FileCounter + 1
ReDim Preserve FilesArray(1 To FileCounter)
FilesArray(FileCounter) = FName
FName = Dir()
Loop
If FileCounter > 0 Then
Application.ScreenUpdating = False
For LoopCounter = 1 To FileCounter
x = LoopCounter
'calcul de la plage de destination
place = Range(Cells((((x - 1) * 10) + 2), 1), Cells(((x * 10)), 3)).Address
GetValues "c:\Excel", FilesArray(LoopCounter), "Sheet1", "J2:K55", place
Next
Application.ScreenUpdating = True
End If
End Sub
Sub GetValues(fPath As String, FName As String, sName, _
cellRange As String, place As String)
'recopie une plage des valeurs externes dans une plage de
'la feuille active sous forme d'une formule matricielle
With ActiveSheet.Range(place)
.FormulaArray = "='" & fPath & "\[" & FName & "]" & sName & "'!" & cellRange
.Value = .Value
End With
End Sub
Merci encore une fois de m'aider.
balty
RÉSOLU !!
Merci le forum
'récupère dans une série de classeurs fermés (dans le même répertoire)
'les valeurs d'une plage et les écrit dans la feuille active
Sub LoopThruFiles()
'Ron De Bruin, mpep
Dim place As String
Dim FilesArray() As String, FileCounter As Integer
Dim FName As String, LoopCounter As Integer
FName = Dir("c:\Excel\*.xls")
Do While Len(FName) > 0
FileCounter = FileCounter + 1
ReDim Preserve FilesArray(1 To FileCounter)
FilesArray(FileCounter) = FName
FName = Dir()
Loop
If FileCounter > 0 Then
Application.ScreenUpdating = False
For LoopCounter = 1 To FileCounter
x = LoopCounter
'calcul de la plage de destination
place = Range(Cells((((x - 1) * 55) + 1), 1), Cells(((x * 55)), 55)).Address
GetValues "c:\Excel", FilesArray(LoopCounter), "Sheet1", "J2:BK55", place
Next
Application.ScreenUpdating = True
End If
End Sub
Sub GetValues(fPath As String, FName As String, sName, _
cellRange As String, place As String)
'recopie une plage des valeurs externes dans une plage de
'la feuille active sous forme d'une formule matricielle
With ActiveSheet.Range(place)
.FormulaArray = "='" & fPath & "\[" & FName & "]" & sName & "'!" & cellRange
.Value = .Value
End With
End Sub
Note qu'il ne faut pas laisser le fichier dans le meme répertoire que celui des fichiers à importer.