Conversion texte en date

Résolu/Fermé
Akatsucki Messages postés 90 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 16 décembre 2021 - 29 oct. 2021 à 17:05
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 - 30 oct. 2021 à 09:28
Bonjour,

Je sèche un peu sur le code à mettre en place pour convertir un texte en date …

Je m’explique, j’ai réalisé un dossier d’archive de fichier ou je met le Nomfichier+date+format (exemple: toto06012021.xlsm

Puis je souhaite supprimer les fichiers qui ont plus de 30jours pour ne pas remplir mon dossier à l’infini

Du coup j’ai créé une boucle dans mon dossier qui récupère les noms des fichiers et qui compare la date du fichier à la date du jours -30 jours et si vrai alors supprime le fichier

Le format que j’ai est en texte 06012021 et la date pour comparer est 05/02/2021

Du coup ça me met un debugage

Je vous remercie si vous avez une solution

2 réponses

yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 Ambassadeur 1 538
29 oct. 2021 à 17:08
bonjour,
je pense qu'il faut modifier ton code VBA.
0
Akatsucki Messages postés 90 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 16 décembre 2021
29 oct. 2021 à 18:07
Comment tu vois la chose ?
Je pensais au pire rajouter des - entre le jour,le mois et l’année pour que mon fichier ce nomme toto09-01-2021.xlsm puis je récupère uniquement la date 09-01-2021 ou je peux remplacer les "-" par "/" pour obtenir 09/01/2021 et ainsi mon format sera de type texte mais je sais pas si je pourrais le comparer à la date limite de -30jours sinon suppression ??
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538 > Akatsucki Messages postés 90 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 16 décembre 2021
29 oct. 2021 à 18:22
Si tu as le choix, pourquoi ne pas nommer le fichier toto20210109?
Tu peux facilement comparer 20210109 à 20210929, non?

Sinon, tu peux utiliser la fonction dateserial() pour créer une date à partir des nombres de l'année, du mois et du jour.

Comme tu ne montres pas ton code, difficile d'être plus précis.
Si jamais tu montres ton code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
Akatsucki Messages postés 90 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 16 décembre 2021 > yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024
29 oct. 2021 à 18:43
Je t’envoie ça dès que je rentre et oui j’ai utilisé dateserial aha
0
Akatsucki Messages postés 90 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 16 décembre 2021 > yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024
Modifié le 29 oct. 2021 à 20:12
    'Declaration des variables
    Dim DateLimite As Date: DateLimite = DateSerial(Year(Date), Month(Date), Day(Date) - 30)
    Dim NomDossier As String
    Dim DateJour As String
    Dim NomFichier As Variant: NomDossier = "C:\mesdocuments\"
    
    Application.DisplayAlerts = False
    
    'Affectations des variables
    
    jour = Day(Date)
    Select Case Len(jour)
    Case 1
      jour = "0" & jour
    Case 2
    End Select
    
    Mois = Month(Date)
    Select Case Len(Mois)
    Case 1
      Mois = "0" & Mois
    Case 2
    End Select
    
    DateJour = jour & Mois & Year(Date)
    NomFichier = "STOCK CEINTURE" & DateJour & ".xlsm"
    
    'on sauvegarde le fichier de backup
    ActiveWorkbook.SaveCopyAs NomDossier & NomFichier
    
    'Suppression des fichiers qui ont plus de 30 jours de sauvegarde
    NomFichier = Dir(NomDossier & "*.xlsm")
    
    Do While Len(NomFichier) > 0
        'suppression de .xlsm
        NomFichier = Left(NomFichier, Len(NomFichier) - 5)
        'suppression de STOCK CEINTURE
        NomFichier = Right(NomFichier, Len(NomFichier) - 14)
        
        If IsDate(NomFichier) Then
        If CDate(NomFichier) < DateLimite Then Kill NomDossier & NomFichier & "*.xlsm"
        End If
        
    NomFichier = Dir()
    
    Loop
0
Akatsucki Messages postés 90 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 16 décembre 2021
Modifié le 29 oct. 2021 à 20:42
Après que quelqu'un m'est aidé sur comment convertir mon texte en date le code ci dessous fonctionne correctement !!! maintenant si vous avez des idées d'amélioration niveau rapidité je suis preneur merci !! ;)

'Declaration des variables
    Dim DateLimite As Date: DateLimite = DateSerial(Year(Date), Month(Date), Day(Date) - 30)
    Dim NomDossier As String: NomDossier = "C:\archive_ceinture\"
    Dim DateJour As String
    Dim NomFichier As Variant, DateFichier As Variant
    
    Application.DisplayAlerts = False
    
    'Affectations des variables
    
    jour = Day(Date)
    Select Case Len(jour)
    Case 1
      jour = "0" & jour
    End Select
    
    Mois = Month(Date)
    Select Case Len(Mois)
    Case 1
      Mois = "0" & Mois
    End Select
    
    DateJour = jour & Mois & Year(Date)
    NomFichier = "STOCK CEINTURE" & DateJour & ".xlsm"
    
    'on sauvegarde le fichier de backup
    ActiveWorkbook.SaveCopyAs NomDossier & NomFichier
    
    'Suppression des fichiers qui ont plus de 30 jours de sauvegarde
    NomFichier = Dir(NomDossier & "*.xlsm")
    
    Do While Len(NomFichier) > 0
    
        DateFichier = Mid(NomFichier, 15, 8)
        DateFichier = DateSerial(Right(DateFichier, 4), Mid(DateFichier, 3, 2), Left(DateFichier, 2))
        
        If IsDate(CDate(DateFichier)) Then
        If CDate(DateFichier) < DateLimite Then Kill NomDossier & NomFichier
        End If
        
    NomFichier = Dir()
    
    Loop


0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538
29 oct. 2021 à 21:07
moi j'écrirais plutôt:
    Dim DateLimite As Date
    Dim NomDossier As String: NomDossier = "C:\archive_ceinture\"
    Dim DateJour As String, cejour as date, jour as string, Mois as string
    Dim NomFichier As Variant, sDateFichier As string, dDateFichier as date
    
    Application.DisplayAlerts = False
    'Affectations des variables
    cejour=date()
    DateLimite = cejour-30
    jour = Day(cejour)
    if Len(jour) = 1 then
      jour = "0" & jour
    End if
    Mois = Month(cejour)
    if  Len(Mois) = 1 then
      Mois = "0" & Mois
    End if
    DateJour = jour & Mois & Year(cejour)
    NomFichier = "STOCK CEINTURE" & DateJour & ".xlsm"
    'on sauvegarde le fichier de backup
    ActiveWorkbook.SaveCopyAs NomDossier & NomFichier
    'Suppression des fichiers qui ont plus de 30 jours de sauvegarde
    NomFichier = Dir(NomDossier & "*.xlsm")
    Do While Len(NomFichier) > 0
        sDateFichier = Mid(NomFichier, 15, 8)
        dDateFichier = DateSerial(Right(sDateFichier, 4), Mid(sDateFichier, 3, 2), Left(sDateFichier, 2))
        If dDateFichier) < DateLimite Then 
             Kill NomDossier & NomFichier
        End If
        NomFichier = Dir()
    Loop
0
Akatsucki Messages postés 90 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 16 décembre 2021 > yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024
29 oct. 2021 à 23:24
Ça change quelque chose à mon code ?
0
yg_be Messages postés 23233 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 septembre 2024 1 538 > Akatsucki Messages postés 90 Date d'inscription jeudi 1 octobre 2020 Statut Membre Dernière intervention 16 décembre 2021
30 oct. 2021 à 09:28
Uniquement si tu es preneur de suggestions.
0