Microsoft 365 Ouverture Dossiers par VBA

Chev

XLDnaute Nouveau
Bonjour à tous,

j'ai créé une macro permettant d'ouvrir et de prendre des valeurs de fichiers excel dans différents dossiers. les noms de ces dossiers sont des mois (ex: 11). Ma macro ouvre les Dossiers des mois par ordre croissant. Cependant, le numéro onze n'est pas lu comme onze (11) mais comme un un (1.1) alors le dossier 11 est considéré comme étant avant le dossier 2 dans l'ordre croissant.

Comment faire pour que 11 soit réellement considérer à sa juste place?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Chev, Job,
Suivant l'architecture de votre fichier, vous pourriez rajouter une colonne où se trouverait le nom du dossier sans extension et transformé en numérique.
Par ex, 11.xls devient la chaine "11" puis le nombre 11.
Ainsi si vous triez en numérique sur cette colonne alors le 11 sera bien après le 10.
( c'est en alpha que le "11" se trouve entre le "1" et le "2". )
Par ex comme ça :
VB:
Sub Essai()
    NomFichier = "11.xlsx"
    NuméroFichier = CInt(Split(NomFichier, ".")(0))
End Sub
 

job75

XLDnaute Barbatruc
Voici la macro, très simple :
VB:
Sub Renommer()
Dim chemin$, dossier$
chemin = ThisWorkbook.Path & "\"
dossier = Dir(chemin, vbDirectory)
While dossier <> ""
    If IsNumeric(dossier) Then Name chemin & dossier As chemin & Format(dossier, "000")
    dossier = Dir
Wend
End Sub
 

Chev

XLDnaute Nouveau
Très bien mais ici nous sommes sur un forum d'échange, pas dans un supermarché.

Puisque vous avez une solution, la moindre des choses est de nous dire laquelle.
Veuillez m'excusé vous avez raison. J'espère que ça pourras aider!

Mes dossiers sont sous forme années, mois, jour (chaque années contient tous les mois, chaque mois tous les jours et chaque jour tous les fichiers dans les quels je veux trouver des informations). Ma solution à été de la recherche de caractères dans les chemins de chaque dossier pour pouvoir en déduire une date et la comparé à une date de référence (qui est la dernière d'utilisation de ma macro).

voici un exemple de chemin complet(les guillemets sont pour remplacé les données personnelles):
""\01 - Projet Ligne STS\02-Ligne STS\Monitoring usage rack\Exports_STS\2023\2\28

voici le code utilisé (les cellules de la ligne 2 comparées sont dans l'ordre: année dernière mise à jour, mois, jour):

Code:
info = Dossier.Path                                'Année du dossier est supérieur ou égal à la date de lancement de l'appli
        posdate = InStr(info, "\20")
        If posdate = 0 Then
        GoTo suivant5
        End If
    
        anneedossier = Mid(info, posdate + 1, 4)
        If anneedossier < 2023 Then
        GoTo suivant6
        End If
 
        datedossier = Mid(info, posdate + 1)
        posmois = InStr(datedossier, "\")
        moisjourdossier = Mid(datedossier, posmois + 1)
        posjour = InStr(moisjourdossier, "\")
        
        If posjour = 0 Then
        moisdossier = moisjourdossier
        Else
        moisdossier = Left(moisjourdossier, posjour - 1)
        jourdossier = Mid(moisjourdossier, posjour + 1)
        End If
    
    
    
        ThisWorkbook.Sheets("DATA").Activate
    
        If anneedossier > Range("J2").Value Then
        GoTo suivant4
        End If
    
        If anneedossier = Range("J2").Value And moisdossier > Range("K2").Value Then
        GoTo suivant4
        End If
    
        If anneedossier = Range("J2").Value And moisdossier = Range("K2").Value And jourdossier >= Range("L2").Value Then
        GoTo suivant4
        End If
    
        If anneedossier < Range("J2").Value Or moisdossier < Range("K2").Value Or jourdossier < Range("L2").Value Then
        GoTo suivant6
        End If
        
suivant4:
*

alors dans notre exemple les 28 n'est plus considéré comme un deux et un huit à la suite mais bien comme une valeur.


Si vous avez besoin de voir plus de la macro qui suit pour bien comprendre n'hésitez pas je serais ravis de la partager.


Merci à tous pour votre aide.
 

Discussions similaires

Statistiques des forums

Discussions
315 127
Messages
2 116 516
Membres
112 765
dernier inscrit
SIDIANW