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

8lio-2.zip (12.35 Ko)

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.

Rechercher des sujets similaires à "import feuilles externes seule"