Récup données des cellules en fichiers fermés dans un dossier

Darius - 4 avril 2014 à 20:00
 Darius - 7 avril 2014 à 20:01
Bonjour,

Débutant en VBA, j'ai besoin de votre aide et conseil.

L'objectif de la macro :

Récupérer/copier une plage de cellules (A1:A20) situé dans l'onglet "RECAP" de plusieurs fichiers excel (tous du même format) et tous situés dans un seul même dossier (C:\Documents and Settings\michel\dossier\general\excel\) sans l'ouverture des fichiers


Alors j'ai trouvé le code ci-dessous il récupère seulement la cellule A1 de tout les fichiers .xls du dossier, mais je souhaiterai qu'il récupère plutôt la plage de plusieurs cellules "RECAP" (A1:A20).

Merci pour votre aide et merci pour votre partage de connaissance.

---

Sub chercheFichiersFermesV03()
Dim X As Integer, nbFichiers As Integer, Y As Integer
Dim Tableau() As String
Dim Direction As String

Application.ScreenUpdating = False
Direction = Dir("C:\Documents and Settings\michel\dossier\general\excel\*.xls")

Do While Len(Direction) > 0
nbFichiers = nbFichiers + 1
ReDim Preserve Tableau(1 To nbFichiers)
Tableau(nbFichiers) = Direction
Direction = Dir()
Loop

If nbFichiers > 0 Then
For X = 1 To nbFichiers
If Tableau(X) <> ThisWorkbook.Name Then
Y = Y + 1
With ActiveSheet.Cells(Y, 1)
.Formula = "='C:\Documents and Settings\michel\dossier\general\excel\[" & Tableau(X) & "]RECAP" & "'!" & "A1"
.Value = .Value
End With
End If
Next X
End If

Application.ScreenUpdating = True
End Sub

2 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
5 avril 2014 à 15:42
Bonjour,

Avec la ligne :
.Formula = "='C:\Documents and Settings\michel\dossier\general\excel\[" & Tableau(X) & "]RECAP" & "'!" & "A1".Value = .Value
tu pointe que la cellule A1 du fichier fermé
Si tu répètes avec la même syntaxe cette ligne mais avec A2 au lieu de A1, tu auras résolu ton problème... et ainsi 20 fois.
Mais pour simplifier, utilises une boucle pour définir la cellule Ax


For Y=1 to 20
With ActiveSheet.Cells(Y, 1)
.Formula = "='C:\Documents and Settings\michel\dossier\general\excel\[" & Tableau(X) & "]RECAP" & "'!" & "A" & str$(Y).Value = .Value
End With 
NEXT y



0
Bonjour,

Alors j'ai essayé avec la boucle :
For Y=1 to 20
With ActiveSheet.Cells(Y, 1)
.Formula = "='C:\Documents and Settings\michel\dossier\general\excel\[" & Tableau(X) & "]RECAP" & "'!" & "A" & str$(Y).Value = .Value
End With
NEXT y
mais ça ne fonctionne pas...

Alors j'ai fait la 2ème méthode copie de la syntaxe "cellule par cellule" :

Y = Y + 1
With ActiveSheet.Cells(Y, 2)
.Formula = "='C:\Documents and Settings\michel\dossier\general\excel\[" & Tableau(X) & "]RECAP" & "'!" & "A2"

Y = Y + 1
With ActiveSheet.Cells(Y, 3)
.Formula = "='C:\Documents and Settings\michel\dossier\general\excel\[" & Tableau(X) & "]RECAP" & "'!" & "A3"

etc...

ca fonctionne mais il me colle pas les cellules sur la même ligne 1, il décale sur la ligne d'en dessous (A1, B2, C3 etc...)
J'aurai voulu qui me colle toute les infos du fichier1.xls sur la ligne 1
toute les infos du fichier2.xls sur la ligne 2
etc...

On peux pas lui demander une ligne entière ou champs de cellule ?

Avez-vous une idée de la correction a faire ?
Merci pour votre aide.
0
Rejoignez-nous