Arrêter une macro quand on atteint la ligne 65000

papapaul

XLDnaute Impliqué
Bonjour Forum, :)
Sortir d'une macro de recherche sans perdre les résultats déja trouvés.
La mienne recherche le nom des fichiers d'un ou plusieurs répertoires
et écrit ligne par ligne les résultats. Ca fonctionne trés bien
quand il y a pas trop de lignes.
Problème : si je demande directement la liste à partir de la racine C:\
par exemple, ca fait plus de 65536 résultats et donc ca plante tout.:(
Comment dire à une macro : stop dés que tu atteins la ligne
100 ou 20000 ou 55555 .... mais écrit moi quand même ce que
tu as déjà trouvé.
Merci d'avance
 

mercant76

XLDnaute Impliqué
Re : Arrêter une macro quand on atteint la ligne 65000

bonjour,

tout dépend comment tu as écris ta macro ?

à priori, tu fais une boucle ?

si c'est le cas, après avoir fait écrire ce qui a été trouvé, tu mets une instruction du genre : if dernière ligne = 65000; exit.

@+
 

papapaul

XLDnaute Impliqué
Re : Arrêter une macro quand on atteint la ligne 65000

Re bonjour Forum :)
Je l'ai pas fait tout seul, j'en suis incapable.
C'est pour moi une sorte d'utilitaire qui me rend bien service quand je décide de faire un peu de ménage dans mes répertoires.
J'ai simplement ajouté un chronomètre.
Temps d'exécution pour 5124 fichiers trouvés, 6 mn 22 sec, moins d'un dixième pour 58.
Problème : si ca dépasse 65536, ca plante tout :mad:
Comment limiter le nombre de lignes par exemple à 65 000 (ou 100 ou 20000 ...) et si plus, conserver le résultat et
éventuellement continuer sur une autre feuille ??
Merci d'avance aux experts
 

Pièces jointes

  • Liste_Fich_dans_Rep_avec_chrono_XLD.xls
    43 KB · Affichages: 76

pierrejean

XLDnaute Barbatruc
Re : Arrêter une macro quand on atteint la ligne 65000

Bonjour papapaul

Salut Pierrot
Salut mercant
Salut Jean-Marcel

La macro modifiée
Tout dans la meme page
ligne limite en rouge
NB: Si necessaire il est possible d'etudier un changement de page mais comme ceci nous sommes deja a 2 358 000 fichiers repertoriés dans la page (Excel 2003 et pas calculé avec Excel 2010)

Code:
Public Sub ListFilesInFolder(SourceFolderName As String, IncludeSubfolders As Boolean, TestRetour)
'exp: ListFilesInFolder "C:\FolderName\", True < avec sous dossiers) !!! récursivité (***)
Dim FSO, SourceFolder, SubFolder, FileItem, R As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = FSO.GetFolder(SourceFolderName)
If TestRetour = 0 Then
   Cells.Clear
   Columns.ColumnWidth = 10
   Cells(4, 1) = "Fichier": Cells(4, 2) = "Créé": Cells(4, 3) = "Modifié": Cells(4, 4) = "Capacité": Cells(4, 5) = "Chemin"
 
End If
[COLOR=red]limite = 100[/COLOR]
col = 0
R = 5 'Range("A65500").End(xlUp).Row + 1
For Each FileItem In SourceFolder.Files
    Cells(R, col + 1).Formula = FileItem.Name
    Cells(R, col + 2).Formula = FileItem.DateCreated
    Cells(R, col + 3).Formula = FileItem.DateLastModified
    If FileItem.Size >= 1024 Then
       Cells(R, col + 4).Formula = Int(FileItem.Size / 1024) & " Ko"
    Else
       Cells(R, col + 4).Formula = FileItem.Size & " Oct"
    End If
    ActiveSheet.Hyperlinks.Add Cells(R, col + 5), FileItem.Path ' FileItem.Name
    'Cells(R, 5).Formula = SourceFolderName 'FileItem.Path
    R = R + 1
    If R > limite Then
       col = col + 7
       R = 5
       Cells(4, col + 1) = "Fichier": Cells(4, col + 2) = "Créé": Cells(4, col + 3) = "Modifié": Cells(4, col + 4) = "Capacité": Cells(4, col + 5) = "Chemin"
    End If
