Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/09/2007, 10h50   #1
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
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
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 11h37   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
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 :
1
2
3
4
on error resume next
Chdir "C:\RepParent\"
Mkdir "NewRep"
On error goto 0
ou
Code :
1
2
3
4
on error resume next
Chdir "C:\RepParent\NewRep"
Mkdir "C:\RepParent\NewRep"
On error goto 0
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2007, 12h02   #3
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
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
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2007, 11h39   #4
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
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 :
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 ?
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 12h04   #5
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
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 :
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
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 20h37   #6
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Tu veux aller dans quel répertoire ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2007, 21h04   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
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.
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 09h58   #8
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
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 :
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 11h00   #9
Futur Membre du Club
 
Inscription : mai 2005
Messages : 49
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2005
Messages : 49
Points : 15
Points : 15
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 :
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
sailor lvcv est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 19h37   #10
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Code :
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
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h57.


 
 
 
 
Partenaires

Hébergement Web