OVH Cloud OVH Cloud

Ordre des fichiers dans le FileDialogFilePicker

4 réponses
Avatar
Serge Hipontoise
Bonjour
Je suis en train de me faire une macro permettant d'effectuer certaines
opérations sur un nombre n de fichiers.
Afin de sélectionner les fichiers voulus j'utilise le fileDialog :

Sub MaMacro()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Title = "Sélectionner les fichiers"
If fd.Show = -1 Then
For Each vFichier In fd.SelectedItems
MsgBox vFichier
Next vFichier
End If
End Sub

Donc c'est bien car on peut filtrer les fichiers voulus et - théoriquement
(du moins le pensais-je) - choisir l'ordre de traitement grâce à l'affichage
"Détails" et en triant sur le nom de fichier...
Et bien non !
Pour mes tests, j'utilise 3 fichiers nommés a01.xls, a02.xls, a03.xls En les
triant par nom croissant, il me les traite dans l'ordre : 3,1,2 et
décroissant : 1,3,2.
Donc le tri joue bien, mais sans fonctionner correctement....
Auries-vous uen solution à cette énigme ?
Un grand merci d'avance
Serge

4 réponses

Avatar
michdenis
Bonjour Serge,

Tu peux utiliser quelque chose comme ceci :

'---------------------------------------
Sub RecupNomsFichiers()
Dim Classeurs() As String, I As Long
With Application.FileSearch
.NewSearch
.FileType = msoFileTypeAllFiles
.FileName = "*.XLS"
'Répertoire où doit s'effectuer la recherche
.LookIn = "C:ATravail" 'A DETERMINER !!!
'inclure les sous-répertoires oui ou non?
.SearchSubFolders = False ' or true
If .Execute(SortBy:=msoSortbyFileName, SortOrder:=msoSortOrderAscending) > 0 then
With .FoundFiles
For I = 1 To .Count
Msgbox .Item(I)
Next I
end with
end if
End With
End Sub
'----------------------------


Salutations!




"Serge Hipontoise" a écrit dans le message de news: 43c5d52c$0$24008$
Bonjour
Je suis en train de me faire une macro permettant d'effectuer certaines
opérations sur un nombre n de fichiers.
Afin de sélectionner les fichiers voulus j'utilise le fileDialog :

Sub MaMacro()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Title = "Sélectionner les fichiers"
If fd.Show = -1 Then
For Each vFichier In fd.SelectedItems
MsgBox vFichier
Next vFichier
End If
End Sub

Donc c'est bien car on peut filtrer les fichiers voulus et - théoriquement
(du moins le pensais-je) - choisir l'ordre de traitement grâce à l'affichage
"Détails" et en triant sur le nom de fichier...
Et bien non !
Pour mes tests, j'utilise 3 fichiers nommés a01.xls, a02.xls, a03.xls En les
triant par nom croissant, il me les traite dans l'ordre : 3,1,2 et
décroissant : 1,3,2.
Donc le tri joue bien, mais sans fonctionner correctement....
Auries-vous uen solution à cette énigme ?
Un grand merci d'avance
Serge
Avatar
Serge Hipontoise
Waow ! C'est génial !
En revanche, comment l'adapter au filedialogpicker qui permet, lui, de
sélectionner les fichiers à la main ?
C'est possible ?
Merci
Serge



Bonjour Serge,

Tu peux utiliser quelque chose comme ceci :

'---------------------------------------
Sub RecupNomsFichiers()
Dim Classeurs() As String, I As Long
With Application.FileSearch
.NewSearch
.FileType = msoFileTypeAllFiles
.FileName = "*.XLS"
'Répertoire où doit s'effectuer la recherche
.LookIn = "C:ATravail" 'A DETERMINER !!!
'inclure les sous-répertoires oui ou non?
.SearchSubFolders = False ' or true
If .Execute(SortBy:=msoSortbyFileName,
SortOrder:=msoSortOrderAscending) > 0 then
With .FoundFiles
For I = 1 To .Count
Msgbox .Item(I)
Next I
end with
end if
End With
End Sub
'----------------------------


Salutations!




