francedemo
XLDnaute Occasionnel
bonjour à tous,
grâce au forum, j'ai assemblé de plusieurs sources un code qui fonctionne bien pour lister les fichiers d'un répertoire avec informations sur le contenu de chaque fichier (en fait, ça crée un sorte de BdD pour récapituler des données)
voici le code utilisé
	
		
comme vous pouvez le voir dans le code, je fais des aller-retour entre le fichier ouvert à l'instant "t" et le fichier récap.
je voudrai savoir s'il n'existe pas une autre façon de faire pour éviter ces aller-retour gourmand en temps (la macro mets 90 sec pour faire le boulot sur mon répertoire qui n'est pas très gros = 140 fichiers)
d'avance merci
	
		
			
		
		
	
				
			grâce au forum, j'ai assemblé de plusieurs sources un code qui fonctionne bien pour lister les fichiers d'un répertoire avec informations sur le contenu de chaque fichier (en fait, ça crée un sorte de BdD pour récapituler des données)
voici le code utilisé
		Code:
	
	
	Sub ListeFichiersContenu()
'macro par francedemo
Dim Fichier As String
Dim NomFichier As String
Dim Chemin As String
Dim Derligne As Long
Dim DerLigneA As Long
debut = Timer 'ça permet de voir le temps passé
Workbooks("ListeDevis.xls").Activate
'===Nettoyer la zone et sélectionner la cellule de début
Range("A2:F65536").Clear
Range("A2").Activate
'===Saisir le chemin complet du dossier où se trouvent les fichiers
Chemin = "\\Serveur\DATA\CARDIO\SAV\DevisSAV\"
'===Premier fichier
Fichier = Dir(Chemin & "*.xls")
Do While Fichier <> ""
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    If Fichier <> "ListeDevis.xls" Then
        Workbooks.Open Filename:=Chemin & Fichier
'===Inserer lien hypertexte "Lien Fichier" + Copie de "Livraison"
        Windows(Fichier).Activate
        Range("G6").Copy
        Workbooks("ListeDevis.xls").Activate
        Sheets("Base").Select
        Derligne = Range("F65536").End(xlUp).Row + 1
        NomFichier = Left(Fichier, Len(Fichier) - 5)
        ActiveWorkbook.ActiveSheet.Hyperlinks.Add _
            Anchor:=Cells(Derligne, 1), Address:=Chemin & Fichier, _
            TextToDisplay:=NomFichier
        Range("B" & Derligne).PasteSpecial _
            Paste:=xlPasteValuesAndNumberFormats, _
            Operation:=xlNone, _
            SkipBlanks:=False, _
            Transpose:=False
'===Copie de "Facturation"
        Windows(Fichier).Activate
        Range("Q6").Copy
        Workbooks("ListeDevis.xls").Activate
        Sheets("Base").Select
        Range("C" & Derligne).PasteSpecial _
            Paste:=xlPasteValuesAndNumberFormats, _
            Operation:=xlNone, _
            SkipBlanks:=False, _
            Transpose:=False
'===Copie de "matériel"
        Windows(Fichier).Activate
        Range("H3").Copy
        Workbooks("ListeDevis.xls").Activate
        Sheets("Base").Select
        Range("D" & Derligne).PasteSpecial _
            Paste:=xlPasteValues, _
            Operation:=xlNone, _
            SkipBlanks:=False, _
            Transpose:=False
'===Copie de "Nb"
        Windows(Fichier).Activate
        Range("A13:A23").Copy
        Workbooks("ListeDevis.xls").Activate
        Sheets("Base").Select
        Range("E" & Derligne).PasteSpecial _
            Paste:=xlPasteValues, _
            Operation:=xlNone, _
            SkipBlanks:=False, _
            Transpose:=False
'===Copie de "Désignation"
        Windows(Fichier).Activate
        Range("B13:B23").Copy
        Workbooks("ListeDevis.xls").Activate
        Sheets("Base").Select
        Range("F" & Derligne).PasteSpecial _
            Paste:=xlPasteValues, _
            Operation:=xlNone, _
            SkipBlanks:=False, _
            Transpose:=False
'===Insérer une ligne après chaque fichier
        Derligne = Range("F65536").End(xlUp).Row
        Range("A" & Derligne, "F" & Derligne).Select
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 6
        End With
'===Fermeture du fichier Devis ouvert
        Windows(Fichier).Activate
        Application.CutCopyMode = False
        ActiveWorkbook.Close savechanges:=False
'===Fichier suivant
    End If
    Fichier = Dir
Loop
'===Fin de la boucle
Workbooks("ListeDevis.xls").Activate
'===Nettoyage des lignes vides
Sheets("Base").Select
For n = Derligne + 10 To 2 Step -1
    If Range("F" & n) = "" Then Rows(n).Delete
Next n
'===Mise en forme des colonnes
Range("A2", "A" & Derligne + 1).ColumnWidth = 50
Range("B2", "C" & Derligne + 1).ColumnWidth = 40
Range("D2", "D" & Derligne + 1).ColumnWidth = 25
Range("E2", "F" & Derligne + 1).EntireColumn.AutoFit
With Selection.Font
    .Name = "Arial"
    .Size = 12
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.CutCopyMode = False
Range("A2").Activate
MsgBox ("Terminé en " & Timer - debut & " seconde(s)")
End Sub
	comme vous pouvez le voir dans le code, je fais des aller-retour entre le fichier ouvert à l'instant "t" et le fichier récap.
je voudrai savoir s'il n'existe pas une autre façon de faire pour éviter ces aller-retour gourmand en temps (la macro mets 90 sec pour faire le boulot sur mon répertoire qui n'est pas très gros = 140 fichiers)
d'avance merci