Ouvrir plusieurs fichiers et copier contenu sur un classeur
Bonjour à tous et Bonne année,
J'essaie de faire une macro qui permettrait à un utilisateur de choisir plusieurs fichiers dans son dossier personnel (fichiers .csv) et qu'ils soient tous placés dans le Classeur Excel, sur des feuilles différentes.
J'ai tout d'abord chercher un moyen d'aller récupérer les fichiers,
En utilisant la fonction :
ChDrive "K"
ChDir "K:\DirTech\22-Service LE\Utilisateurs\Timothé URVOY"
FileToOpen = Application.GetOpenFilename("Text Files (*.csv), *.csv")on retrace le chemin correctement, mais l'utilisateur ne peut ouvrir qu'un fichier à la fois et celui-ci s'ouvre dans un nouveau classeur.
J'ai essayé du coup de m'inspirer de cet exercice (http://www.info-3000.com/vbvba/syntheseplusieursclasseurs/ où l'on ouvre plusieurs classeurs pour copier le contenu les refermer et coller leur contenu sur les feuilles du classeur d'origine. Mon problème étant que je ne peux prévoir ni le nombre de fichiers que l'utilisateur va utiliser, ni leur nom (et c'est surtout ça le problème, puisqu'il me semble qu'il est possible de compter le nombre de fichiers qu'on ouvre, soit en les mettant dans un tableau, soit en plaçant un compteur? mais je suis pas sur pour la deuxième)
J'ai essayé du coup la fonction .GetOpenFilename(..., , , , MultiSelect) en mettant multiselect à True et en essayant de les mettre dans un tableau pour les placer par la suite un à un dans les feuilles du classeur. Mais je rencontre quelques soucis, je dois le programmer avec les coudes parceque jusqu'à maintenant je n'ai pas réussi à le faire fonctionner.
Voilà donc si quelqu'un peut me filer un coup de main, cela m'aiderait grandement.
Merci à ceux qui y jetteront un oeil
Sub loopyarray()
Dim filenames As Variant
' set the array to a variable and the True is for multi-select
filenames = Application.GetOpenFilename(, , , , True)
counter = 1
' ubound determines how many items in the array
While counter <= UBound(filenames)
'Opens the selected files
Workbooks.Open filenames(counter)
' displays file name in a message box
MsgBox filenames(counter)
'increment counter
counter = counter + 1
Wend
End SubJ'ai trouvé ça, je vais voir si j'arrive à trouver un moyen de copier le contenu des fichiers qu'il ouvre, de les placer sur le classeur d'origine et fermer les fichiers juste ouverts.
Sub loopyarray()
Dim filenames As Variant
' set the array to a variable and the True is for multi-select
filenames = Application.GetOpenFilename(, , , , True)
counter = 1
' ubound determines how many items in the array
While counter <= UBound(filenames)
'Opens the selected files
Workbooks.Open filenames(counter)
'Convertis le contenu (Excel regroupe tout dans la colonne A, il faut donc lui redonner sa forme d'origine)
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True
' displays file name in a message box
MsgBox filenames(counter)
' ActiveSheet.Select
'ActiveSheet.Copy
'ActiveSheet.Close
'Sheets.Add
'ActiveSheet.Name = "Nom de la nouvelle feuille"
'increment counter
counter = counter + 1
Wend
End Sub
J'ai mis en commentaire la fonction sur laquelle je me penche, à savoir après l'ouverture du premier classeur sélectionné précedemment. Sélectionner la nouvelle feuille, la copier, refermer le classeur, revenir sur l'ancien classeur, ajouter une feuille et copier le contenu dessus (il me manque la fonction qui permet d'ouvrir le classeur du début)
Ne connaissant pas à l'avance le nom des fichiers, je tente en désignant la nouvelle feuille ouverte comme active mais je ne suis vraiment pas sur du résultat.
Bonjour,
Je coince sur le même problème depuis plusieurs jours,
Comme mis précédemment je cherche à faire une macro qui permette à un utilisateur d'aller chercher des dossiers et de les ouvrir sur un même classeur Excel (une feuille/ fichier)
Pour ce faire j'ai fait les fonctions séparément pour m'assurer qu'elles fonctionnent et voir s'il m'est possible de les utiliser ensemble.
J'ai fait 2 méthodes pour aller chercher les fichiers, la première :
ChDrive "K"
ChDir "K:\...\Utilisateurs\Timothé URVOY"
FileToOpen = Application.GetOpenFilename("Text Files (*.csv), *.csv")
Qui permet à l'utilisateur d'accéder directement à son dossier, mais n'ouvre qu'un fichier à la fois (crée un dossier à chaque fois).
et la seconde avec Application.GetOpenFilename(, , , , True) , qui ouvre tous les fichiers sélectionnés (nécessite de faire le chemin manuellement) sur des classeurs différents, j'ai essayé de mettre une fonction qui collerait le contenu de ses fichiers sur les feuilles du classeur d'origine puis refermerait les fichiers (cette partie n'est pas fonctionnelle).
Les fichiers sont dans le message précedant.
Si quelqu'un pouvait me filer un coup de main là dessus, ça serait d'un grand secours, Merci