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

Macros et VBA Excel Discussion :

Problème avec filesystem.deletefile


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 492
    Points : 49
    Points
    49
    Par défaut Problème avec filesystem.deletefile
    Bonjour,
    Je trouve sur Internet l'exemple suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    My.Computer.FileSystem.DeleteFile("C:\test.txt")
    et j'essaie de l'appliquer mais le système bloque sur "My" en indiquant "variable non déclarée".
    J'essaie de déclarer My.Computer.FileSystem en tant qu'objet mais j'ai aussi une erreur.
    Le contexte: j'ai une appli qui crée un fichier texte par Print#1 et je dois la relancer à plusieurs reprises pour la déboguer mais elle bloque avec "Permission refusée" parce que le fichier #1 existe déjà (je suppose) et je perds un temps fou à sauvegarder ce qui doit l'être, fermer les fichiers actifs et faire un redémarrage. Je voudrais ajouter une petite sub qui élimine le fichier en question (sur demande) mais c'est là que My.Compuer.Filesystem me bloque.
    Merci d'avance pour toute piste.
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 604
    Points : 34 276
    Points
    34 276
    Par défaut
    Salut,

    le code que tu tentes d'utiliser est du VB.Net, pas du VBA

    pour le VBA : https://warin.developpez.com/access/fichiers/#LI-D-3-b
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 492
    Points : 49
    Points
    49
    Par défaut [XL-2016] Problème avec filesystem.deletefile
    Salut et merci,
    C'est comme si je mangeais ma soupe avec un tournevis Voilà bientôt 20 ans que je débute !
    Merci pour cette réponse ultra-rapide.
    Je tâche de suivre la piste et je donne des nouvelles.
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  4. #4
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 492
    Points : 49
    Points
    49
    Par défaut Problème avec filesystem.deletefile
    Re,
    Tout baigne sauf le nom du fichier à diliter. Il n'est normalement pas en dur, mais créé par référence à une userform dont voici un extrait:
    Nom : ex_userform..jpg
Affichages : 71
Taille : 18,7 Ko
    Ma moulinette se présente comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub vidange_fichier()
    Stop
    Dim MyFSO As FileSystemObject
    Set MyFSO = New FileSystemObject
    'MyFSO.DeleteFile ("E:\3_G_E_N_E_A_L_O_G_I_E\A1_Reprise_recherches\chantier_dcd\gedcoms_corr\Gedcom_dépôt_104E")
    'MyFSO.DeleteFile (Nom_Dossier & "\" & Nom_Fichier)
    MyFSO.DeleteFile (Nom_Dossier & "\" & Nom_Fichier & ".ged")
    End Sub
    Le nom du fichier a une extension ".ged"
    Le "stop" dans le code me permet d'examiner le fichier créé (présence d'erreurs) et de le supprimer ensuite.
    Dans les 2 premières variantes le message est "fichier introuvable". Dans la troisième, le point avant "ged" provoque une erreur de séparateur
    Où est le souci ?
    Merci d'avance.
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 175
    Points : 1 724
    Points
    1 724
    Par défaut
    Salut,

    Verifie que la chaîne Nom_Dossier & "" & Nom_Fichier & ".ged"renvoie bien le bon chemin,
    via l'instruction msgbox ou (mieux) debug.print.

    Pose des points d'arret et inspecte tes variables également.

  6. #6
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 492
    Points : 49
    Points
    49
    Par défaut [XL-2016] Problème avec filesystem.deletefile
    Bonjour et merci Deedolith,
    J'ai rectifié le code comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [XL-2016] 
    Sub vidange_fichier()
    Stop
    Dim MyFSO As FileSystemObject
    Set MyFSO = New FileSystemObject
    MsgBox "filename = """ & (Nom_Dossier & "\" & Nom_Fichier) & ".ged"""
    MyFSO.DeleteFile Nom_Dossier & "\" & Nom_Fichier & ".ged", True
    End Sub
    Dans le msgbox, le filename correspond à ce qui s'affiche avec un Dir (invite de commande) donc le nom de fichier est correct.
    J'obtins le message "permission refusée". Je ne comprends pas pourquoi (le fichier n'est pas protégé).
    Une explication ?
    Merci. Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 175
    Points : 1 724
    Points
    1 724
    Par défaut
    Permission Refusée, ca veux dire que soit tu n'as pas les droits suffisants pour accéder au fichier,
    soit que le fichier est en cours d'utilisation: ouvert par une application (y compris la tienne), mal refermé ect ...

  8. #8
    Membre du Club Avatar de touche_a_tout
    Profil pro
    Inscrit en
    Août 2006
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 492
    Points : 49
    Points
    49
    Par défaut [XL-2016] Problème avec filesystem.deletefile
    Bonjour, merci Deedolith,
    J'aurais dû y penser: j'ai intercalé ma sub "vidange" avant que l'appli ajoute la marque de fin de fichier, le tag TRLR, donc le fichier est encore utilisé par mon appli. J'ai une sub qui lance les sous-routines et se termine de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    vidange_fichier
    Print #1, "0 TRLR"
    Close #1
    Est-ce que je peux simplement ajouter, après la ligne Close #1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Stop
    Dim MyFSO As FileSystemObject
    Set MyFSO = New FileSystemObject
    MyFSO.DeleteFile Nom_Dossier & "\" & Nom_Fichier & ".ged", True
    '(... fin de l'appli)
    End Sub
    Je ne m'y lance pas, j'ai peur de f... le bazar.
    Merci pour tout conseil expérimenté
    Cordialement
    touche_a_tout
    There is always an easy solution to every human problem - neat, plausible. And wrong.

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 175
    Points : 1 724
    Points
    1 724
    Par défaut
    La meilleur chose a faire, est de s'assurer que chaque fonction manipulant le fichier soit indépendante et ne vienne pas parasiter les autres.

    Ce que j'aime bien faire:
    1) Monter toutes les données en mémoire.
    2) effectuer les manipulations des données.
    3) redescendre les données si nécessaire.

    C'est moins casse gueule que refaire en permanence des lectures / écritures de morceau de fichier.
    Ca peut donner quelque chose comme suit:
    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
    Public Function ReadFile(ByVal Path As String) As String
        Dim Fso As Scripting.FileSystemObject
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
            '// Ouverture du fichier en lecture seule
        Dim IStream As Scripting.TextStream    '// IStream comme Input Stream
        Set IStream = Fso.OpenTextFile(Path, ForReading)
     
            '// Lecture des données
        ReadFile = IStream.ReadAll
    End Function
     
    Public Sub ProcessData(ByVal Data As String)
        '// code quelconque
    End Sub
     
    Public Sub WriteData(ByVal Path As String, ByVal Data As String)
        Dim Fso As Scripting.FileSystemObject
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
            '// Ouverture du fichier en ecriture
            '// Remplacement de ce dernier
        Dim OStream As Scripting.TextStream    '// OStream comme Output Stream
        Set OStream = Fso.OpenTextFile(Path, ForWriting, Create:=True)
        OStream.Write Data
    End Sub
    Bien sur, la facon de lire / ecrire les données varier, ca depend si on a affaire à des données texte, binaire, si on veut charger les données dans une chaine, un tableau, une collection ect ....

Discussions similaires

  1. [XL-2016] Problme avec opérateur OR
    Par Superpat9999 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/07/2020, 13h57
  2. Réponses: 3
    Dernier message: 03/12/2006, 13h08
  3. Réponses: 18
    Dernier message: 28/08/2006, 23h07
  4. Problème avec DeleteFile
    Par Kara dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2005, 14h33
  5. Réponses: 18
    Dernier message: 30/06/2005, 13h30

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