Ouvrir et fermer classeur avec nom changeant
Bonjour !
Alors voilà la situation ! Chaque jour je dois extraire d'un ERP 100 fichiers csv dont les dénominations ont toujours la même base mais un suffixe différent à chaque extract.
ex :
Fichier 1 : A001-67831286
Fichier 2 : B002-65265216
Fichier 3 : C003-09120838
...
J'ai un fichier master dans lequel je viens copier coller les data de chaque fichier pour compiler. (pour info je copie colle sur 100 feuilles différentes (une par extract) et une feuille master vient cherche chercher les données de chaque feuille, afin de compiler.)
Donc,
Je souhaiterais automatiser cette extraction mais le fait que le suffixe change me fais bugguer ma macro. Sauriez-vous m'aider sur ce sujet svp ?
Pas besoin de simuler 100 fichiers, je démultiplierais et adapterais le code en conséquence de mon côté, j'ai juste besoin de l'exemple basique pour réussir à le faire sur un fichier/extract ! :)
Bien cordialement,
bonjour,
une proposition à adapter
Sub aargh()
chemin = "d:\mescsv\"
nompartiel = "A001-"
nomfichier = Dir(chemin & nompartiel & "*")
If nomfichier <> "" Then
'ouvrir et traiter ton fichier chemin &nomfichier
Else
MsgBox "fichier " & chemin & nompartiel & " non trouvé"
End If
End Subnomfichier contiendra le nom du premier fichier qui correspond au nom partiel.
Hello,
merci pour ton début de réponse déjà !
J'ai vraiment que les bases sur VBA donc est ce que ça te dérangerais de faire le code pour 2 exemples et, pour l'exemple, de simplement copier la cellule A1 de l'extract 1 sur la feuil1 (classeur master) et la cellule A1 de l'extract 2 sur la feuil2 (classeur master) ? Parce qu'avec ton code je ne sais pas ce que je dois doubler ou non. Et puis je n'arrive pas à ouvrir les extracts...
Merci pour le temps accordé !
rebonjour,
voici une façon de faire. Mais cela peut certainement être optimisé en fonction de ce que tu veux faire (ne pas ajouter un onglet par fichier, powerquery, ...)
Option Explicit
Sub aargh()
Dim wbm As Workbook, wb As Workbook, ws As Worksheet
Dim chemin As String, nomfichier As String, nompartiel As String
Dim listedesnomspartiels
Dim i As Long
Set wbm = ThisWorkbook 'wbm =classeur master
chemin = "d:\downloads\" 'répertoire contenant les fichiers CSV
listedesnomspartiels = Split("A001,B002,C003", ",") ' liste des noms partiels des fichiers à ouvrir
For i = LBound(listedesnomspartiels) To UBound(listedesnomspartiels) 'on parcourt la liste des fichiers csv à ouvrir
nompartiel = listedesnomspartiels(i) 'on prend l'élément i de la listedesnomspartiels
'on supprime l'onglet du nom nompartiel, s'il est présent dans le classeur master
On Error Resume Next 'passer à l'instruction suivante si on rencontre une erreur (ici l'erreur possible est que l'onglet n'existe pas,ce qui va générer une erreur si essaie de le supprimer)
Application.DisplayAlerts = False 'on désactive les messages de confirmation
wbm.Sheets(nompartiel).Delete ' suppression de l'onglet
Application.DisplayAlerts = True 'on réactive les messages de confirmation
On Error GoTo 0 'on réenclenche la gestion standard des erreurs par VBA
nomfichier = Dir(chemin & nompartiel & "*") 'on recherche le premier fichier dont le nom correspond au nom partiel
If nomfichier <> "" Then 'si un fichier existe
Set ws = wbm.Sheets.Add 'on ajoute un onglet au classeur master
ws.Name = nompartiel 'on lui donne nompartiel comme nom
Set wb = Workbooks.Open(chemin & nomfichier) 'on ouvre le fichier csv
ws.Range("A1") = wb.Sheets(1).Range("A1") 'on copie la cellule A1
wb.Close 'on ferme le fichier csv
Else 'si fichier n'existe pas
MsgBox "fichier " & chemin & nompartiel & " non trouvé"
End If
Next i 'on passe au nom partiel suivant de la liste
End SubMerci beaucoup pour le temps accordé, je vais essayer ça la prochaine fois et également m'intéresser à powerquery pour voir si c'est pas plus adapté à ma demande ! :)