Ordre import de fichiers sur Excel (VBA)

richert90

XLDnaute Occasionnel
Bonjour à tous,

Contexte du problème:

J'ai un code VBA qui me permet d'importer des fichiers d'un répertoire sur Excel sous une certaine condition (par exemple dans mon cas, les noms de fichiers commencent par "JDBPRO". Le répertoire est composé de fichiers comme cela:

HTML:
JDPRO01.CSV
JDBPRO02.CSV
JDBPO03.CSV
|
|
|
JDDPRO14.CSV
La structure est donc "JDBPRO" + numéro (01,02,..., 14)+ ".CSV". J'ai 14 fichiers ici mais je peux en avoir + ou -;

Problème:


Lors de l'import de ces fichiers sur Excel (à la suite), j’aimerais qu'ils soient importés dans l'ordre. D'habitude ça le fait correctement mais j'ai voulu importer des fichiers tout à l'heure et ça a commencé par importer JDBPRO11 puis JDBPRO05 et je ne sais pas pourquoi...

Voici le code utilisé pour importer les fichiers sur Excel:

Code:
Sub import()


    Dim nom_fichier As String
    Dim nom_articles As String
    Dim compteur As Integer
    Dim nb1 As Integer
    Dim nb_donnees_importe As Integer
    Dim nom_bpu As String
    Dim nb_fichier As Integer
    Dim parcours_groupe As Integer
    Dim a As Integer
    
    'Initialisation de certaines valeurs
    nb_fichier = 0
    compteur = 0
    
    'On importe tous les fichiers du repertoire qui commencent par JDBPRO:
    filetoopen = Dir(dir_csv & "\JDBPRO*.*")  dir_csv contient le chemin du répertoire (variable globale déclarée dans un autre module)
    
     Do While filetoopen <> "" 'Boucle sur les fichiers du repertoire 
            
        nb_fichier = nb_fichier + 1 'On incrémente la boucle du nb de fichiers importés.
        
        'On regarde d'abord où se situe la limite dans la premiere feuille pour importer les données a la suite
        Sheets(1).Select
        Do
            compteur = compteur + 1
        Loop Until Cells(compteur, 3) = ""
            
        fichier_jdbprod = filetoopen 'chemin + nom + extension
        nom_fichier = Split(Mid$(filetoopen, InStrRev(filetoopen, "\") + 1), ".")(0)  'Nom du fichier sans son extension
        filetoopen = dir_csv & "\" & filetoopen 'Ici on a le chemin fichier + nom + extension
        
            With ActiveSheet.QueryTables.Add(Connection:= _
                    "TEXT;" & filetoopen _
                    , Destination:=Range("$C$" & compteur)) 'On importe les données en colonne 3 et à la ligne 'compteur'
                    .FieldNames = True
                    .RowNumbers = False
                    .FillAdjacentFormulas = False
                    .PreserveFormatting = True
                    .RefreshOnFileOpen = False
                    .RefreshStyle = xlInsertDeleteCells
                    .SavePassword = False
                    .SaveData = True
                    .AdjustColumnWidth = True
                    .RefreshPeriod = 0
                    .TextFilePromptOnRefresh = False
                    .TextFilePlatform = 932
                    .TextFileStartRow = 1
                    .TextFileParseType = xlDelimited
                    .TextFileTextQualifier = xlTextQualifierDoubleQuote
                    .TextFileConsecutiveDelimiter = False
                    .TextFileTabDelimiter = False 'Tabulation
                    .TextFileSemicolonDelimiter = True 'Point virgule
                    .TextFileCommaDelimiter = False 'Virgule
                    .TextFileSpaceDelimiter = False 'espace
                    .TextFileColumnDataTypes = Array(1, 1, 1)
                    .TextFileDecimalSeparator = "." 
                    .TextFileTrailingMinusNumbers = True
                    .Refresh BackgroundQuery:=False
            End With
         
         nb_donnees_importe = 0 'réinitialisation du compteur.
         'On va compter le nombres de lignes déjà occupées:
         Do
           nb_donnees_importe = nb_donnees_importe + 1
        Loop Until Cells(nb_donnees_importe, 3).Value = "" 'ici nb_donnees_importe donne le nb de donnees + 1 (derniere ligne vide)
        
            nom_bpu = Right$(Split(fichier_jdbprod, ".")(0), 2) 'On ne garde que le numero (2 derniers numeros avant le point et l'extension)

        For a = compteur To nb_donnees_importe - 1 'Pour toutes les nouvelles données qui viennent d'être importées:
            Cells(a, 1).Value = nom_bpu 'On renseigne le nom de la BPU
            
        Next a 
         
         'On passe au fichier suivant:
        filetoopen = Dir 
        
    Loop 'Boucle les fichiers
    
End Sub

Merci d'avance de votre aide,
 

richert90

XLDnaute Occasionnel
Re : Ordre import de fichiers sur Excel (VBA)

Bonjour Gilbert_RGI,

Je vois pas très bien comment faire un sort à la fin de procédure.
Il faudrait plutôt que je fasse ça directement lors de la recherche des fichiers dans le répertoire si c'est possible c'est à dire au début.
 

gilbert_RGI

XLDnaute Barbatruc
Re : Ordre import de fichiers sur Excel (VBA)

a tester

si l'ordre est inverse mettre Order:=xlAscending en Order:=xlDescending
Sub import()

Dim nom_fichier As String
Dim nom_articles As String
Dim compteur As Integer
Dim nb1 As Integer
Dim nb_donnees_importe As Integer
Dim nom_bpu As String
Dim nb_fichier As Integer
Dim parcours_groupe As Integer
Dim a As Integer

'Initialisation de certaines valeurs
nb_fichier = 0
compteur = 0

'On importe tous les fichiers du repertoire qui commencent par JDBPRO:
filetoopen = Dir(dir_csv & "\JDBPRO*.*") ' dir_csv contient le chemin du répertoire (variable globale déclarée dans un autre module)

Do While filetoopen <> "" 'Boucle sur les fichiers du repertoire

nb_fichier = nb_fichier + 1 'On incrémente la boucle du nb de fichiers importés.

'On regarde d'abord où se situe la limite dans la premiere feuille pour importer les données a la suite
Sheets(1).Select
Do
compteur = compteur + 1
Loop Until Cells(compteur, 3) = ""

fichier_jdbprod = filetoopen 'chemin + nom + extension
nom_fichier = Split(Mid$(filetoopen, InStrRev(filetoopen, "\") + 1), ".")(0) 'Nom du fichier sans son extension
filetoopen = dir_csv & "\" & filetoopen 'Ici on a le chemin fichier + nom + extension

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & filetoopen _
, Destination:=Range("$C$" & compteur)) 'On importe les données en colonne 3 et à la ligne 'compteur'
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False 'Tabulation
.TextFileSemicolonDelimiter = True 'Point virgule
.TextFileCommaDelimiter = False 'Virgule
.TextFileSpaceDelimiter = False 'espace
.TextFileColumnDataTypes = Array(1, 1, 1)
.TextFileDecimalSeparator = "."
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

nb_donnees_importe = 0 'réinitialisation du compteur.
'On va compter le nombres de lignes déjà occupées:
Do
nb_donnees_importe = nb_donnees_importe + 1
Loop Until Cells(nb_donnees_importe, 3).Value = "" 'ici nb_donnees_importe donne le nb de donnees + 1 (derniere ligne vide)

nom_bpu = Right$(Split(fichier_jdbprod, ".")(0), 2) 'On ne garde que le numero (2 derniers numeros avant le point et l'extension)
For a = compteur To nb_donnees_importe - 1 'Pour toutes les nouvelles données qui viennent d'être importées:
Cells(a, 1).Value = nom_bpu 'On renseigne le nom de la BPU

Next a

'On passe au fichier suivant:
filetoopen = Dir

Loop 'Boucle les fichiers
Columns("c:c").Select
ActiveWorkbook.Sheets(1).Sort.SortFields.Clear
ActiveWorkbook.Sheets(1).Sort.SortFields.Add Key:=Range("c1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Sheets(1).Sort
.SetRange Range("c1:c" & Range("c65536").End(xlUp).Row)
'.Header = xlNo

End With



End Sub
 

richert90

XLDnaute Occasionnel
Re : Ordre import de fichiers sur Excel (VBA)

Re,
Merci pour la réponse
C'est ce que j'avais fait en effet. Mais en fait, j'aimerais savoir si c'est possible d'importer les fichiers par ordre croissant du nom de fichier (donc d'abord JDBPRO01 ensuite JDBPRO02 etc...)?
 

Discussions similaires

Réponses
3
Affichages
145

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa