Copie d'une plage d'un fichier sur des centaines d'autres
Bonjour à tous,
Je dois copier une plage de données (d'opérations plus précisément) présentes sur un doc excel sur un millier de documents (je veux calculer une moyenne et variance sur chaque doc en fait). Problème, je pars de zéro en prog/macros
Tous les fichiers sont dans un même répertoire, au même format. Seules les valeurs changent.
Les valeurs couvrent les 4 premières colonnes. La partie que je veux coller sur chaque fichier se trouve sur un fichier à part et couvre les colonnes E jusqu'à AM incluse.
Il faudrait que ça puisse copier-coller l'opération à faire pour que ça marche.
J'ai essayé d'enregistrer une macro, mais le nom des fichiers étant différent, ça ne marche évidemment pas.
merci pour les idées ou toute sorte d'aide que vous pourrez m'apporter
Bonjour,
Il est possible de créer une macro, qui dans une feuille de ton classeur possedant ce que tu as à copier , répertorie les fichiers qui sont dans ton dossier,
à partir de la tu devrais par la suite pouvoir ouvrir les fichiers un par un via une boucle et copier ce que tu veux dedans,
Ai je bien cerné le probleme et synthétiser ce que je définirai comme ton besoin?
Dans un module tu places ce code
Public Sub Referencement(strDossier As String)
Dim fso As Object, Dossier As Object, ssDossier As Object, Fichier As Object
Dim X As Integer, lenDossier As Long, nbFichier As Integer, i As Integer
'FSO =File System Object
'Dossier = sélection du dossier sélectionné
'ssDossier= sous-dossier du Dossier selectionné
'Fichier= fichier analysé
Application.ScreenUpdating = False
Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.getfolder(strDossier)
Set ssDossier = fso.getfolder(strDossier).subFolders
lenDossier = Len(strDossier)
nbFichier = 0
i = 0
For Each Fichier In Dossier.Files
nbFichier = nbFichier + 1
Next Fichier
For Each ssDossier In Dossier.subFolders
For Each Fichier In ssDossier.Files
nbFichier = nbFichier + 1
Next Fichier
Next ssDossier
For Each Fichier In Dossier.Files
X = ThisWorkbook.Sheets("ListeFichier").Range("A65536").End(xlUp).Row
ThisWorkbook.Sheets("ListeFichier").Range("A" & X + 1).Value = VBA.Mid(Fichier, lenDossier + 2)
i = i + 1
Application.StatusBar = i & " Fichier(s) traité(s) sur " & nbFichier 'ça indique la progression
Next Fichier
Set fso = Nothing
Application.ScreenUpdating = True
Application.StatusBar = False
End Subdans le module thisworkbook
tu place cela
Private Sub Workbook_Open()
Dim lgChemin As Long
Dim strChemin as string
If MsgBox("Lancer le programme", vbYesNo, "Lancement macro") = vbYes Then
With Application.FileDialog(msoFileDialogFolderPicker)
.Show
lgChemin = .SelectedItems.Count
strChemin = .SelectedItems(lgChemin)
End With
Referencement strChemin
end if
end subDonc ces codes vont te permettre de liste dans l'onglet listeFichier (qu'il faut créer avant de lancer la macro) tous les fichiers présent dans le dossier que tu auras à choisir apres avoir cliqué sur OUI à l'affichage du message
Merci beaucoup, j'ai réussi en me basant sur ton code