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

TRI dans un tableau VBA

4 réponses
Avatar
Bruno
Bonjour à tous,
Dans la macro ci-dessous, je vais chercher tous les fichiers d'un répertoire
avec la date de la dernière modif, je les copie sur une feuille et
j'effectue un tri sur cette feuille pour obtenir le fichier le plus récent
en A1:B1.
Je souhaiterais faire la même opération mais en évitant le passage par la
feuille "Sheets.add". et donc le faire en VBA dans un tableau (array) à 2
dimensions afin récupérer mon fichier le plus récent à l'indice TABlo(0,0).
Si je parviens à alimenter mon tableau, je peine à effectuer le tri.
Un grand merci pour votre aide à tous...
A+++
Bruno


Sub dernier_modifie()
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fs = Application.FileSearch
Sheets.Add
With fs
.LookIn = "D:\avalon\doc"
.FileType = msoFileTypeAllFiles
.SearchSubFolders = True
.Execute
For Each f In .FoundFiles
Set file = FSO.GetFile(f)
Range("a1") = file.DateLastModified
Range("b1") = f
Range("a1").Insert Shift:=xlDown
Range("b1").Insert Shift:=xlDown
Next f
End With
Set FSO = Nothing
Set file = Nothing
Range("A1").Delete Shift:=xlUp
Range("b1").Delete Shift:=xlUp
Range("a1:b30").Select ', Range("a1").End(xlDown)).Select
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("b1").Select
NOMfichier = ActiveCell
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub

4 réponses

Avatar
Alain CROS
Bonjour.

Sub DerModif()
Dim FSO, FsoFile, LaDate As Date, LeFile As String
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each FsoFile In FSO.GetFolder("D:avalondoc").Files
With FsoFile
If .DateLastModified > LaDate Then
LaDate = .DateLastModified
LeFile = .Name
End If
End With
Next FsoFile
Set FsoFile = Nothing
Set FSO = Nothing
MsgBox LeFile & " " & LaDate
End Sub'AC

Alain CROS.

"Bruno" a écrit dans le message de news: 3fb5d08c$0$14706$
Bonjour à tous,
Dans la macro ci-dessous, je vais chercher tous les fichiers d'un répertoire
avec la date de la dernière modif, je les copie sur une feuille et
j'effectue un tri sur cette feuille pour obtenir le fichier le plus récent
en A1:B1.
Je souhaiterais faire la même opération mais en évitant le passage par la
feuille "Sheets.add". et donc le faire en VBA dans un tableau (array) à 2
dimensions afin récupérer mon fichier le plus récent à l'indice TABlo(0,0).
Si je parviens à alimenter mon tableau, je peine à effectuer le tri.
Un grand merci pour votre aide à tous...
A+++
Bruno


Sub dernier_modifie()
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fs = Application.FileSearch
Sheets.Add
With fs
.LookIn = "D:avalondoc"
.FileType = msoFileTypeAllFiles
.SearchSubFolders = True
.Execute
For Each f In .FoundFiles
Set file = FSO.GetFile(f)
Range("a1") = file.DateLastModified
Range("b1") = f
Range("a1").Insert Shift:=xlDown
Range("b1").Insert Shift:=xlDown
Next f
End With
Set FSO = Nothing
Set file = Nothing
Range("A1").Delete Shift:=xlUp
Range("b1").Delete Shift:=xlUp
Range("a1:b30").Select ', Range("a1").End(xlDown)).Select
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
Range("b1").Select
NOMfichier = ActiveCell
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub




Avatar
Denis Michon
Bonjour Bruno,

Si j'ai bien compris ta question, Tu veux ouvrir seulement le fichier qui a été modifié le dernier...soit le plus récent
...

je te propose une variante de ta procédure avec l'objet FileSearch ...

Cette procédure va te donner une liste des fichiers qui ont été modifié du plus récent au plus vieux et va ouvrir
seulement le plus récent.

En lisant la procédure, tu vas constater qu'on peut orienter la recherche afin de limiter la quantité d'informations à
la fin de la procédure.


'-------------------------------------------
Sub RechercheDernierFichierModifier()
Dim Quand As MsoLastModified
Dim Nb As Long, A As Integer
Dim Fichier As String

'Plusieurs constantes possibles...pour délimiter l'espace temps
'que la procédure doit retenir pour la recherche des fichiers.

''msoLastModifiedYesterday, msoLastModifiedToday,
'msoLastModifiedThisWeek, msoLastModifiedLastWeek,
'msoLastModifiedAnyTime , msoLastModifiedLastMonth,
'msoLastModifiedThisMonth

