CreateFolder récalcitrant

Résolu
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 27 avril 2011 à 22:25
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 - 20 févr. 2012 à 12:02
Bonjour à tous,

Avec une chaîne de caractère SANS ESPACE comme "D:\AEROLEAK\Sauve\FRANCE_TELECOM\HARDOY",dans la form ExportFichier.NomTxt.Text, CreateObjet plante...(Erreur d'exécution N°76 : Chemin d'accès introuvable)
En fait, dans cet exemple, Une partie des dossiers existe déjà (D:\AEROLEAK\Sauve\), mais d'autres sont absents et sont donc à créer (FRANCE_TELECOM\HARDOY\)
Au début j'avais un nom de dossier avec un espace, et j'ai pensé que c'était la source du problème, mais non, cela n'a rien changé quand je l'ai supprimé.

Je ne vois pas où ça "coince".

Voila la Sub complète
Private Sub ButtonOK_Click()
'= Réponse OK : Enregistrer le Fichier avec les Chemin et Nom proposés ou saisis

    Application.ScreenUpdating = False                                              'Figer l'affichage

    If ExportFichier.CheminTxt.Text "" Or ExportFichier.NomTxt.Text "" Then     'Si les Nom ou Chemin du Fichier sont nuls
        Exit Sub                                                                    'Quitte
'       ========
    Else                                                                            'Sinon...
        CheminFichier = ExportFichier.CheminTxt.Text                                'Reprend le Chemin
        Dim fs As Scripting.FileSystemObject
        Set fs = New Scripting.FileSystemObject
        If Not fs.FolderExists(CheminFichier) Then                                  'Teste si le répertoire existe

'!!!!!!!   
            fs.CreateFolder (CheminFichier)                                         'Création du répertoire si absent
'!!!!!!!

        End If
        Set fs = Nothing
        NomFichier = ExportFichier.NomTxt.Text                                      'Reprend le Nom
'Vérifie l'existence d'un fichier du même nom et propose une action ...
        FichierExistant = Dir(CheminFichier & NomFichier & ".xls", vbDirectory)     'Recherche si le fichier existe
'si Existe pas :
        If FichierExistant "" Or FichierExistant "." Then                       'si le fichier n'existe pas...
            Range("C100").Value = ExportFichier.CheminTxt.Text                      'Affecte le Chemin
            Range("C101").Value = ExportFichier.NomTxt.Text                         'Affecte le Nom
            ExportFichier.Hide                                                      'Ferme la Box ExportFichier
            Sauvegarder                                                             'Appelle la macro Sauvegarder
'si Existe :
        Else                                                                        'Charge les données dans la Box SaveMsg
            SaveMsg.Caption = "Destination..."                                      'Titre
            SaveMsg.MsgTxt = "Enregistrer sous " & CheminFichier & NomFichier       'Texte Messsage
            SaveMsg.ButtonYes.Caption = "Ecraser le Fichier existant."              'Texte Bouton OUI
            SaveMsg.ButtonNo.Caption = "Modifier la Destination."                   'Texte Bouton NON
            SaveMsg.Show                                                            'Affiche la Box SaveMsg
        End If
    End If

End Sub


Merci pour toute aide
Cordialement
Rataxes64

5 réponses

Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
9 mai 2011 à 18:31
La fonction Split (voir aide) peut te renvoyé un tableau d’élément en fonction du séparateur que tu lui a fourni...

http://msdn.microsoft.com/fr-fr/library/6x627e5f%28v=vs.80%29.aspx

Pour un chemin le séparateur idéal est ""

Ce qui fait qu'après ta plus qu'a faire un parcours de ton tableau avec vérification d'existence..(Concaténation des éléments du tableaux pour le chemin complet)

L'espace n'est pas un problème dans ce cas.
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 avril 2011 à 22:37
Salut

Ce doit être parce que CreateFolder (et pas CreateObject) ne sait créer que le dernier répertoire, pas une arborescence entière.
Il te faut donc décomposer le chemin à créer (avec Split par exemple) puis, à partir de la racine, tester si les répertoires existent progressivement.

En faisant une recherche de 30 sec avec "vba createfolder" il y a des exemples tout fait, appuyés par des commentaires constructifs.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
[img]http://allproj
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 avril 2011 à 22:44
Exemple de qualité (merci RenField) dans <cette source VB6> mais que tu peux transposer sous VBA
0
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
28 avril 2011 à 11:49
Merci Jack de tes réponses,

J'ai cherché (bien plus que 20 secondes) et je n'ai pas réussi à trouver les exemples évoqués (l'aide VBA est plus que mince sur le sujet).

Je n'ai pas réussi non plus à transposer le code du lien de VB6 (Merci RenField) en VBA et exploiter cette fonction

J'avais bien remarqué que CreateFolder me marchait que pour UN SEUL répertoire ajouté à un chemin existant.

Mais, c'est un chemin COMPLET (d'un nombre de sous répertoires inconnu à l'avance) que je dois exploiter.

Merci de bien vouloir éventuellement me guider pour l'utilisation de la fonction "Split", sachant que je peux aussi avoir des noms de sous répertoire comprenant un espace, comme dans mon exemple :

"D:\AEROLEAK\Sauve\FRANCE TELECOM\HARDOY", où en l'espèce seul le chemin "D:\AEROLEAK\Sauve" existe, et qu'il faut donc créer la suite.

Bien cordialement

Rataxes64
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CerberusPau Messages postés 377 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 22 août 2018 1
20 févr. 2012 à 12:02
Oups!

Je viens seulement de me rendre compte que j'ai oublié "Réponse acceptée"!

Rataxes64
0
Rejoignez-nous