MACRO ouvrir tous les .csv dossiers+sousDoss

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
M
Malorie
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 9 décembre 2015
Version d'Excel : 2010

Message par Malorie » 9 décembre 2015, 17:36

Bonjour à tous,

Je me tourne vers vous car je suis débutante en VBA même si j'ai quelques notions de code, et là j'arrive au bout de mes forces.

Je souhaiterai créer une macro à laquelle je vais indiquer une chemin de dossiers (par ex : :C\Users\NouveauDossier) afin qu'elle ouvre tous les fichiers .csv contenus dans les dossiers et sous-dossiers et sous-sous-dossiers du dossier indiqué (:C\Users\NouveauDossier), et accessoirement qu'elle les enregistre au même endroit en .xlsx

Pourriez-vous me donner un coup de main svp ?

J'ai essayé de trouver des codes sur internet mais rien ne fonctionne et j'ai des erreurs que je ne comprends pas...

Merci d'avance !
p
patrick1957
Passionné d'Excel
Passionné d'Excel
Messages : 3'121
Appréciations reçues : 33
Inscrit le : 24 août 2015
Version d'Excel : 2007-2010-2016 PC

Message par patrick1957 » 9 décembre 2015, 21:45

Bonjour,

voici un essai en 2 étapes à faire depuis un classeur vierge

à copier dans un module VBA par ALT-F11/Insertion/module
il va
1) ouvrir tous les fichies CSV d'un répertoire -- Sub SelectionnerCSV()
2) Sauver ces fichiers au format "xlsx" -- Sub SauverSousXl()

Bon..je ne suis pas spécialiste de ce genre de code, donc à essayer dans un seul et même répertoire en copie de sécurité :)

P.
Sub SelectionnerCSV()
' Affichage de la boîte de dialogue standard "Ouvrir" pour sélection de(s) fichier (s)
  Nomfich = Application.GetOpenFilename(Title:="Ouverture des fichiers CSV", MultiSelect:=True)
  ' si aucun choix effectué, sortie du programme
  If TypeName(Nomfich) = "Boolean" Then
  'MsgBox("Aucun fichier n'a été sélectionné. Fin de la procédure", vbCritical + vbOKOnly,"Sortie")
    Exit Sub
  End If
  ' si choix
  If UBound(Nomfich) > 1 Then
    Dim rep As Long
    Dim Liste As String
    Dim compteur As Byte
    For compteur = 1 To UBound(Nomfich)
      Liste = Liste & vbCr & Nomfich(compteur)
    Next compteur
  'affichage de l'ensemble de la liste des fichiers et proposition d 'ouverture
    rep = MsgBox("Voici la liste des fichiers CSV sélectionnés." _
               & Liste & vbCr & "Voulez-vous les ouvrir ?", vbYesNo + vbQuestion, "Ouvrir les fichiers CEXP ?")
  'ouverture des fichiers en cas de réponse positive
    If rep = vbYes Then
      For compteur = 1 To UBound(Nomfich)
        Workbooks.Open Filename:=Nomfich(compteur)
      Next compteur
    End If
  Else
    Workbooks.Open Filename:=Nomfich(1)  'si un seul fichier a été sélectionné, il est ouvert
  End If
End Sub
Sub SauverSousXl()
Dim FileFormatNum As Long
Dim wbk As Workbook
  For Each wbk In Workbooks
    wbk.Activate
    If wbk.Windows(1).Visible Then
    nfile = ActiveWorkbook.name
    ext = Right(ActiveWorkbook.name, 4)
    If ext <> ".csv" Then GoTo suivant
    Filename = Left(nfile, InStrRev(nfile, ".") - 1)
    Set Destwb = ActiveWorkbook
  'Determine the Excel version and file extension/format
    With Destwb
      If Val(Application.Version) < 12 Then
  'You use Excel 97-2003
        FileExtStr = ".xls": FileFormatNum = -4143
      Else
  'You use Excel 2007-2013
        Select Case Destwb.FileFormat
        Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
        Case 52:
          If .HasVBProject Then
            FileExtStr = ".xlsm": FileFormatNum = 52
          Else
            FileExtStr = ".xlsx": FileFormatNum = 51
          End If
        Case 56: FileExtStr = ".xls": FileFormatNum = 56
        Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
        End Select
      End If
    End With
    ActiveWorkbook.SaveAs Filename:=Filename & ".xlsx", FileFormat:=51, CreateBackup:=False
  
  'nomClasseur = Application.GetSaveAsFilename(fileFilter:="Excel Files (*.xls), *.xls")
  '    ActiveWorkbook.SaveAs Filename:=Application.GetSaveAsFilename( _
       fileFilter:="Excel Files (*.xls), *.xls")
    ActiveWorkbook.Close