Quand = msoLastModifiedThisWeek

With Application.FileSearch
'Lancer Nouvelle recherche
.NewSearch

'Tous les fichiers ayant cette extension
.Filename = "*.xls"

'Limite la recherche à cet espace de temps...
.LastModified = Quand

'Chemin et Répertoire de recherche
.LookIn = "C:excel"
'Pour inclure tous les sous-répertoires...
.SearchSubFolders = False

'Exécute la recherche...et affiche la liste des fichiers
'en partant du plus ancien fichier modifié au plus
'récent dans l'intervalle choisi.
'Si tu veux ouvrir le fichier qui fut modifiée le
'dernier, tu boucles à l'envers (déboucle ;-)) )

If .Execute(msoSortByLastModified) > 0 Then
Nb = .FoundFiles.Count
Fichier = "Fichiers trouvés:" & vbCrLf
For A = Nb To 1 Step -1
Fichier = Fichier & vbCrLf & .FoundFiles(A)
Next

'pour ouvrir seulement le dernier fichier
Workbooks.Open .FoundFiles(Nb)
MsgBox Fichier, vbInformation, "Votre liste"
End If

End With

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


Salutations!







"Bruno" a écrit dans le message de news:3fb5d08c$0$14706$
Bonjour à tous,
Dans la macro ci-dessous, je vais chercher tous les fichiers d'un répertoire
avec la date de la dernière modif, je les copie sur une feuille et
j'effectue un tri sur cette feuille pour obtenir le fichier le plus récent
en A1:B1.
Je souhaiterais faire la même opération mais en évitant le passage par la
feuille "Sheets.add". et donc le faire en VBA dans un tableau (array) à 2
dimensions afin récupérer mon fichier le plus récent à l'indice TABlo(0,0).
Si je parviens à alimenter mon tableau, je peine à effectuer le tri.
Un grand merci pour votre aide à tous...
A+++
Bruno


Sub dernier_modifie()
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fs = Application.FileSearch
Sheets.Add
With fs
.LookIn = "D:avalondoc"
.FileType = msoFileTypeAllFiles
.SearchSubFolders = True
.Execute
For Each f In .FoundFiles
Set file = FSO.GetFile(f)
Range("a1") = file.DateLastModified
Range("b1") = f
Range("a1").Insert Shift:=xlDown
Range("b1").Insert Shift:=xlDown
Next f
End With
Set FSO = Nothing
Set file = Nothing
Range("A1").Delete Shift:=xlUp
Range("b1").Delete Shift:=xlUp
Range("a1:b30").Select ', Range("a1").End(xlDown)).Select
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
Range("b1").Select
NOMfichier = ActiveCell
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub
Avatar
Bruno
Un grand merci c'est exactement ce que je cherchais en bien plus élégant...
A +++
Bruno


"Alain CROS" a écrit dans le message de
news:
Bonjour.

Sub DerModif()
Dim FSO, FsoFile, LaDate As Date, LeFile As String
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each FsoFile In FSO.GetFolder("D:avalondoc").Files
With FsoFile
If .DateLastModified > LaDate Then
LaDate = .DateLastModified
LeFile = .Name
End If
End With
Next FsoFile
Set FsoFile = Nothing
Set FSO = Nothing
MsgBox LeFile & " " & LaDate
End Sub'AC

Alain CROS.

"Bruno" a écrit dans le message de news:
3fb5d08c$0$14706$

Bonjour à tous,
Dans la macro ci-dessous, je vais chercher tous les fichiers d'un
répertoire


avec la date de la dernière modif, je les copie sur une feuille et
j'effectue un tri sur cette feuille pour obtenir le fichier le plus
récent


en A1:B1.
Je souhaiterais faire la même opération mais en évitant le passage par
la


feuille "Sheets.add". et donc le faire en VBA dans un tableau (array) à
2


dimensions afin récupérer mon fichier le plus récent à l'indice
TABlo(0,0).


Si je parviens à alimenter mon tableau, je peine à effectuer le tri.
Un grand merci pour votre aide à tous...
A+++
Bruno


Sub dernier_modifie()
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fs = Application.FileSearch
Sheets.Add
With fs
.LookIn = "D:avalondoc"
.FileType = msoFileTypeAllFiles
.SearchSubFolders = True
.Execute
For Each f In .FoundFiles
Set file = FSO.GetFile(f)
Range("a1") = file.DateLastModified
Range("b1") = f
Range("a1").Insert Shift:=xlDown
Range("b1").Insert Shift:=xlDown
Next f
End With
Set FSO = Nothing
Set file = Nothing
Range("A1").Delete Shift:=xlUp
Range("b1").Delete Shift:=xlUp
Range("a1:b30").Select ', Range("a1").End(xlDown)).Select
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending,
Header:=xlGuess,


