IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

VBA Word Discussion :

Comment savoir si un répertoire existe déjà ?


Sujet :

VBA Word

  1. #1
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Par défaut Comment savoir si un répertoire existe déjà ?
    Bonjour,

    J'aurais juste voulu savoir comment faire pour tester le code retour de MkDir ou s'il y a moyen de savoir qu'un répertoire existe déjà.
    Ma macro doit créer un répertoire pour l'année en cours puis pour le mois mais ne pas s'arrêter pour autant s'ils existent déjà.
    Merci

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Le plus simple pour le créer s'il n'existe pas est une gestion d'erreur, soit sur un dir le chemin de ce répertoire, soit sur un MKdir le répertoire sur le répertoire parent
    Ex : Le répertoire à créer est "NewRep" que tu veux placer dans "C:\RepParent\"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    on error resume next
    Chdir "C:\RepParent\"
    Mkdir "NewRep"
    On error goto 0
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    on error resume next
    Chdir "C:\RepParent\NewRep"
    Mkdir "C:\RepParent\NewRep"
    On error goto 0

  3. #3
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Par défaut
    Désolée mais je comprend pas bien la nuance

    Edit : j'crois j'ai compris en fait
    Dans le premier script, je vais en fait tester le mkdir, si la création se passe bien ou non.
    Dans le second, je vais tester le chdir et si je suis en erreur créer le répertoire.

    En tout cas merci

  4. #4
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Par défaut récuperer le résultat d'un chdir
    Bon la création du répertoire (en test sur le C) oki

    Par contre, en réel, je vais être sur un lecteur distant, dont la lettre peut variée selon le poste. Donc pour ça, je récupère le chemin de mon modèle et je remonte de 2 répertoires (l'arborescence est toujours la même ). Jusque là oki.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    path_modele = ActiveDocument.Path
     
    ChDir path_modele   ' ex: s:\cosmetov\Lettres_type\France
    ChDir ".."          ' ex: s:\cosmetov\Lettres_type
    ChDir ".."          ' ex: s:\cosmetov\
    Pour créer mes répertoires, j'ai besoin de récupérer le chemin après remontée. Et là, bah le curdir donne sur le c par défaut vu que je spécifie pas de lecteur.
    Donc ma question est : y'a t'il un moyen de récuperer le résultat d'un chdir ?Ou je dois bidouiller en récupérant la première lettre de mon path_modele ?

  5. #5
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Par défaut ChDir j'y comprend rien
    Bon alors ... j'ai récupéré la lettre du lecteur de mon modèle.
    Et là je comprend plus rien du tout, du tout Parce que mon chdir ".." ne fonctionne pas où je fais un truc qui l'inhibe, mais je vois pas quoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ' Nom du lecteur
    path_modele = ActiveDocument.Path
    nom_lecteur = Left(path_modele, 3)
     
    ' Remonte au bon endroit
    ChDir (nom_lecteur) ' ex s:\
    ChDir path_modele   ' ex: s:\cosmetov\Lettres_type\France
    ChDir ".."          ' ex: s:\cosmetov\Lettres_type
    ChDir ".."          ' ex: s:\cosmetov\
     
    cur_path = CurDir(nom_lecteur)
    Après ce bout de code ma variable cur_path vaut la valeur de path_modele

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu veux aller dans quel répertoire ?

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour te placer sur un autre volume que le volume actif, c'est
    Une fois dans s:\, pour te placer dans un répertoire quelconque du volume s, c'est
    Chdir ne fonctionne que sur le volume courant.

  8. #8
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Par défaut
    Merci Ousk, je vais voir ce que j'arrive à faire avec ça

    Edit : Alléluia, ça marche !!
    Petit à petit, Sailor LVCV avance dans la programmation de sa macro

    Bon, maintenant ! Le saveas

    Re Edit :

  9. #9
    Membre averti
    Inscrit en
    Mai 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2005
    Messages : 49
    Par défaut Fusion + enregistrement du document sous un nom formaté par des champs de fusion
    Y'a surement des choses qui vont être dures à lire par les experts
    Le principal pour moi c'est qu'elle fonctionne et que j'ai compris la plus part de ce que j'ai codé. La plupart ?? Bah oui, la partie fusion est très floue pour moi.

    Enfin voilà pour ceux qui en aurait besoin pour inspiration ou autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    Sub fusionner_cosmeto()
    '
    ' Macro enregistrée le 27/09/2007 par Sailor LVCV
    '
        Dim path_modele     ' Chemin du modèle de lettre
        Dim MyXL As Object  ' Variable devant contenir la référence à Microsoft Excel.
     
        ' Rendre invisible les modifications de Word à l'écran
        Application.ScreenUpdating = False
     
        ' Récupération du nom complet du modèle de lettre
        docname = ActiveDocument.Name
        ' Récupération du nom du modèle de lettre : 4 = .doc
        nom_modele = Left(docname, Len(docname) - 4)
        ' Récupération du path du modèle de lettre
        path_modele = ActiveDocument.Path
        ' Récupération du nom du fichier excel BD
        xlsname = ActiveDocument.MailMerge.DataSource.Name
     
        '**********************************************************
        ' Fusion c'est ici le Flou total
        '**********************************************************
        With ActiveDocument.MailMerge
            .Destination = wdSendToNewDocument
            .MailAsAttachment = False
            .MailAddressFieldName = ""
            .MailSubject = ""
            .SuppressBlankLines = True
            With .DataSource
                .FirstRecord = wdDefaultFirstRecord
                .LastRecord = wdDefaultLastRecord
                ' récupération du cos_num et de la date du courrier(1 enregistrement)
                cos_num = .DataFields("cos_num").Value 
                sui_dat = .DataFields("sui_dat").Value
            End With
            .Execute Pause:=True
        End With
     
        '**********************************************************
        ' Fermeture des documents
        '**********************************************************
        ' Fermeture du modèle de lettre sans enregistrement
        Documents(docname).Close SaveChanges:=wdDoNotSaveChanges
     
        ' Si excel était déjà ouvert, le fichier BD du modèle de lettre reste ouvert, alors on le ferme.
        If Tasks.Exists(Name:="Microsoft Excel") = True Then
            ' Définit la variable objet faisant référence au fichier
            Set MyXL = GetObject(xlsname)
     
            On Error Resume Next
                ' Fermeture du fichier sans enregistrer les modifications
                MyXL.Application.ActiveWorkbook.Close SaveChanges:=wdDoNotSaveChanges
                ' Libère la référence à l'application et à la feuille de calcul.
                Set MyXL = Nothing
            On Error GoTo 0
        End If
     
        '**********************************************************
        ' Enregistrement du fichier au nom preformaté dans un
        ' répertoire bien précis année\mois
        '**********************************************************
        ' Noms des répertoires
        annee = Year(sui_dat) ' 2007
        mois = "0" & Month(sui_dat) & " - " & MonthName(Month(sui_dat)) ' 09 - Septembre
     
        ' Constitution du nom du document
        nom_fic = (nom_modele & "_" & cos_num & "_" & Format(sui_dat, "yyyy-mm-dd") & ".doc")
     
        ' Change de lecteur actif
        nom_lecteur = Left(path_modele, 3)
        ChDrive (nom_lecteur)   ' ex: s:\
     
        ' Remonte au bon endroit
        ChDir path_modele       ' ex: s:\cosmetov\Lettres_type\France
        ChDir ".."              ' ex: s:\cosmetov\Lettres_type
        ChDir ".."              ' ex: s:\cosmetov\
     
        ' Répertoire actif sur le lecteur
        cur_path = CurDir(nom_lecteur)
     
        ' Création de l'arborescence si besoin
        path_saveas = cur_path & "\" & annee
        On Error Resume Next ' Test si le répertoire année existe déja
            ChDir path_saveas
            MkDir path_saveas
        On Error GoTo 0
     
        path_saveas = cur_path & "\" & annee & "\" & mois
        On Error Resume Next ' Test si le répertoire mois existe déja
            ChDir path_saveas
            MkDir path_saveas
        On Error GoTo 0
     
        ' Enregistrement du fichier : path + nom
        nom_fic_complet = path_saveas & "\" & nom_fic
        ActiveDocument.SaveAs FileName:=nom_fic_complet
     
        Application.ScreenUpdating = True
        ActiveDocument.ActiveWindow.WindowState = wdWindowStateMaximize
    End Sub
    Ah ! Si vous voyez des améliorations à faire c'est gentil de me le dire

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    path_modele = "D:\CLIPART\Album photos\2007-09-15 - Balade moto Dévoluy\Photos Club"
    ChDir Split(path_modele, "\")(0) & "\" & Split(path_modele, "\")(1)
    Juste pour m'amuser

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6]Comment savoir si un répertoire existe
    Par pendragon dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 30/09/2016, 07h42
  2. [A_03] Comment savoir si un répertoire existe?
    Par Pownee dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/11/2008, 12h37
  3. comment savoir si une table existe dans la base?
    Par isa21493 dans le forum ASP
    Réponses: 6
    Dernier message: 01/09/2005, 18h09
  4. [javascript] Comment savoir si un div existe
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/08/2005, 18h13
  5. [URL] Comment savoir si une URL existe?
    Par jse dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 07/10/2004, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo