Sub Detruire_dossiers()
Dim chemin$, a, fso As Object, dossier, sf As Object, fichier As Object
chemin = ThisWorkbook.Path & "\"
a = Array("Factures", "Relevés Situation Packs")
Set fso = CreateObject("Scripting.FileSystemObject")
For Each dossier In a
For Each sf In fso.GetFolder(chemin & dossier).SubFolders
For Each fichier In sf.Files
fso.MoveFile chemin & dossier & "\" & sf.Name & "\" & fichier.Name, chemin & dossier & "\" & fichier.Name
Next fichier
RmDir chemin & dossier & "\" & sf.Name 'supprime le sous-dossier
Next...
Sub Deplacements()
'
Call Deplacer(ThisWorkbook.Path & "\Factures")
Call Deplacer(ThisWorkbook.Path & "\Relevés Situation Packs")
End Sub
Sub Deplacer(DossierSource As String)
'
Set fso = CreateObject("Scripting.FileSystemObject")
For Each MonFichier In fso.GetFolder(DossierSource).Files
PosEspace = InStr(MonFichier.Name, " ")
PosEspace = InStr(PosEspace + 1, MonFichier.Name, " ")
DossierCible = DossierSource & "\" & Left(MonFichier.Name, PosEspace - 1)
If Len(Dir(DossierCible, vbDirectory)) = 0 Then MkDir DossierCible
fso.MoveFile DossierSource & "\" & MonFichier.Name, DossierCible & "\" & MonFichier.Name
Next MonFichier
End Sub
Sub Replacements()
'
Call Replacer(ThisWorkbook.Path & "\Factures")
Call Replacer(ThisWorkbook.Path & "\Relevés Situation Packs")
End Sub
Sub Replacer(DossierCible As String)
'
Set fso = CreateObject("Scripting.FileSystemObject")
For Each MonDossier In fso.GetFolder(DossierCible).SubFolders
For Each MonFichier In fso.GetFolder(MonDossier).Files
fso.MoveFile MonDossier & "\" & MonFichier.Name, DossierCible & "\" & MonFichier.Name
Next MonFichier
RmDir MonDossier
Next MonDossier
End Sub
Sub Detruire_dossiers()
Dim chemin$, a, fso As Object, dossier, sf As Object, fichier As Object
chemin = ThisWorkbook.Path & "\"
a = Array("Factures", "Relevés Situation Packs")
Set fso = CreateObject("Scripting.FileSystemObject")
For Each dossier In a
For Each sf In fso.GetFolder(chemin & dossier).SubFolders
For Each fichier In sf.Files
fso.MoveFile chemin & dossier & "\" & sf.Name & "\" & fichier.Name, chemin & dossier & "\" & fichier.Name
Next fichier
RmDir chemin & dossier & "\" & sf.Name 'supprime le sous-dossier
Next sf, dossier
End Sub
Ben ça fait la même chose que les macros de job75, sauf que moi je ne modifie pas les prénoms composés avec tiret, je laisse tout tel que c'est.Je vais tester ta proposition tout à l'heure et je reviendrai
Perso, je pense que l'utilisation de séparateurs clairs serait un plus.Evidemment, il y a 10 ans, je n'avais pas pensé à regrouper mes fichiers par client.
Mais maintenant que je le sais, les noms des fichiers seront toujours crées comme ceci :
- pour les factures : MACHINE Mireille - Sonda 27122018 Votre achat Pack Rest 12 RdV - en cours
- pour les relevés : MACHIN Jean-Luc 20221101 Pack Rest 7 RdV - en cours
OUI, je suis d'accord avec toi, c'est comme ça que je les nomme maintenant.Perso, je pense que l'utilisation de séparateurs clairs serait un plus.
Par exemple <Espace><Underscore><Espace> :
NOM Prénom _ Facture _ aaaa-mm-jj _ Libellé _ Complément
NOM Prénom _ Relevé _ aaaa-mm-jj _ Libellé _ Complément
Je suis surpris que tes factures n'aient pas chacune un numéro unique.
Et tes clients n'ont pas non plus chacun un numéro unique de client ?
Type Fichier
Fichier As String
Nom As String
Date As String
rest As String
NewName As String
End Type
Sub test()
With DecoupFichier("Machin Jean-Luc - 18122017 Votre achat Pack Rest 14 RdV")
Debug.Print .Fichier, .Nom, .Date, .rest, .NewName
End With
With DecoupFichier("Truc Sylvie 20210908 Votre Fact Achat Pac,")
Debug.Print .Fichier, .Nom, .Date, .rest, .NewName
End With
With DecoupFichier("- Autre Danièle 12082016 2 100")
Debug.Print .Fichier, .Nom, .Date, .rest, .NewName
End With
End Sub
Function DecoupFichier(F As String) As Fichier
Dim Start As Integer, Stope As Integer
With CreateObject("VBScript.RegExp")
.IgnoreCase = True
.Pattern = "[0-9]"
With .Execute(F)
Start = .Item(0).FirstIndex
End With
.Pattern = "[0-9] |10000000"
With .Execute(F)
Stope = .Item(0).FirstIndex
End With
End With
DecoupFichier.Fichier = F
DecoupFichier.Nom = Replace(Trim(Replace(Trim(Left(F, Start)), "-", " ")), " ", "_")
If IsDate(Format(Mid(F, Start + 1, Stope - Start + 1), "@@-@@-@@@@")) Then
DecoupFichier.Date = Format(CDate(Format(Mid(F, Start + 1, Stope - Start + 1), "@@-@@-@@@@")), "YYYY-MM-DD")
Else
DecoupFichier.Date = Format(CDate(Format(Mid(F, Start + 1, Stope - Start + 1), "@@@@-@@-@@")), "YYYY-MM-DD")
End If
DecoupFichier.rest = Trim(Right(F, Len(F) - Stope - 1))
DecoupFichier.NewName = DecoupFichier.Nom & " " & DecoupFichier.Date & " " & DecoupFichier.rest
End Function
Bonjour à tous,OUI, je suis d'accord avec toi, c'est comme ça que je les nomme maintenant.
"Je suis surpris que tes factures n'aient pas chacune un numéro unique.
Et tes clients n'ont pas non plus chacun un numéro unique de client ?"
Je comprends ta surprise. Mais c'est spécial et pas de souci.
Ca aurait simplifié la dénomination des fichiers.Je comprends ta surprise. Mais c'est spécial et pas de souci.
Ce n'est pas ce que tu avais dit en #33 où le format de dénomination était un peu n'importe quoi :OUI, je suis d'accord avec toi, c'est comme ça que je les nomme maintenant.
C'est pour ça que je te proposais un format un peu plus structuré.Mais maintenant que je le sais, les noms des fichiers seront toujours crées comme ceci :
- pour les factures : MACHINE Mireille - Sonda 27122018 Votre achat Pack Rest 12 RdV - en cours
- pour les relevés : MACHIN Jean-Luc 20221101 Pack Rest 7 RdV - en cours
Et donc ???Je vais tester ta proposition tout à l'heure et je reviendrai
bonjour TooFatBoyEt donc ???
Mais comme par hasard tu préfères la solution de job (bien qu'elle soit moins bonne)...C'est bon, ça marche aussi
Re-Bjr,Mais comme par hasard tu préfères la solution de job (bien qu'elle soit moins bonne)...
D'ailleurs, tu feras gaffe : à force de cocher ses réponses sans mêmes regarder, ici tu as coché une réponses de job quine répond pas à la question de ton fil.
Sur ce, bon dimanche à tous
Adios amigos