Next
If IncludeSubfolders Then
   For Each SubFolder In SourceFolder.SubFolders
     ListFilesInFolder SubFolder.Path, True, 1 '(***)
   Next
End If
Columns.AutoFit
'On Error Resume Next
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
End Sub
 
Dernière édition:

papapaul

XLDnaute Impliqué
Re : Arrêter une macro quand on atteint la ligne 65000

Bonjour Forum, Jean-Marcel, pierrejean

C'est limpide, et moi je suis le roi des truffes, j'ai pensé à End :eek:
If R > 65000 Then
End
End If

Ta solution pierrejean me convient trés bien aussi.
Mais comment à tu fais pour compter 2 358 000 ?
Y a t'il un moyen simple pour compter le nombre de fichiers dans 1 ou
plusieurs répertoires sans pour cela les "écrire" ?
Cette solution tout sur la même page est bien, dans l'idéal ce serait une
création de feuille à chaque changement de répertoire au fur et à mesure
du balayage de l'arborescence, si c'est trop compliqué, laissons tomber,
avec vos solutions, j'ai déjà largement de quoi travailler.

Question annexe pour faire joli : on ne voit pas le chrono défiler.
J'ai un peu chercher mais je trouve pas,
quelque chose comme ? GetTickCount&.Visible = True
Evidemment ça colle pas et comme je suis vraiment pas doué.

Milles Mercis et vive XLD
 

papapaul

XLDnaute Impliqué
Re : Arrêter une macro quand on atteint la ligne 65000

Rebonjour,:)

Pour compter les fichiers, j'ai trouvé ça de Staple1600, merci à lui. ;)

Function Nombre_Fichiers(ByVal Dossier As String)
With Application.FileSearch
.LookIn = Dossier
.Filename = "*.???"
.Execute
nbr = .FoundFiles.Count
End With
Nombre_Fichiers = nbr + 1
End Function
Sub test()
Dossier = InputBox("Indiquez le chemin et le nom du dossier à scanner, svp")
MsgBox "Nombre de fichiers trouvés : " & Nombre_Fichiers(Dossier)
End Sub

.Filename = "*.???" on précise l'extension : xls ou doc....
si on veut tous les fichiers du répertoire, je mets .Filename = "*.*"
et affecté la macro test à un bouton.
Je vais essayer d'adapter à mon fichier de "listage" des fichiers pour que ce soit automatique sans avoir à saisir ou coller le chemin dans l'inputbox

Bonne journée au Forum
 

pierrejean

XLDnaute Barbatruc
Re : Arrêter une macro quand on atteint la ligne 65000

Re

Rapidement pour 2 358 000 (possibilité d'affichage des fichiers sur une feuille)

je prends 7 colonnes pour une liste de fichiers qui peut aller jusqu'a 65500 lignes
il y a 256 colonnes par feuille soit 256/7 = 36 listes
36*65500= 2 358 000
Pour le reste , je regarde a l'occasion
 

pierrejean

XLDnaute Barbatruc
Re : Arrêter une macro quand on atteint la ligne 65000

Re

Avec une page pour chaque sous_dossier
Nb: J'ai essayé de mentionner le nom du sous dossier mais j'ai du rajouter un numero pour eviter un blocage sur nom de feuille identique
Malgré cela il m'est resté au moins un nom de feuille non conforme
Il est donc possible qu'une ou plusieurs feuiles soient intitulées Feuilxx
 

Pièces jointes

  • Liste_Fich_dans_Rep_avec_chrono_XLD.zip
    41.9 KB · Affichages: 54

Discussions similaires

Statistiques des forums

Discussions
312 838
Messages
2 092 673
Membres
105 482
dernier inscrit
Eric.FKF