re re re re
j'ai peur d'insister mais les consiels de Fgirard sont à suivre tant pour l'utilisation de [Scripting.FileSystemObject] que de [SaveAs].
Bon maintenant on peut s'obstiner à utiliser Dir mais il faut bien métriser la bête, bien faire le distingo entre fichiers et dossiers !!
ton bout de code :
'Test si le dossier avec l'année existe, si non le créer
If Dir(CheminNomFichierPDF) = "" Then
MkDir CheminNomFichierPDF
End If
je traduis : Si il n'y a pas de fichier à l'adresse [CheminNomFichierPDF] alors appeler MkDir pour créér le dernier sous dossier contenu dans l'adresse [CheminNomFichierPDF].
Ton test n'étant pas le bon alors MkDir peut planter si le dernier sous dossier de l'adresse existe (erreur d'exécution 75).
MkDir plante aussi si l'avant dernier sous dossier de l'adresse n'existe pas (erreur d'exécution 76).
MkDir plante également si le lecteur, [R:] par example, n'est pas disponible, si ...
Par contre MkDir est insensible au fait qu'il y a ou pas un [\] à la fin de l'adresse.
un programme un peu aménagé issu de l'aide VBA ( sélectionner Dir et appuyer sur F1 pour obtenir l'aide):
' Affiche dans la fenêtre d'exécution (Ctrl+G) les noms des dossiers présents à l'adresse [C:\A\]
' et si l'un de ces noms de dossier est "2014" alors le programme stoppe
Dim MyFile, MyPath, MyName
MyPath = "C:\A\" ' Définit le chemin d'accès.
MyName = Dir(MyPath, vbDirectory) ' Extrait la première entrée.
Do While MyName <> "" ' Commence la boucle.
' Ignore le dossier courant et le dossier
' contenant le dossier courant.
If MyName <> "." And MyName <> ".." Then
' Utilise une comparaison au niveau du bit pour vérifier que MyName est un dossier.
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName ' Affiche l'entrée uniquement si elle représente un dossier.
If MyName = "2014" Then Stop 'le dossier '2014' existe !!
End If
End If
MyName = Dir ' Extrait l'entrée suivante.
Loop
ce bout de code est avantageusement remplaçable par ( voir Remarques Fgirard ) :
Dim oFSO As Scripting.FileSystemObject
Dim oFld As Folder
Set oFSO = New Scripting.FileSystemObject
If oFSO.FolderExists( "c:\A\2014") = True Then
stop
End If
OU encore plus simple et sans surprise
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FolderExists("c:\A\2014") Then
Stop
End If
Reste à voir pour ton [SaveAs]
Je viens d'essayer ça :
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim Rép As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Rép = swModel.SaveAs("C:\A\toto.pdf") ' "C:\A" doit exister, si "toto.pdf" existe alors il sera automatiquement écrasé
et ça fonctionne très bien. >> Quand tu débogues , commence par du texte entre parenthèses (ici "C:\A\toto.pdf"). Si ça fonctionne alors Rép renvoie la valeur True. Ensuite, tu peux tenter de substituer ton texte par une variable (ici une variable déclarée comme string).
A+