CreateFolder récalcitrant [Résolu]

Messages postés
377
Date d'inscription
lundi 3 avril 2006
Dernière intervention
22 août 2018
- - Dernière réponse : CerberusPau
Messages postés
377
Date d'inscription
lundi 3 avril 2006
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Dernière intervention
19 février 2012
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de Phalalis
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
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
Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
0
Merci
Exemple de qualité (merci RenField) dans <cette source VB6> mais que tu peux transposer sous VBA
Commenter la réponse de cs_Jack
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Dernière intervention
22 août 2018
0
Merci
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
Commenter la réponse de CerberusPau
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Dernière intervention
22 août 2018
0
Merci
Oups!

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

Rataxes64
Commenter la réponse de CerberusPau

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.