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

  1. #1
    Membre éprouvé
    Lecture/écriture sur un dossier: permission refusée
    Bonjour à tous !

    Tout est dans le titre:

    Je crée dynamiquement un dossier d'export via :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Set FSO = CreateObject("Scripting.FileSystemObject")


    vérification d'existence des dossiers en sortie et en entrée:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        rep = strRep_In
        Set FSO = CreateObject("Scripting.FileSystemObject")
        If FSO.FolderExists(rep) = False Then
            rep = MsgBox("Répertoire de sortie des media à exporter non créé.", vbCritical + vbOKOnly, "SESAM")
            Exit Sub
        End If
        rep = strRep_Out
        If FSO.FolderExists(rep) = False Then
            rep = MsgBox("Répertoire des media à exporter non créé.", vbCritical + vbOKOnly, "SESAM")
            Exit Sub
        End If


    Boucle de copie des fichiers. Vous noterez l'utilisation de SetAttr:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Do While .EOF = 0
                ficSrc = !Media_FullPath: ficDest = AddBackslash(strRep_In) & "PHOTOS\"
                SetAttr ficDest, vbNormal
                Set ficName = FSO.getfile(ficSrc)
                Forms!pgbar!PTxt = ficName.Name
                Forms!pgbar!pgbar = .PercentPosition
                Forms!pgbar.SetFocus
                FSO.CopyFile ficSrc, ficDest
                DoEvents
                .MoveNext
            Loop


    Le dossier de sortie est systématiquement recréé avant l'appel de cette procédure:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        rep = "C:\Poubelle\Sortie_Fouille\Sortie_Filtre\PHOTOS"
        If FSO.FolderExists("C:\Poubelle\Sortie_Fouille\Sortie_Filtre\PHOTOS") = False Then FSO.CreateFolder "C:\Poubelle\Sortie_Fouille\Sortie_Filtre\PHOTOS"
        If FSO.FolderExists(rep) Then
            SetAttr rep, vbNormal
            DoEvents
        End If
        DoEvents


    Et pourtant une fois sur deux j'ai le message : "permission refusée"
    A ce stade si, depuis l'explorateur, j'enlève lecture seule "à la main" pour le dossier de destination, le code peut continuer.

    Tout se passe comme si SetAttr ne faisait rien (ou mal utilisé?)

    Avez-vous une idée de mon erreur ?
    Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
    Ou encore:
    Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
    ... Des principes qui m'ont beaucoup aidé en informatique...

  2. #2
    Membre éprouvé
    Lecture/écriture sur un dossier: permission refusée
    OK, je crois avoir trouvé!

    Pour ceux que çà intéresse: il a suffit d'insérer un DoEvents entre la suppression d'un répertoire et sa re-création.

    Je laisse ce post ouvert quelque temps au cas où quelqu'un trouverait autre chose...
    Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
    Ou encore:
    Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
    ... Des principes qui m'ont beaucoup aidé en informatique...