_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
Range("b1").Select
NOMfichier = ActiveCell
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub








Avatar
Bruno
Bonjour Denis,

La solution d'Alain est plus adaptée à ce que je voulais faire. Je retiens
la tienne pour uun projet que j'ai en tête.
En tous les cas, un grand merci pour ton aide.
A+++

Bruno


"Denis Michon" a écrit dans le message de
news:6grtb.33567$
Bonjour Bruno,

Si j'ai bien compris ta question, Tu veux ouvrir seulement le fichier qui
a été modifié le dernier...soit le plus récent

...

je te propose une variante de ta procédure avec l'objet FileSearch ...

Cette procédure va te donner une liste des fichiers qui ont été modifié du
plus récent au plus vieux et va ouvrir

seulement le plus récent.

En lisant la procédure, tu vas constater qu'on peut orienter la recherche
afin de limiter la quantité d'informations à

la fin de la procédure.


'-------------------------------------------
Sub RechercheDernierFichierModifier()
Dim Quand As MsoLastModified
Dim Nb As Long, A As Integer
Dim Fichier As String

'Plusieurs constantes possibles...pour délimiter l'espace temps
'que la procédure doit retenir pour la recherche des fichiers.

''msoLastModifiedYesterday, msoLastModifiedToday,
'msoLastModifiedThisWeek, msoLastModifiedLastWeek,
'msoLastModifiedAnyTime , msoLastModifiedLastMonth,
'msoLastModifiedThisMonth

Quand = msoLastModifiedThisWeek

With Application.FileSearch
'Lancer Nouvelle recherche
.NewSearch

'Tous les fichiers ayant cette extension
.Filename = "*.xls"

'Limite la recherche à cet espace de temps...
.LastModified = Quand

'Chemin et Répertoire de recherche
.LookIn = "C:excel"
'Pour inclure tous les sous-répertoires...
.SearchSubFolders = False

'Exécute la recherche...et affiche la liste des fichiers
'en partant du plus ancien fichier modifié au plus
'récent dans l'intervalle choisi.
'Si tu veux ouvrir le fichier qui fut modifiée le
'dernier, tu boucles à l'envers (déboucle ;-)) )

If .Execute(msoSortByLastModified) > 0 Then
Nb = .FoundFiles.Count
Fichier = "Fichiers trouvés:" & vbCrLf
For A = Nb To 1 Step -1
Fichier = Fichier & vbCrLf & .FoundFiles(A)
Next

'pour ouvrir seulement le dernier fichier
Workbooks.Open .FoundFiles(Nb)
MsgBox Fichier, vbInformation, "Votre liste"
End If

End With

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


Salutations!







"Bruno" a écrit dans le message de
news:3fb5d08c$0$14706$

Bonjour à tous,
Dans la macro ci-dessous, je vais chercher tous les fichiers d'un
répertoire

avec la date de la dernière modif, je les copie sur une feuille et
j'effectue un tri sur cette feuille pour obtenir le fichier le plus récent
en A1:B1.
Je souhaiterais faire la même opération mais en évitant le passage par la
feuille "Sheets.add". et donc le faire en VBA dans un tableau (array) à 2
dimensions afin récupérer mon fichier le plus récent à l'indice
TABlo(0,0).

Si je parviens à alimenter mon tableau, je peine à effectuer le tri.
Un grand merci pour votre aide à tous...
A+++
Bruno


Sub dernier_modifie()
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fs = Application.FileSearch
Sheets.Add
With fs
.LookIn = "D:avalondoc"
.FileType = msoFileTypeAllFiles
.SearchSubFolders = True
.Execute
For Each f In .FoundFiles
Set file = FSO.GetFile(f)
Range("a1") = file.DateLastModified
Range("b1") = f
Range("a1").Insert Shift:=xlDown
Range("b1").Insert Shift:=xlDown
Next f
End With
Set FSO = Nothing
Set file = Nothing
Range("A1").Delete Shift:=xlUp
Range("b1").Delete Shift:=xlUp
Range("a1:b30").Select ', Range("a1").End(xlDown)).Select
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending,
Header:=xlGuess,

_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
Range("b1").Select
NOMfichier = ActiveCell
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub