Voilà j'ai fais les modifs mais cela me fait toujours pareil, et quand je la relance voilà ou ça bug !
sans_titre.png
Voilà j'ai fais les modifs mais cela me fait toujours pareil, et quand je la relance voilà ou ça bug !
Ah je pense que c'est car tu n'as pas l'antislash à la fin de ton chemin !!!
Pour le vérifier, ajoute ceci :
If right(CheminNomFichierPDF,1) = "\" then
CheminNomFichierPDF = CheminNomFichierPDF & "\"
End if
Il faut le mettre avant ta ligne :
If Dir$(CheminNomFichierPDF) = "" Then
Non lucas, cela reste idem je ne l'ai pas fait comme tu l'as dit , je l'ai fait comme cela.
CheminNomFichierPDF = "C:\ANGER\pdf\" & NomDossierPDF & "\"
mais cela ne change rien.
Par contre comment ça fonctionne cela?
nErrors = SWmoddoc.SaveAs(NomFichierPDF) NomFichierPDF=045/1-2014-A
Que doit on avoir entre les parenthèses?
je trouve pas et je comprends pas trop ce qu'il y a sur internet.
Comme indiqué plus haut, ta variable NomFichierPDF doit contenir l'extension du fichier !
Donc pour toi .pdf
Et peut-être le chemin aussi ?
Essaye les deux.
J'ai pas possibilité de tester actuellement.
J'ai essayé les 2 sachant que la variable "NomFichierPDF" à bien l'extension à l'origine, mais cela reste pareil, il me l'enregistre dans le dossier ou est le fichier active.
Donc tu n'as pas essayé d'inclure le chemin de destination (là où tu veux l'enregistrer) dans NomFichierPDF ?
Car un "save as" sans le chemin l'enregistre dans le dossier où il y a la pièce d'origine !
Ca sera :
nErrors = SWmoddoc.SaveAs(CheminNomFichierPDF & NomFichierPDF)
En veillant bien à ce qu'il y ait un antislash entre les 2 (dans la première variable ou la seconde, peut importe).
Et pour mon message de 15:47, c'était concernant la création du dossier, pas l'enregistrement du PDF :
15 juillet, 2014 - 15:47
Ah je pense que c'est car tu n'as pas l'antislash à la fin de ton chemin !!!
Pour le vérifier, ajoute ceci :
If right(CheminNomFichierPDF,1) = "\" then
CheminNomFichierPDF = CheminNomFichierPDF & "\"
End if
Il faut le mettre avant ta ligne :
If Dir$(CheminNomFichierPDF) = "" Then
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+
Bonjour à vous,
donc j'ai essayé un peu ce que tu m'as donné caronmaxime
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FolderExists("c:\A\2014") Then
Stop
End If
par contre j'ai laissé ma phase d'enregistrement en mettant l'adresse complète.
ET CELA FONCTIONNE !!!!
par contre et oui il y a juste un hic, si le dossier existe tu as marqué "STOP" je dois marqué quoi pour que cela ne me recrée pas le dossier et que cela enregistre normalement.
je te joins mon code.
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FolderExists(CheminNomFichierPDF) Then
Stop
End If
MkDir (CheminNomFichierPDF)
'------------------------------------------------------------------
'Test si le fichier existe déjà ou confirmation
'puis enregistrement
If Dir$(CheminNomFichierPDF) = NomFichierPDF Then 'Le fichier existe déjà
If MsgBox("Le fichier : " & NomFichierPDF & vbNewLine & "existe déjà. Voulez-vous le remplacer?", _
vbOKCancel + vbExclamation) = vbOK Then
nErrors = SWmoddoc.SaveAs(CheminNomFichierPDF + NomFichierPDF)
Else
If MsgBox("Le fichier PDF n'a pas été créé.", vbInformation) = vbOK Then Exit Sub '-------Message et SORTIE-------
End If
Else
If MsgBox("Le fichier : " & NomFichierPDF & vbNewLine & " va être créé", vbOKCancel + vbInformation) = vbOK Then
nErrors = SWmoddoc.SaveAs(CheminNomFichierPDF + NomFichierPDF)
Else
If MsgBox("Le fichier PDF n'a pas été créé.", vbInformation) = vbOK Then Exit Sub '-------Message et SORTIE-------
End If
End If
End Sub
Il faut tester la condition inverse :
If fs.FolderExists(CheminNomFichierPDF) Then
Else
MkDir (CheminNomFichierPDF)
End If
Parfait Lucas, ça fonctionne !!
MERCI A TOUS POUR VOTRE AIDE !!!!!