Question sur ma macro

Voilà j'ai fais les modifs mais cela me fait toujours pareil, et quand je la relance voilà ou ça bug !

 

 


sans_titre.png

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

1 « J'aime »

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.

1 « J'aime »

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 !

 

 

1 « J'aime »

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).

1 « J'aime »

Et pour mon message de 15:47, c'était concernant la création du dossier, pas l'enregistrement du PDF :

 

Lucas P

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

1 « J'aime »

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+

 

 

 

2 « J'aime »

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

2 « J'aime »

Parfait Lucas, ça fonctionne !!

MERCI A TOUS POUR VOTRE AIDE !!!!!