suivant:
End If
  Next ' i
End Sub
Je fais du géocaching et vous ?
Indentez vos codes VBA, ---> http://www.oaltd.co.uk/Indenter/Default.htm
A lire pour les débutants: http://www.xlerateur.com/divers/2010/05 ... nnees-612/
M
Malorie
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 9 décembre 2015
Version d'Excel : 2010

Message par Malorie » 10 décembre 2015, 08:36

Bonjour bonjour,

Merci beaucoup pour le coup de main, le premier code me permet de sélectionner le fichier à ouvrir grâce à une boîte de dialogue, le second me permet d'enregistrer le fichier ouvert .csv en xlsx, tout fonctionne !

C'est déjà un énorme pas pour moi, j'aimerai juste pouvoir faire en sorte que lorsque que je designe un dossier dans la boîte de dialogue, il ouvre TOUS les fichiers .csv contenu dans le dossier et les sous-dossier, pour le moment il se contente d'ouvrir le fichier dans le premier dossier si je le sélectionne.

Et la cerise sur le gateau serait qu'il les ouvre tous, les convertisse et les enregistrent en xlsx automatiquement dans le repertoire où ils sont déjà et les ferment.
Je pense pouvoir m'arranger pour la fermeture autiomatique mais j'ai un peu de mal à imbriquer plusieurs codes compliqué dans la même macro.

Donc si vous avez des idées, je suis toute ouïe :)

Merci encore !
p
patrick1957
Passionné d'Excel
Passionné d'Excel
Messages : 3'121
Appréciations reçues : 33
Inscrit le : 24 août 2015
Version d'Excel : 2007-2010-2016 PC

Message par patrick1957 » 10 décembre 2015, 08:56

re,

le code permet d'ouvrir PLUSIEURS csv en même temps; il suffit de choisir un et puis CTRL ou SHIFT (majuscule provisoire) pour en sélectionner +
Je fais du géocaching et vous ?
Indentez vos codes VBA, ---> http://www.oaltd.co.uk/Indenter/Default.htm
A lire pour les débutants: http://www.xlerateur.com/divers/2010/05 ... nnees-612/
M
Malorie
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 9 décembre 2015
Version d'Excel : 2010

Message par Malorie » 10 décembre 2015, 10:22

Merci,

Ce code permet bien d'ouvrir plusieurs fichiers en même temps mais seulement s'ils se trouvent dans le même dossier il me semble.
Ce que j'aimerai pouvoir faire c'est ouvrir tous les fichiers .csv d'une arborescence descendante.

J'illustre mon propos:


Dossier 1 contient - Fichier1.csv

- Dossier 2 contient - Dossier2BIS - contient Fichier4.csv
- Fichier2.csv
- Fichier3.csv

- Dossier 3 contient - Dossier 3BIS - contient Fichier6.csv
- contient Fichier7.csv

- Dossier 3TER - contient Fichier8.csv

- Fichier5.csv

Voilà, je ne sais pas si c'est très clair mais j'essaye ^^
En gros je voudrais pouvoir indiquer le chemin du premier dossier: Dossier1, et qu'il me convertisse en xlsx tous les fichiers .csv de l'arborescence complète.

Avec le code actuel, je ne peux seléctioner que les fichiers dans un même dossier.

Voili voilou,

N'hésitez pas si vous avez d'autres questions !

Et merci encore ;)
M
Malorie
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 9 décembre 2015
Version d'Excel : 2010

Message par Malorie » 10 décembre 2015, 11:07

Oups, la mise en page à complètement changé par rapport à ce que je voulais faire dans mon message précédent, du coup c'est très flou ^^

En gros, j'ai un dossier principal dont je connais le chemin

Dans ce dossier il y a à la fois des fichiers CSV et des sous dossiers

Dans ces sous dossiers il y a à la fois des fichiers CSV et des sous-sous dossiers

Dans les sous-sous dossiers il y a des fichiers CSV

Je voudrai pouvoir ouvrir automatiquement par une macro, TOUS les fichiers CSV contenus dans l'intégralié de l'arborescence descendante du dossier principal

D'ailleurs, je n'ai même âs besoin de les ouvrir, je veux juste les convertir en xlsx et les enregistrer au même endroit

C'est compliqué ^^
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message