VBA : Dossiers créés par macro ineffaçables

Bonjour,

J'ai créé une macro avec l'aide du Forum mais ça a généré un problème inattendu.

Dans le fichier ci-joint, si je choisis ''Devis'' en A1, que j'inscris le nom d'un client en E5 et que je clique sur le bouton "A", la macro va chercher si un dossier au nom du client existe, si non elle va le créer, et puis elle va chercher si un sous-dossier ''Devis" ou ''Facture'' existe - selon le choix en A1 - si non elle va le créer, et va enregistrer le devis ou la facture à cet endroit.

Le problème vient du fait que j'ai inscrit "Facture " avec un espace dans ma liste déroulante en A1 et que les sous-dossiers créés sur cette base comportent eux aussi un espace.

Il n'est alors pas possible d'ouvrir le dossier PDF créé (ici classé sous le nom du client "aaa" et dans le sous-dossier "Facture ") :

image

et, le plus embêtant, il n'est pas possible de supprimer ni le dossier au nom du client, ni le sous-dossier ''Facture " qu'il comporte (ici j'ai encore tenté de modifier le nom du client de "aaa" à "qqq")

image

Avez-vous une idée de solution ?

Voici encore mon fichier créant problèmes :

10essai-forum.xls (43.50 Ko)

Cordialement

Bonjour,
Tu peux peut-être commencer par supprimer l'espace !?
Cdlt.

Salut Jean-Eric,

Merci pour ta réponse. J'ai oublié de dire que j'avais tenté cela, mais lorsque j'essaie de supprimer l'espace du nom du dossier, je reçois le message suivant :

image

Une autre idée ?

Bon dimanche.

Bonjour,
Une proposition.
Cdlt.

Public Sub CreatePDF()
Dim wb As Workbook, ws As Worksheet
Dim sPath As String, sCustomer As String, sDocument As String, sFile As String
Dim lCount As Long

    Set wb = ActiveWorkbook
    Set ws = wb.Worksheets("Factures")
    'Dossier
    sPath = wb.Path & Application.PathSeparator
    'Dossier Client
    sCustomer = sPath & ws.Cells(5, 5).Value
    'Dossier Document (devis ou facture)
    sDocument = sCustomer & Application.PathSeparator & ws.Cells(1).Value
    'Num facture
    lCount = ws.Cells(12, 2).Value

    If Len(Dir(sCustomer, vbDirectory)) = 0 Then MkDir sCustomer
    If Len(Dir(sDocument, vbDirectory)) = 0 Then MkDir sDocument

    sFile = sDocument & Application.PathSeparator & lCount & ".pdf"

    If Len(Dir(sFile, vbDirectory)) > 0 Then
        MsgBox "le fichier a déjà été crée !...", 64, "Information"
    Else
        ws.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=sFile
    End If

End Sub

Re-salut,

Merci pour ta proposition, mais ma macro pour créer des dossiers et sous-dossiers, je l'ai déjà (corrigée).

Mon problème est de pouvoir "effacer ces dossiers ineffaçables".

Amicalement.

Re,
Pas spécialiste. Adapter la seconde partie de la procédure.
Cdlt.

Public Sub CreatePDF()
Dim wb As Workbook, ws As Worksheet
Dim objFSO As Object
Dim sPath As String, sCustomer As String, sDocument As String, sFile As String
Dim lCount As Long

    Set wb = ActiveWorkbook
    Set ws = wb.Worksheets("Factures")
    'Dossier
    sPath = wb.Path & Application.PathSeparator
    'Dossier Client
    sCustomer = sPath & ws.Cells(5, 5).Value
    'Dossier Document (devis ou facture)
    sDocument = sCustomer & Application.PathSeparator & ws.Cells(1).Value
    'Num facture
    lCount = ws.Cells(12, 2).Value

    If Len(Dir(sCustomer, vbDirectory)) = 0 Then MkDir sCustomer
    If Len(Dir(sDocument, vbDirectory)) = 0 Then MkDir sDocument

    sFile = sDocument & Application.PathSeparator & lCount & ".pdf"

    If Len(Dir(sFile, vbDirectory)) > 0 Then
        MsgBox "le fichier a déjà été crée !...", 64, "Information"
    Else
        ws.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=sFile
    End If

    With ws
        .Cells(12, 2).Value = lCount + 1
        .Cells(5, 5).ClearContents
    End With

    Stop

    If Right(sCustomer, 1) = "\" Then
        sCustomer = Left(sCustomer, Len(sCustomer) - 1)
    End If

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    If objFSO.FolderExists(sCustomer) Then
          objFSO.DeleteFile sCustomer & "\*.*", True
          objFSO.Deletefolder sCustomer & "\*.*", True
          objFSO.Deletefolder sCustomer, True
     End If

    Set objFSO = Nothing

End Sub

Salut Jean-Eric,

Merci encore une fois pour ton aide.

Il semble que tu me proposes un nouveau code afin de pouvoir créer des dossiers et sous-dossiers si nécessaire, mais ce n'est toujours pas là mon problème. Je voudrais - dans l'arborescence de mon explorateur de fichiers - pouvoir supprimer mes dossiers et sous-dossiers créés par erreur et ineffaçables pour l'instant.

Ou alors je n'ai rien compris à ta nouvelle proposition ?

Bien à toi.

Re,
Ou c'est moi qui ne comprend pas au vue de tes explications !
Que signifie :

dans l'arborescence de mon explorateur de fichiers - pouvoir supprimer mes dossiers et sous-dossiers créés par erreur et ineffaçable

As-tu une ébauche VBA de ce que tu souhaites réaliser?
Cdlt.

Merci Jean-Eric de continuer à t'intéresser à mon problème.

J'avais tout d'abord expliqué que mon problème (supprimer des dossiers ou des sous-dossiers dans mon explorateur de fichiers) avait été bien généré par une macro - qui créait des sous-dossiers comportant un espace dans leur nom - mais la résolution de celui-ci me semble être plus un problème d'informatique qu'un problème Excel-VBA.

Voici une image de ce que je nomme mon explorateur de fichiers avec son arborescence.

image

Normalement, si j'effectue un clic-droit à cet endroit sur un fichier ou un dossier, je peux choisir de le supprimer.

Mais mon problème est que pour les trois dossiers visibles à l'écran (60_SECURITE, qqq et ttt), il est impossible de les supprimer car ils contiennent tous un sous-dossier dont le nom comporte un espace à la fin. Je ne peux non plus ni supprimer, ni renommer ces sous-dossiers. J'ai fournis dans mes messages précédents des copies d'écran des différents messages d'erreur que je reçois lorsque je tente de les supprimer.

Amicalement.

bonjour Yvouille,

pour supprimer l'espace à la fin du nom de sous-dossier, tu peux passer par la boite de commande.

alt-r, puis introduis cmd, introduis la lettre identifiant le disque contenant les dossiers à renommer.

positionne-toi dans le bon répertoire (répertoire contenant le répertoire à modifier)

puis utilise la commande REN ancien_nom nouveau_nom. ancien_nom doit être mis entre " pour que l'espace final soit pris en compte.

exemple (en gras les caractères à introduire)

C:>D:

D:>repertoire

d:/repertoire>ren "nom " nouveau_nom

Salut h2so4,

Merci beaucoup pour ton intervention. Dommage que tu parles tout à coup chinois

J'ai cherché sur Internet ''Boîte de commande'' et j'ai ainsi pu ouvrir la fenêtre ci-dessous :

image

Le premier texte entouré de rouge est déjà inscrit et j'ai tenté de copier-coller le chemin de l'un de mes dossiers contenant un sous-dossier à problème.

J'ai alors eu un très grand frisson et me suis dit que j'allais éventuellement foutre en l'air tout mon ordinateur. J'ai alors très rapidement cliqué sur la croix en haut à droite.

Etais-je parti dans la bonne direction ? Penses-tu réellement que je pourrais y arriver seul après t'avoir posé 23 ou 24 questions ? Accepterais-tu exceptionnellement une séance TeamViewer (ou autre) lors de laquelle tu m'indiquerais ce que je dois faire ?

A te relire.

bonjour Yvouille,

je t'ai envoyé un MP.

Rechercher des sujets similaires à "vba dossiers crees macro ineffacables"