"Serge Hipontoise" a écrit dans le message de
news: 43c5d52c$0$24008$
Bonjour
Je suis en train de me faire une macro permettant d'effectuer certaines
opérations sur un nombre n de fichiers.
Afin de sélectionner les fichiers voulus j'utilise le fileDialog :

Sub MaMacro()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Title = "Sélectionner les fichiers"
If fd.Show = -1 Then
For Each vFichier In fd.SelectedItems
MsgBox vFichier
Next vFichier
End If
End Sub

Donc c'est bien car on peut filtrer les fichiers voulus et -
théoriquement
(du moins le pensais-je) - choisir l'ordre de traitement grâce à
l'affichage
"Détails" et en triant sur le nom de fichier...
Et bien non !
Pour mes tests, j'utilise 3 fichiers nommés a01.xls, a02.xls, a03.xls En
les
triant par nom croissant, il me les traite dans l'ordre : 3,1,2 et
décroissant : 1,3,2.
Donc le tri joue bien, mais sans fonctionner correctement....
Auries-vous uen solution à cette énigme ?
Un grand merci d'avance
Serge






Avatar
michdenis
Bonjour Serge,

Je te propose ceci :

'-------------------------------------
Sub OpenMultipleFiles()

Dim S(), LesFiltres As String
Dim Title As String
Dim x As Integer, FilterIndex As Integer
Dim Filename As Variant

LesFiltres = "Excel Files (*.xls),*.xls," & _
"Text Files (*.txt),*.txt," & _
"All Files (*.*),*.*"

'Filtre par défaut *.* -> All Files
FilterIndex = 3

'Titre de la boîte de dialogue
Title = "Sélectionner les fichiers à ouvrir..."

'Pour sélectionner le lecteur
CurDir "c:"
'Pour sélectionner le répertoire à l'ouverture
ChDir "c:Atravail"

Filename = Application.GetOpenFilename(FileFilter:=LesFiltres, _
FilterIndex:=FilterIndex, Title:=Title, MultiSelect:=True)

Select Case TypeName(Filename)
Case Is = "Boolean"
'annuler la boîte de dialogue
Exit Sub
Case Is = "String"
'un fichier seulement de sélectionner
ReDim S(1 To 1)
S(1) = Filename
Case Else
ReDim S(1 To UBound(Filename))
S = BubbleSort(Filename)

End Select
For x = LBound(S) To UBound(S)
MsgBox S(x)
Next

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

Function BubbleSort(List As Variant)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp

First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i) > List(j) Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'-------------------------------------


Salutations!


"Serge Hipontoise" a écrit dans le message de news: 43c60825$0$5350$
Waow ! C'est génial !
En revanche, comment l'adapter au filedialogpicker qui permet, lui, de
sélectionner les fichiers à la main ?
C'est possible ?
Merci
Serge



Bonjour Serge,

Tu peux utiliser quelque chose comme ceci :

'---------------------------------------
Sub RecupNomsFichiers()
Dim Classeurs() As String, I As Long
With Application.FileSearch
.NewSearch
.FileType = msoFileTypeAllFiles
.FileName = "*.XLS"
'Répertoire où doit s'effectuer la recherche
.LookIn = "C:ATravail" 'A DETERMINER !!!
'inclure les sous-répertoires oui ou non?
.SearchSubFolders = False ' or true
If .Execute(SortBy:=msoSortbyFileName,
SortOrder:=msoSortOrderAscending) > 0 then
With .FoundFiles
For I = 1 To .Count
Msgbox .Item(I)
Next I
end with
end if
End With
End Sub
'----------------------------


Salutations!




"Serge Hipontoise" a écrit dans le message de
news: 43c5d52c$0$24008$
Bonjour
Je suis en train de me faire une macro permettant d'effectuer certaines
opérations sur un nombre n de fichiers.
Afin de sélectionner les fichiers voulus j'utilise le fileDialog :

Sub MaMacro()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Title = "Sélectionner les fichiers"
If fd.Show = -1 Then
For Each vFichier In fd.SelectedItems
MsgBox vFichier
Next vFichier
End If
End Sub

