Creer un dossier avec code vba

dimitri -  
borntobealive Messages postés 167 Statut Membre -
Bonjour,

bonjour à tous,
J'ai fait le tour de plusieurs forums et je n'arrive tjs pas à aboutir.
J'ai regardé le sujet : [Excel VBA] Créer des dossiers sous VBA [Résolu] mais je n'aboutit pas au succés.
Je suis novice sous vba et j'aurai besoin d'aide pour :
A partir d'un onglet / copier onglet dans un nouveau répertoire avec pour le nom du dossier la valeur d'une cellule et pour le nom du fichier la valeur d'une autre cellule.
J'ai réussi à coder le copier coller + nouveau nom du fichier dans un répertoire.
Là ou je bloque c'est pour d'abord créer le dossier puis enregistrer le fichier dedans.
code déjà fait :
Range("A1:AK38").Select
Selection.Copy
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.Zoom = 115
ActiveWindow.Zoom = 130
ActiveWindow.Zoom = 145
ActiveWindow.Zoom = 160
ActiveWindow.DisplayGridlines = False
Chemin = "réseau"

ActiveWorkbook.SaveAs Chemin & [G4] & "-" & [G3] & "-documentation" & ".xls"
ActiveWindow.Close
Range("Aq11").Select
ActiveCell.FormulaR1C1 = "Fichier " & [G4] & " Enregistré"
Range("AP11:BC11").Select
Selection.Font.Bold = True
With Selection.Interior
.ColorIndex = 36
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 50
Range("R4").Select
Selection.ClearContents
Range("D16:D29").Select
Selection.ClearContents

pour la création du dossier, j'ai repris cela : la macro tourne mais rien ne ce passe...
Private Sub CommandButton4_Click()
If Dir(ThisWorkbook.Path & [D13], vbDirectory) = "P:\Tcrsra\SRA_2\PDF-AFFAIRES-SRA2\Documentation fin d'affaire\" Then MkDir ThisWorkbook.Path & [D13]
ThisWorkbook.SaveCopyAs ThisWorkbook.Path & [D13] & Format(Date, "YYYYMMDD") & "_" & Format(Now, "HHMMSS") & ".xls"
End Sub

Comment combiner les deux ????

3 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    A partir d'un onglet / copier onglet dans un nouveau répertoire
    Ce code fait ça...
    Sub CopierFeuilleDansAutreClasseur() 
    Dim WkSource As Workbook 
    Dim WkCopie As Workbook 
    Dim Chemin As String 
        Set WkSource = ThisWorkbook 
        Set WkCopie = Workbooks.Add 
        WkSource.Sheets("Feuil1").Copy Before:=WkCopie.Sheets(1) 
        With WkSource 
            Chemin = .Path & "\" & .[G4] & "\" 
        If Dir(Chemin) = "" Then MkDir Chemin 
        Application.DisplayAlerts = False 
        WkCopie.SaveAs Chemin & "\" & "-" & .[G3] & _ 
        "-documentation.xls" 
        Application.DisplayAlerts = True 
        End With 
        WkCopie.Close 
        WkCopie = Nothing 
        WkSource = Nothing 
    End Sub

    Pour info :
    Tester si un répertoire existe avec Dir.
    Si Dir renvoi "" c'est que le répertoire n'existe pas faut l créer.
    Note : Dir ne crée pas les sous-répertoires s'ils n'existent pas, il faut employer une cascade comme..
    Sub CascadeRepertoires() 
    Dim TB, S As String, i As Integer 
        Dim Chemin As String 
        'Créer un répertoire et sous-Répertoire 
        Chemin = "C:\Test1\Test2" 
        TB = Split(Chemin, "\") 
        If Dir(Chemin) = "" Then 
            S = TB(0) & "\" ' & TB(1) 
            For i = 1 To UBound(TB) 
                S = S & TB(i) & "\" 
                If Dir(S) = "" Then 
                    MkDir S 
                End If 
            Next 
        End If 
    End Sub 
    

    Je t'ai mis ça au cas ou G4 serait du genre Rep1\Rep2
    Et évite tout ces Select qui proviennent de l'éditeur de macro.
    Emploi directement les objets.
        With Range("AP11:BC11")
            .Font.Bold = True
            .Font.ColorIndex = 50
            .Interior.ColorIndex = 36
        End With

    Tu dis.
    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    1
  2. pierrot69
     
    slt,

    Desolé pour le deterage de post, ce code est exactement ce dont j'ai besoin sauf que quoi qu'il arrive la fonction dir me renvoi toujours "" même quand je cherche dir (D:\) ce qui est évidement impossible

    quelqu'un saurait pourquoi ?
    0
  3. borntobealive Messages postés 167 Statut Membre 7
     
    attention si vous ne rajoutez pas vbdirectory dans les attributs de la fonction dir et que vous chercher des repertoires, elle vous renverra toujours ""

    essayez plutôt :

    Sub CascadeRepertoires() 
    Dim TB, S As String, i As Integer 
        Dim Chemin As String 
        'Créer un répertoire et sous-Répertoire 
        Chemin = "C:\Test1\Test2" 
        TB = Split(Chemin, "\") 
        If Dir(Chemin, vbDirectory) = "" Then 
            S = TB(0) & "\" ' & TB(1) 
            For i = 1 To UBound(TB) 
                S = S & TB(i) & "\" 
                If Dir(S, vbDirectory) = "" Then 
                    MkDir S 
                End If 
            Next 
        End If 
    End Sub 
    
    0