Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Sélection multidossier

8 réponses
Avatar
HD
Bonjour,

Pour sélectionner plusieurs fichiers, pas de souci, j'utilise :
Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = True
Application.FileDialog(msoFileDialogFilePicker).Show

Par contre... je voudrais pouvoir avoir une multisélection de dossiers...
mais la propriété AllowMultiSelect ne s'applique pas à :
Application.FileDialog(msoFileDialogFolderPicker)

Avez vous une astuce ? en passant par une autre boîte de dialogue ?

Cordialement,

HD

8 réponses

Avatar
MichD
Bonjour,

As-tu essayé dans l'explorateur Windows, si tu pouvais sélectionner 2
sous-répertoires
d'un même répertoire? La réponse s'y trouve!

Cependant, rien ne t'empêche d'afficher cette boîte de dialogue autant de
fois que tu le désires.
Avatar
MichD
Bonjour,

Voici un fichier exemple. http://cjoint.com/?BFeuSm05UoL

À chaque fois que l'usager ouvre le classeur et change de feuille,
l'information suivante est consignée dans un fichier .csv

- Nom de l'usager
- Nom de la feuille
- Heure à laquelle il a changé de feuille
- Si la durée de consultation t'intéresse, quand tu ouvres ton fichier .csv
dans Excel
il ne te reste plus qu'à utiliser une petite formule dans la colonne à
droite.

Et à chaque fois que l'usager ouvre le fichier, le fichier .csv indique
l'heure d'ouverture.

Tout le code doit être inscrit dans le ThisWorkbook du classeur :
Il ne te reste plus qu'à indiquer le chemin et nom du fichier .csv où
l'information
sera consignée dans la procédure "Sub Fichier_surveillé(Info As String)"

Au besoin, tu pourrais compliquer le tout en utilisant un fichier de macros
complémentaires
dans lequel tu insères un module de classe. Tu insères dans ce module de
classe, l'équivalent
de ce code et tu peux du même coup, exercer un certain contrôle sur tous les
fichiers ouverts.


Dim Ouverture As String
'-------------------------------------------------------
Private Sub Workbook_Open()
Ouverture = ";" & "Ouverture du fichier"
Call Workbook_SheetActivate(ActiveSheet)
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Texte As String

Texte = Environ("UserName") & ";" & Sh.Name & ";" & _
Format(Now(), "DD/MM/YYYY H:MM:SS") & Ouverture
Call Fichier_surveillé(Texte)
If Ouverture <> "" Then Ouverture = ""
End Sub
'-------------------------------------------------------
Sub Fichier_surveillé(Info As String)
Dim DestFile As String, X As Long

'***************************************************
'Variable à définir - Lieu et nom du fichier .csv
'Où sont sauvegarder les données.
DestFile = "c:UsersDenisDocumentsText1.csv"
'*****************************************************

X = FreeFile
If Dir(DestFile) <> "" Then
Open DestFile For Append As #X
Else
Info = "Usager;Nom de la feuille;" & _
"Heure d'accès de la feuille;" & vbCrLf & Info
Open DestFile For Output As #X
End If
Print #X, Info
Close #X

End Sub
'-------------------------------------------------------




"HD" a écrit dans le message de groupe de discussion :
jqijjh$cca$

Bonjour,

Pour sélectionner plusieurs fichiers, pas de souci, j'utilise :
Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = True
Application.FileDialog(msoFileDialogFilePicker).Show

Par contre... je voudrais pouvoir avoir une multisélection de dossiers...
mais la propriété AllowMultiSelect ne s'applique pas à :
Application.FileDialog(msoFileDialogFolderPicker)

Avez vous une astuce ? en passant par une autre boîte de dialogue ?

Cordialement,

HD
Avatar
MichD
Désolé, c'est un erreur d'aiguillage.
Avatar
HD
As-tu essayé dans l'explorateur Windows,
si tu pouvais sélectionner 2 sous-répertoires
d'un même répertoire? La réponse s'y trouve!


Je viens de tester et je n'ai pas la possibilité de sélectionner deux
répertoires.

Cependant, rien ne t'empêche d'afficher cette
boîte de dialogue autant de fois que tu le désires.


Le souci, c'est que si j'ai 30 répertoires à sélectionner cela risque de me
prendre du temps. Je voudrais pouvoir faire une multisélection comme celle
qui est possible avec Application.FileDialog(msoFileDialogFilePicker) où il
est possible de sélectionner de nombreux fichiers que cela soit par le
clavier+souris avec les touches Ctrl et/ou Shift ou que cela soit
directement en dessinant une zone de sélection avec la souris... ou même
avec le Ctr+a.

