Trouver une feuille MEP en VBA sous solidworks

Bonjour les gens.

 

Je suis en train de tenter de faire une macro pour enregistrer chaques feuilles de mes mises en plan en DXF et PDF. Jusqu'ici, j'arrive bien à enregistrer dans le bon format, toutes les feuilles ou l'active en trifouillant dans les options Solidworks.

 

Neanmoins, je voudrais pouvoir changer le nom en direct sans renomer chaques fichier (so boring!) Bref. Pour ce faire, je voudrais pouvoir dire à ma macro d'ouvrir une feuille, l'enregistrer puis passer à la suivante. Je sais que je dois y mettre un compteur .... mais comment je fais pour lui dire de prendre la feuille1 puis 2, etc.

 

Et, petite question bonus. Y a t'il un recapitulatif de toutes les commandes spécifiques à Solidworks quelques part ?

 

Merci d'avance

1 « J'aime »

Salut,

 

J'ai fait une macro similaire, mais on utilise qu'une seule feuille ou alors on souhaite avoir les 2 feuilles dans le même PDF.

 

Pour ta macro il en existe déjà des "toutes prêtes" !

Voir ici :

https://forum.solidworks.com/thread/82929

https://forum.solidworks.com/thread/66753

 

Et pour les commandes, tu parles des commandes VBA pour SolidWorks ?

 

Il faut aller voir l'aide des API :

http://help.solidworks.com/2014/English/api/sldworksapiprogguide/Welcome.htm

 

Ou une recherche google permet souvent une réponse plus rapide !

2 « J'aime »

Pour ton "compteur" il faut boucler sur toutes les feuilles, si tu es sûr que c'est toujours feuille1 puis 2 etc, il suffit d'une instruction du style :

 

[CODE]

 

i = 1

Do while (sheet_name exist) 'je ne connait pas l'instruction de tête

sheet_name = "Feuille" & i

'Ici ton code pour l'export en PDF et DWG

i = i +1

Loop

 

[/CODE]

 

Mais si la personne supprime la feuille 1 ou la renomme, ça ne fonctionne plus !

 

Donc il faut récupérer le nom ou le numéro de chaque feuille, et l'aide API de SolidWorks propose un exemple !

 

Le voici :

Edit : mise à jour du lien qui était mauvais 

http://help.solidworks.com/2012/English/api/sldworksapi/Get_Sheet_Numbers_and_Names_Example_VB.htm

 

Voir aussi ce lien :

http://help.solidworks.com/2013/english/api/sldworksapi/save_drawing_sheets_as_dxf_example_vb.htm

2 « J'aime »

Merci beaucoup Lucas P pour tes réponses rapide et fournies.

 

Au moins, maintenant, je suis blindé d'exemple (heureusement que mon anglais n'est pas si loin derrière moi !)

 

Oui, j'ai vu ta macro similaire. Je m'en suis pas mal inspiré pour la mienne en l'adaptant à mes besoins.

 

Parcontre, de ce que je comprends dans ce que tu m'envois, je suis obligé de connaitre le nom des feuilles. Si ce n'est pas un probleme pour mes nouvelles, je ne gere pas trop ce qu'ont fait mes prédécesseurs.

Du coup, j'esperais pouvoir trouver quelque chose comme sous excel où tu peux mettre du "Feuil1" pour les désigner plutot que leurs noms.

 

Je vais trifouiller un peu tout ça et reviendrais poster l'ensemble du code si ça fonctionne

1 « J'aime »

Pardon, j'ai mis 2 fois le même lien, et je n'ai pas posté le plus intéressant :

 

http://help.solidworks.com/2012/English/api/sldworksapi/Get_Sheet_Numbers_and_Names_Example_VB.htm

 

Ce code permet de parcourir toutes les feuilles d'une mise en plan :

 

For i = 0 To UBound(vSheetNames)

        Debug.Print "  SheetName[" & i & "] = " & vSheetNames(i)

Next i

 

 

Et il suffit de mettre ton code à la place de :

        Debug.Print "  SheetName[" & i & "] = " & vSheetNames(i)

1 « J'aime »

J'ai une macro qui se déroule sans accro ... mais où rien ne se passe. Je ne comprends pas bien pourquoi et où ça coince. Si quelqu'un à une idée ?

 

Sub Enregistrer()
Dim swapp As SldWorks.SldWorks
Dim swdoc As SldWorks.ModelDoc2
Dim Swdraw As SldWorks.ModelDoc
Dim swSheet As SldWorks.Sheet
Dim vSheetNames As Variant
Dim Nbfeuille As Variant
Set swapp = Application.SldWorks
Set swdoc = swapp.ActiveDoc
Set Swdraw = swdoc
Set swSheet = Swdraw.GetCurrentSheet
'Message de confirmation
ret = MsgBox("voulez-vous convertir cette mise en plan en DXF et PDF ?", vbOKCancel + vbExclamation + vbMsgBoxSetForeground + vbSystemModal, "Conversion Laser")
If ret = vbCancel Then End
'Enregistrement nouveau nom
Do
 newname = InputBox("Merci d'indiquer le nouveau nom:", "blabla", newname)
 If StrPtr(newname) = 0 Then
 MsgBox "procédure annulée"
 Exit Sub
 End If
'Verification caractere interdit Windows
Do While InStr(newname, "/") > 0 Or InStr(newname, "*") > 0 Or InStr(newname, "?") > 0 Or InStr(newname, "<") > 0 Or InStr(newnam, ">") > 0 Or InStr(newnam, "!") > 0
 newname = InputBox("Attention, le nom contient au moins un des caractère interdits \/:*?""<>!" & vbNewLine & vbNewLine & "Merci d'indiquer le nouveau nom: ", "enregistrer-sous par LPR", newname)
 Loop
 Loop While newname = " "
'Dossier d'enregistrement
Do
 FilePath = InputBox("Indiquez le chemin d'accés", "dossier enregistrement", FilePath)
 If StrPtr(FilePath) = 0 Then
 MsgBox "procédure annulée"
 Exit Sub
End If
'Ajout du \ à la fin du nom de dossier
If Right(FilePath, 1) <> "\" Then FilePath = FilePath & "\"
 If Dir$(FilePath) <> "" Then
 EXISTE = 1
 Else: MsgBox "le répertoire n'existe pas, merci de le créer"
 Debug.Print Dir$(FilePath)
End If
Loop While EXISTE <> 1
'Indique le nombre de feuille
Nbfeuille = swdoc.GetSheetCount
For i = 0 To Nbfeuille
    swdoc.SheetPrevious
    Next i
    'passage à la feuille suivante si < au nombre total
    For i = 0 To varSheetCount - 1
    If i <> 0 Then
    swmodel.SheetNext
    End If
'Enregistrement en DXF et PDF
swdoc.SaveAs (FilePath + newname + "_" + i + ".dxf")
swdoc.SaveAs (FilePath + newname + "_" + i + ".pdf")
Next i
End Sub

1 « J'aime »