Donc c'est bien car on peut filtrer les fichiers voulus et -
théoriquement
(du moins le pensais-je) - choisir l'ordre de traitement grâce à
l'affichage
"Détails" et en triant sur le nom de fichier...
Et bien non !
Pour mes tests, j'utilise 3 fichiers nommés a01.xls, a02.xls, a03.xls En
les
triant par nom croissant, il me les traite dans l'ordre : 3,1,2 et
décroissant : 1,3,2.
Donc le tri joue bien, mais sans fonctionner correctement....
Auries-vous uen solution à cette énigme ?
Un grand merci d'avance
Serge






Avatar
Serge Hipontoise
Que dire ? Enorme !
Je suis sans voix ! !!
Un grrrrand merci michdenis :o)
Serge

"michdenis" a écrit dans le message de news:
%
Bonjour Serge,

Je te propose ceci :

'-------------------------------------
Sub OpenMultipleFiles()

Dim S(), LesFiltres As String
Dim Title As String
Dim x As Integer, FilterIndex As Integer
Dim Filename As Variant

LesFiltres = "Excel Files (*.xls),*.xls," & _
"Text Files (*.txt),*.txt," & _
"All Files (*.*),*.*"

'Filtre par défaut *.* -> All Files
FilterIndex = 3

'Titre de la boîte de dialogue
Title = "Sélectionner les fichiers à ouvrir..."

'Pour sélectionner le lecteur
CurDir "c:"
'Pour sélectionner le répertoire à l'ouverture
ChDir "c:Atravail"

Filename = Application.GetOpenFilename(FileFilter:=LesFiltres, _
FilterIndex:=FilterIndex, Title:=Title, MultiSelect:=True)

Select Case TypeName(Filename)
Case Is = "Boolean"
'annuler la boîte de dialogue
Exit Sub
Case Is = "String"
'un fichier seulement de sélectionner
ReDim S(1 To 1)
S(1) = Filename
Case Else
ReDim S(1 To UBound(Filename))
S = BubbleSort(Filename)

End Select
For x = LBound(S) To UBound(S)
MsgBox S(x)
Next

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

Function BubbleSort(List As Variant)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp

First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i) > List(j) Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
BubbleSort = List
End Function
'-------------------------------------


Salutations!


"Serge Hipontoise" a écrit dans le message de
news: 43c60825$0$5350$
Waow ! C'est génial !
En revanche, comment l'adapter au filedialogpicker qui permet, lui, de
sélectionner les fichiers à la main ?
C'est possible ?
Merci
Serge



Bonjour Serge,

Tu peux utiliser quelque chose comme ceci :

'---------------------------------------
Sub RecupNomsFichiers()
Dim Classeurs() As String, I As Long
With Application.FileSearch
.NewSearch
.FileType = msoFileTypeAllFiles
.FileName = "*.XLS"
'Répertoire où doit s'effectuer la recherche
.LookIn = "C:ATravail" 'A DETERMINER !!!
'inclure les sous-répertoires oui ou non?
.SearchSubFolders = False ' or true
If .Execute(SortBy:=msoSortbyFileName,
SortOrder:=msoSortOrderAscending) > 0 then
With .FoundFiles
For I = 1 To .Count
Msgbox .Item(I)
Next I
end with
end if
End With
End Sub
'----------------------------


Salutations!




"Serge Hipontoise" a écrit dans le message
de
news: 43c5d52c$0$24008$
Bonjour
Je suis en train de me faire une macro permettant d'effectuer certaines
opérations sur un nombre n de fichiers.
Afin de sélectionner les fichiers voulus j'utilise le fileDialog :

Sub MaMacro()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Title = "Sélectionner les fichiers"
If fd.Show = -1 Then
For Each vFichier In fd.SelectedItems
MsgBox vFichier
Next vFichier
End If
End Sub

Donc c'est bien car on peut filtrer les fichiers voulus et -
théoriquement
(du moins le pensais-je) - choisir l'ordre de traitement grâce à
l'affichage
"Détails" et en triant sur le nom de fichier...
Et bien non !
Pour mes tests, j'utilise 3 fichiers nommés a01.xls, a02.xls, a03.xls En
les
triant par nom croissant, il me les traite dans l'ordre : 3,1,2 et
décroissant : 1,3,2.
Donc le tri joue bien, mais sans fonctionner correctement....
Auries-vous uen solution à cette énigme ?
Un grand merci d'avance
Serge