IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

suppression de fichiers anciens


Sujet :

VBA Access

  1. #1
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 573
    Points : 258
    Points
    258
    Par défaut suppression de fichiers anciens
    bonjour,

    j'ai composé à l'aide du forum un code pour supprimer les fichier ancien d'un dossier.

    Le problème c'est que ma condition if ne marche pas comme il le faudrait.

    il me suprime des fichiers ancien (c ce qu'on lui demande)
    mais
    il me supprime par exemple un fichier que je viens de creer à l'instant
    il ne me suprime pas certain fichiers anciens.

    voici le code en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("Paramètres", dbOpenDynaset)
     
    Dim fs As New Scripting.FileSystemObject
    Set fs = CreateObject("Scripting.FileSystemObject")
     
    Dim objShell As Shell32.Shell
        Dim strFileName As Shell32.FolderItem
        Dim objFolder As Shell32.Folder
        Dim Resultat As String
        Dim streparchive As String
        Dim i As Byte
     
        streparchive = rs!Repsauvarchive
     
     
     
        Set objShell = CreateObject("Shell.Application")
        'Répertoire cible
        Set objFolder = objShell.nameSpace(streparchive)
     
     
        'boucle sur tous les elements du repertoire
        For Each strFileName In objFolder.Items
     
            'Pour que les dosssiers ne soient pas pris en comptes
            If strFileName.isFolder = False Then
            Resultat = ""
               ' For i = 0 To 2
            MsgBox (streparchive & strFileName)
             MsgBox FileDateTime(streparchive & strFileName)
          ' donne la date du fichier
          MsgBox (CStr(Year(Now()) - 5))
     
     
                    If FileDateTime(streparchive & strFileName) < CStr(Year(Now()) - 5) Then
     
    fs.DeleteFile (streparchive & strFileName), True
     
    Else
     
     End If
     
     
    End If
    Next
     
     
    End Sub
    les différentes msgbox me permmettent juste de controler le contenu de mes variables.
    elles renvoient bien ce qui est attendu à savoir la date du fichier et la date - 5 ans.

    Mais la condition est hasardeuse...

    Merci de vérifier ce code pour me donner une éventuelle piste
    merci à tous

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Ton If compare une date avec une chaîne de caractère.

    Voila un exemple (plus simple à mon goût) en VBA sans faire appel à des objets.
    Ne boudons pas cette bonne vieille fonction Dir()
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("Paramètres", dbOpenDynaset)
     
        Dim Resultat As String
        Dim strRepArchive As String
        Dim strFileName As String
        Dim FileDT As Date, LimiteDT As Date
     
        strRepArchive = rs!Repsauvarchive
        If Right(strRepArchive, 1) <> "\" Then strRepArchive = strRepArchive & "\"
     
        LimiteDT = DateAdd("yyyy", -5, Date)
     
        strFileName = Dir(strRepArchive & "*.*")
        Do While strFileName <> ""
           FileDT = FileDateTime(strRepArchive & strFileName)
           If FileDT < LimiteDT Then
              MsgBox strFileName & "  " & Format(FileDT, "dd mm yyyy")
              'Kill strRepArchive & strFileName
           End If
           strFileName = Dir()
        Loop
    A+

  3. #3
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 573
    Points : 258
    Points
    258
    Par défaut
    t'es formidable LedZeppII

    effectivement à quoi bon faire compliqué quand on peut faire simple

    Ca marche nickel

    MAis d'un point de vue théorique c'est quand meme bizare que mon code ne fonctionne pas non???

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    J'ai fait quelques essais.
    La fonction FileDateTime renvoie une donnée de type Variant/Date.
    Dans ton code d'origine tu compares cette données avec "2002" (String).
    La donnée Variant/Date est convertie en String pour effectuer la comparaison.
    Je pense que c'est à cause du type Variant, car avec une donnée type Date c'est l'inverse qui se produit ("2002" est convertit en date -> 24/06/1905)

    Lorsque le jour de la date de création/modif du fichier est entre 01 et 20 le If est toujours Vrai.
    Par exemple "19/01/2007" < "2002" est Vrai.

    Lorsque le jour de la date de création/modif du fichier est entre 21 et 31 le If est toujours Faux.
    "25/01/2007" < "2002" est faux à cause du "5" en deuxième position.

    Ton code fonctionne si tu remplace CStr(Year(Now()) - 5) par DateAdd("yyyy", -5, Date)

    A+

  5. #5
    Membre actif

    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 573
    Points : 258
    Points
    258
    Par défaut
    merci pour les explications

    c'est très clair, je comprend mieux mantenant pourquoi ça ne marchait pas.
    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Php] Suppression de fichier ancien, mais pas tous
    Par dutom007 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 06/05/2014, 10h09
  2. Suppression automatique d'anciens fichiers
    Par verdurand dans le forum Windows XP
    Réponses: 8
    Dernier message: 13/03/2007, 23h47
  3. Réponses: 4
    Dernier message: 16/04/2004, 08h20
  4. Auto suppression de fichier
    Par pato dans le forum Langage
    Réponses: 4
    Dernier message: 05/03/2004, 09h09
  5. Suppression de fichiers
    Par wasch dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/11/2003, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo