Bonjour,
l'utilisation de l'objet File System Object permet notamment la manipulation des dossiers.
L'utilisation de la méthode Copy associée à la méthode GetFolder permet de dupliquer d'un bloc le dossier source, ses sous-dossiers et les fichiers que les dossiers contiennent.
Il arrive cependant qu'un dossier contienne une icône personnalisée, lui permettant un affichage distinctif (pour personnaliser l'affichage du dossier : clic droit sur le dossier>"Propriétés">onglet "Personnaliser"'>"Changer d'icône">choisir une icône>clic sur le bouton OK>clic sur le bouton OK).
Dans le cas où le dossier est personnalisé, celui-ci n'est pas activé lors de sa duplication.
Je vous livre donc une procédure qui permet l'affichage personnalisé des dossiers lors de leur duplication.
Pour les besoins de la démonstration :
- le dossier source (contenant le dossier maître, ses sous-dossiers et les fichiers que les dossiers contiennent) doit être placé sur le bureau et doit être nommé "dossier_source" ;
- le dossier dupliqué sera créé sur le bureau lors du lancement de la procédure et sera nommé "dossier_dupliqué".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 'Activer les references Microsoft Scripting RunTime et Windows Script Host Object Model 'si utilisation de liaison anticipée. Option Explicit Dim oFSO As Object 'New FileSystemObject Const SourceFolderName As String = "dossier_source" 'nom du dossier source Const DuplicFolderName As String = "dossier_dupliqué" 'nom du dossier dupliqué Sub DuplicateCustomFolders() Dim SourceFolderPath As String Dim DuplicFolderPath As String SourceFolderPath = GetDesktopFolder & "\" & SourceFolderName 'chemin sur le bureau du dossier source DuplicFolderPath = GetDesktopFolder & "\" & DuplicFolderName 'chemin sur le bureau du futur dossier dupliqué Set oFSO = CreateObject("Scripting.FileSystemObject") 'New Scripting.FileSystemObject 'si le dossier source n'est pas détecté on stoppe la procédure If Not oFSO.FolderExists(SourceFolderPath) Then MsgBox "Dossier source non trouvé": GoTo fin 'si le dossier dupliqué existe on le supprime If oFSO.FolderExists(DuplicFolderPath) Then oFSO.DeleteFolder (DuplicFolderPath) 'on crée le dossier dupliqué contenant l'intégralité du dossier source mais à ce stade 'les dossiers dupliqués ne sont pas personnalisés lorsque "dossier_dupliqué" est créé oFSO.GetFolder(SourceFolderPath).Copy DuplicFolderPath, False 'activation des fichiers desktop.ini pour personnaliser les dossiers dupliqués DesktopIni DuplicFolderPath fin: Set oFSO = Nothing End Sub 'structure récursive inspirée d'un code d'AlainTech Sub DesktopIni(strFolderName As String) Dim oFolder As Object 'Scripting.Folder Dim oSubFolder As Object 'Scripting.Folder Set oFolder = oFSO.GetFolder(strFolderName) If oFSO.FileExists(strFolderName & "\desktop.ini") Then 'Le dossier possède un attribut système SetAttr oFolder.Path, vbSystem 'Le fichier desktop.ini possède les attributs système et caché SetAttr oFolder.Path & "\desktop.ini", vbSystem + vbHidden End If For Each oSubFolder In oFolder.SubFolders DesktopIni oSubFolder.Path Next oSubFolder End Sub 'Récupère le chemin du bureau Function GetDesktopFolder() As String Dim oShell As Object 'WshShell Set oShell = CreateObject("WScript.Shell") 'New WshShell GetDesktopFolder = oShell.SpecialFolders("Desktop") End Function
Procédure testée avec succès sur Windows10/Excel 2010 64 bits et Windows7/Excel 2007.
A adapter de votre côté si l'emplacement du dossier source et/ou celui du dossier dupliqué ne sont pas placés sur le bureau.
Je suis parti du principe que vous pouviez construire vous-même un dossier maître personnalisé contenant des sous-dossiers personnalisés ou non (et éventuellement des fichiers) mais je peux éventuellement en joindre un si vous le jugez utile.
N'hésitez pas à me faire part de vos remarques et à me communiquer le résultat de vos tests en indiquant votre configuration version Windows/version d'Excel.
A+
Partager