Question sur ma macro

Bonjour,

 

J'ai créer une macro à l'aide de ce que j'ai trouvé, elle doit me convertir ma MEP en pdf et l'enregistrer dans le dossier de l'année dans laquelle elle a été créé, si le dossier n'existe pas le créer.

 

La voici:

 

Dim swApp As Object

 

Dim Part As Object

Dim NomFichierPDF As String

 

Sub main()

Dim swApp As SldWorks.SldWorks

Dim SWmoddoc As SldWorks.ModelDoc2

Dim NuméroPlan As String

Dim CheminFichier As String

Dim NomFichier As String

Dim NombreFeuille As String

Dim NomFichierPDF As String

Dim CheminNomFichierPDF As String

Dim NomDossierPDF As String

Dim nErrors             As Long

Dim nWarnings           As Long

Set swApp = Application.SldWorks

Set SWmoddoc = swApp.ActiveDoc

 

'Récupération du chemin et du nom de fichier

'Exmple : \\MERCURE\Partage\xMethodes\Public\DAO\Solidworks\2 - Mise en plan\2014\046-1-2014-A.SLDDRW

PathName = SWmoddoc.GetPathName

CheminFichier = Left(PathName, InStrRev(PathName, "\")) '\\MERCURE\Partage\xMethodes\Public\DAO\Solidworks\2 - Mise en plan\2014\

NomFichier = Right(PathName, Len(PathName) - InStrRev(PathName, "\")) '046-1-2014-A.SLDDRW

NomDossierPDF = Right(NomFichier, 13) '2014-A.SLDDRW

NomDossierPDF = Left(NomDossierPDF, 4) '2014

CheminNomFichierPDF = "\\MERCURE\Partage\xMethodes\Public\DAO\Plans PDF\" & NomDossierPDF '\\MERCURE\Partage\xMethodes\Public\DAO\Plans PDF\2014\

 

'------------------------------------------------------------------

'Récupération des propriétés personnalisées du fichier plan

 

If SWmoddoc.GetType = swDocDRAWING Then 'vérification que l'on est bien sur un fichier plan

    NomFichierPDF = Replace(NomFichier, "SLDDRW", "pdf")

End If

 

'------------------------------------------------------------------

'Test si le dossier avec l'année existe, si non le créer

 

    If Dir$(CheminNomFichierPDF) = "" Then

        MkDir "NomDossierPDF"

       End If

'------------------------------------------------------------------

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

        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)

        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

 

 

Je ne sais pas comment la tester et je voudrais savoir avant de la lancé si je n'ai pas fait de connerie car cela joue avec les dossiers du réseau de ma boite.

 

Merci d'avance.

Bonjour,

 

Pour tester une macro, le mieux est de mettre un point d'arrêt au début puis de faire F8 pour avancer ligne par ligne.

IL peut être aussi intéressant de mettre des espions sur les variables importantes.

 

 

Voir ce lien : http://www.tomshardware.fr/forum/id-1348092/tutoriel-excel-macro-vba-debogage.html

1 « J'aime »

L'instruction debug.print permet d'afficher le contenu d'une variable dans la fenêtre d'exécution (qu'on affiche avec CTRL G je crois).

 

Lorsque je teste mes macros, je change les chemins des fichiers pour des chemins en local, ça permet de vérifier sans utiliser le réseau.

2 « J'aime »

J'ai changé le chemin d'acces pour tester.

 

Donc il me créer bien le dossier qui n'existe pas par contre il ne me cré pas le fichier pdf, ssais-tu ou cela pourrait planter car la macro ne plante pas.

Il faut vérifier tes conditions.

 

Fais un point d'arrêt sur la ligne

 

nErrors = SWmoddoc.SaveAs(CheminNomFichierPDF)

 

Est ce que le programme s'y arrête ?

 

Si non est ce que toutes les conditions sont OK ? Tu peux vérifier avec des espions ou debug.print

1 « J'aime »

Bonjour à toutes et à tous,

 

Pour tester une macro, le mieux est de mettre un point d'arrêt au début puis de faire F8 pour avancer ligne par ligne comme dit Lucas P. Une autre solution est d'activer la barre de menu "Débogage" ou mieux encore de personnaliser l'éditeur de macro en plaçant le bouton 'Pas à pas détaillé '(') devant le bouton 'Exécuter' () de la barre d'outils standard pour ne pas surcharger. > mode opératoire > voir pièce jointe.

Autrement dans l'éditeur de macro "Affichage" Fenêtre varaibles locales" permet de visualiser les valeurs de toutes les variables lors de déroulement de la macro.

 

 

Bonne journée.


personnaliser_lediteur_de_macro.png

désolé, je ne comprends pas ce que tu me demande de faire, par contre comme je te le disais cela me crée le dossier si il n'existe pas et il me crée le pdf mais dans le mêm dossier que le slddrw je ne comprends pas.

Je ne m'étais pas encore plongé dans ton code, je l'avoue !

 

Je viens de voir que la ligne suivante est probablement érronée :

 

        MkDir "NomDossierPDF"

 

1) Il me semble que pour créer un répertoire, il faut donner le nom complet avec le chemin !

2) Il ne faut pas de guillemets à ta variable "NomDossierPDF", sinon ça n'est plus une variable mais du texte !

 

Un façon pratique pour vérifier et lire du code VBA est d'utiliser Notepad++  qu'on trouve ici :

http://notepad-plus-plus.org/download/v6.6.7.html

 

Puis coller le code dans un nouveau fichier et choisir dans le menu Langage > V > VB.

 

La mise en forme en couleur est beaucoup plus parlante que celle dans l'éditeur VBA de base.

Les variables apparaissent en noir alors que le texte apparait en gris.

2 « J'aime »

J'ai modifié la variable dans le SWmoddoc.SaveAs(CheminNomFichierPDF), j'avais mis le adresse complète avec le fichier, cela ne fonctionné pas j'ai juste mis le nom du fichier pdf et cela me le crée par contre dans le même dossier que le slddrw, et autre chose si le dossier dans lequel je veux enregistré le pdf existe déjà, cela bug, quelqu'un peut il ma'aider à comprendre voici le texte de ma macro.


sans_titre.png

Bonjour,

 

Je pense que l'erreur vient de la variable "CheminNomFichierPDF" dans cette commande :

nErrors = SWmoddoc.SaveAs(CheminNomFichierPDF)

 

Quand tu enregistres avec la commande "SaveAs", tu dois mettre en argument le nom complet du fichier, AVEC l'extension (.pdf dans ton cas).

 

Cordialement.

 

Franck.

j'ai vu cela aprés lucas, je l'ai modifé, mais cel ane fonctionne toujours pas.

fgirard, j'ai vu aussi cela, je l'ai modifié mais fonctionne toujours pas entièrement.

Pour les points d'arrêts, regarde le lien que j'ai mis plus haut :

http://www.tomshardware.fr/forum/id-1348092/tutoriel-excel-macro-vba-debogage.html

 

Cela t'explique plusieurs façons debugger du code, dont les points d'arrêts.

 

1 « J'aime »

Si ça ne fonctionne toujrous pas, ajoute des espions comme indiqué ici :

http://www.tomshardware.fr/forum/id-1348092/tutoriel-excel-macro-vba-debogage.html

 

Et quelles sont les valeurs des variables :

NomDossierPDF 

CheminNomFichierPDF

 

 

Où s'arrete ta macro ?

1 « J'aime »

re

 

Pour aider au test d'une macro > dans l'éditeur d'équation cliquer sur "Affichage" sur "Fenêtre de variables locales" > voir pièce jointe


editeur_de_macro_fenetre_variables_locales.png
2 « J'aime »

Nos posts se croisent, désolé.

 

C'est bizarre que "SaveAs" ne fonctionne pas correctement avec le nom complet du fichier (chemin+nom+extension).

Pareil pour le bug avec le dossier qui existe déjà.

 

Essaye avec la commande "SaveAs" pour ModelDocExtension. C'est celle que l'utilise dans mes macros.

Voici comment déclarer :

   Dim SWmodext as As SldWorks.ModelDocExtension

   Dim swExportPDFData     As SldWorks.ExportPdfData

   Dim Errors              As Long
   Dim Warnings            As Long

et comment affecter :

   Set SWmodext = SWmoddoc.Extension

ensuite :

   nErrors = SWmodext.SaveAs(CheminNomFichierPDF, 0, 0, swExportPDFData, Errors, Warnings)

 

 

 

Pour la gestion des dossiers, j'utilise l'objet FileSystemObject :

   Dim oFSO                As Scripting.FileSystemObject
   Dim oFld                  As Folder

 

   Set oFSO = New Scripting.FileSystemObject

 

   If oFSO.FolderExists(CheminNomFichierPDF) = False Then
        Set oFld = oFSO.CreateFolder(CheminNomFichierPDF)
    End If

2 « J'aime »

Merci caronmaxime, trés utile cette fenètre !

 

Donc avec ta fenètre mes variable on bien la valeur que je veux leur donner par contre cela ne fonctionne pas comme je le souhaite.

 

il me crér bien le dossier 2014, par contre si le dossier existe déjç cela s'arrète à la ligne Mkdir, (1er point que je ne comprends pas)

 

et il me crér bien le fichier pdf, mais par contre dans le même dossier que le fichier active alors qu'il devrait le mettre dans le dossier 2014 ( 2nd point que je ne comprends pas)

 

HELP !!

1 « J'aime »

L'erreur ne viendrait pas du fait que tu testes un dossier et crées un autre dossier ?

 

If Dir$(CheminNomFichierPDF) = "" Then
MkDir NomDossierPDF

End if

 

CheminNomFichierPDF ou devrait être utilisé ici 2 fois, non ? Une fois pour le test Dir$ et une fois pour le MkDir ?

3 « J'aime »

re re

 

Mathieu, à mon avis ton   [ MkDir  NomDossierPDF]  doit être remplacé par    [MkDir CheminNomFichierPDF]

 

Dans ton éditeur de macro, tu peux double cliquer sur le mot clé MkDir pour le sélectionner et appuyer sur F1. De l'aide te permettra de comprendre.

re re re

 

faire le point en tenant compte des exellentes recommandations de Fgirard et peut être jetter un oeil à la question "ma macro PDF DXF que dire? " que j'ai publié.

 

Autrement voila comment je proccède ( voir pièce jointe ) pour débugger une macro quand elle crée des dossier ou des fichiers


capture_decran_sw_et_editeur_sw_et_explorer_windows.png