(car le problème qui se pose pour moi est que je dois sélectionner certains
répertoires qui sont issus de fichiers zip... chacun de ces répertoires
contiennent des fichiers qui ont tous le même nom sur chacun de ces
répertoires)

Cordialement,

HD
Avatar
MichD
Une suggestion bien que ce n'est pas ce que tu veux,

Il est facile de boucler sur tous les sous-répertoires d'un répertoire
donné.

Au lieu de sélectionner tous les répertoires, tu retenais que le répertoire
parent,
tu pourrais utiliser ce type de code pour obtenir la liste des
sous-répertoires.

'----------------------------------------------------
Sub Afficher_Liste_Dossiers()
Dim FS As Object, F As Object
Dim SF As Object, R As Object
Dim Rep As String, Temp As String

Rep = "c:" 'Répertoire de ton choix

Set FS = CreateObject("Scripting.FileSystemObject")
Set F = FS.GetFolder(Rep)
Set SF = F.SubFolders
For Each R In SF
Temp = Temp & R.Name & vbCrLf
Next
MsgBox Temp
End Sub
'----------------------------------------------------

Tu peux toujours afficher dans un "ListBox" tous les répertoires d'un chemin
particulier
et demander à l'usager de faire la sélection des répertoires dans le listbox
à traiter!


"HD" a écrit dans le message de groupe de discussion :
jqkb07$11k5$

As-tu essayé dans l'explorateur Windows,
si tu pouvais sélectionner 2 sous-répertoires
d'un même répertoire? La réponse s'y trouve!


Je viens de tester et je n'ai pas la possibilité de sélectionner deux
répertoires.

Cependant, rien ne t'empêche d'afficher cette
boîte de dialogue autant de fois que tu le désires.


Le souci, c'est que si j'ai 30 répertoires à sélectionner cela risque de me
prendre du temps. Je voudrais pouvoir faire une multisélection comme celle
qui est possible avec Application.FileDialog(msoFileDialogFilePicker) où il
est possible de sélectionner de nombreux fichiers que cela soit par le
clavier+souris avec les touches Ctrl et/ou Shift ou que cela soit
directement en dessinant une zone de sélection avec la souris... ou même
avec le Ctr+a.

(car le problème qui se pose pour moi est que je dois sélectionner certains
répertoires qui sont issus de fichiers zip... chacun de ces répertoires
contiennent des fichiers qui ont tous le même nom sur chacun de ces
répertoires)

Cordialement,

HD
Avatar
HD
Une suggestion bien que ce n'est pas ce que tu veux,
Il est facile de boucler sur tous les sous-répertoires
d'un répertoire donné. Au lieu de sélectionner tous
les répertoires, tu retenais que le répertoire parent,
tu pourrais utiliser ce type de code pour obtenir la liste des
sous-répertoires.


C'est la solution que je vais retenir... en sachant que cela risque d'être
problèmatique pour certains utilisateurs qui ont peur des copier/coller...
Dommange que le vba ne permettent pas la multisélection de répertoires...

En tout cas, MERCI pour votre aide.

@+
HD
Avatar
isabelle
bonjour HD,

tu pourrais mettre la liste des répertoires dans un ListBox (Multiselect) et laisser l'utilisateur choisir.

--
isabelle



Le 2012-06-05 10:24, HD a écrit :
Une suggestion bien que ce n'est pas ce que tu veux,
Il est facile de boucler sur tous les sous-répertoires
d'un répertoire donné. Au lieu de sélectionner tous
les répertoires, tu retenais que le répertoire parent,
tu pourrais utiliser ce type de code pour obtenir la liste des
sous-répertoires.


C'est la solution que je vais retenir... en sachant que cela risque d'être
problèmatique pour certains utilisateurs qui ont peur des copier/coller...
Dommange que le vba ne permettent pas la multisélection de répertoires...

En tout cas, MERCI pour votre aide.

@+
HD


Avatar
HD
tu pourrais mettre la liste des répertoires dans un
ListBox (Multiselect) et laisser l'utilisateur choisir.



Effectivement, très bonne idée, je n'y avais pas songé. J'ai commencé le
script pour lire tout les sous-répertoires d'un répertoire principal de
"fusion". Je verrai pour modifier mon script plus tard afin d'y ajouter un
listbox multisélection.

@+
HD