Bonjour,
Je cherche un moyen de faire une boucle pour différentes valeurs de plusieurs variables « string » afin de réduire la taille de mon code !
Merci pour votre aide.
Bonjour,
Je cherche un moyen de faire une boucle pour différentes valeurs de plusieurs variables « string » afin de réduire la taille de mon code !
Merci pour votre aide.
Salut,
Je n'ai pas bien compris.
Pour faire une boucle si tu connais le nombre de fois où tu veux boucler (par exemple 10) c'est soit :
- Exemple 1 :
For i = 1 to 10
TON CODE
next i
- Exemple 2 :
Do while i < 10
TON CODE
i = i + 1
Loop
- Exemple 2 :
Do
TON CODE
i = i + 1
Loop while i < 10
Mais si tu ne connais pas le nombre et que ça fait partie d'une collection, tu peux utiliser un for each, un exemple ici :
http://help.solidworks.com/2014/English/api/sldworksapi/Get_Components_in_Each_BOM_Table_Row_VB.htm
Avec mon exemple que vous connaissez bien vous allez comprendre ce que je veux faire à mon avis, en fait j'aimerais remplacer mes liens, mes noms de pièces, mep et assemblages (en gras) par des variables string que je change à chaque fois que la boucle se relance jusqu'a ne plus avoir de valeur de texte !
Sub main()
Set swApp = _
Application.SldWorks
Set Part = swApp.OpenDoc6("xxxxxxxxxxxxx.SLDASM", 2, 0, "", longstatus, longwarnings) 'ouverture de l'assemblage source'
swApp.ActivateDoc2 "Ensemble Magasin pots", False, longstatus 'activer l'assemblage'
Set Part = swApp.ActiveDoc 'activation'
F1.Show 'ouverture de la fenêtre d'information'
Set swAppp = Application.SldWorks 'retour sur l'appli solidworks'
Set swmodel = swAppp.ActiveDoc 'réactivation de l'assemblage'
bool = swmodel.Extension.RunCommand(SwCommands.swCommands_SaveAs, "") 'ouverture de la fenêtre enregistrer sous'
Set Part = swApp.ActiveDoc 'activer le nouvelle assemblage enregistré dans le nouveau dossier'
FilePath = swmodel.GetPathName 'récuperation du lien de l'assemblage'
TitleA = swmodel.GetTitle 'récupération du nom avec extension de l'assemblage'
TitleAs = Len(TitleA) 'récupération de la longueur de l'extension'
TitleAn = Left(TitleA, TitleAs - 7) 'suppression de l'extension'
' ******************************************************************************
' Enregistrement de la pièce magasin pots
' ******************************************************************************
Set Part = swApp.ActiveDoc 'activation'
Set Part = swApp.OpenDoc6("\\xxxxxxxxxxx.sldprt", 1, 0, "", longstatus, longwarnings) 'ouverture la pièce'
Set Part = swApp.ActiveDoc 'activation'
swApp.ActivateDoc2 "Magasin pots.sldprt", False, longstatus 'activation de la pièce magasin pots'
Set Part = swApp.ActiveDoc 'activation'
Set swmodel = swApp.ActiveDoc 'activation de la mep'
TitlePb = swmodel.GetTitle 'recuperation du titre de la mep du magasin pots sans l'extension'
Set Part = swApp.OpenDoc6("xxxxxxxx.SLDDRW", 3, 0, "", longstatus, longwarnings) 'ouverture la mep'
Set Part = swApp.ActiveDoc 'activation'
swApp.ActivateDoc2 "Magasin pots - Feuille1", False, longstatus 'activation de la mep'
Set Part = swApp.ActiveDoc 'activation'
Set swmodel = swApp.ActiveDoc 'activation pour information doc'
TitleM = swmodel.GetTitle 'recuperation du titre de la mep sans l'extension'
Set Part = swApp.ActiveDoc 'activation'
swApp.ActivateDoc2 "Magasin pots.sldprt", False, longstatus 'activation de la pièce'
Set Part = swApp.ActiveDoc 'activation'
Set swAppp = Application.SldWorks 'activer l'appli solidworks'
Set swmodel = swAppp.ActiveDoc 'activation de la pièce'
bool = swmodel.Extension.RunCommand(SwCommands.swCommands_SaveAs, "") 'ouverture le fenêtre enregistrer sous'
Set swmodel = swApp.ActiveDoc 'activation de la mep'
TitleM = swmodel.GetTitle 'recuperation du titre de la mep sans l'extension'
PFilePath = swmodel.GetPathName 'récuperation du liens de la pièce avec l'extension'
PsFilePath = Len(PFilePath) 'récuperation de la longueur du liens de la pièce avec l'extension'
PnFilePath = Left(PFilePath, PsFilePath - 7) 'suppression de l'extension'
MFilePath = PnFilePath & ".SLDDRW" 'ajout de l'extension pour le liens de la mep'
TitleP = swmodel.GetTitle 'recuperation du titre de la pièce magasin pots avec l'extension'
TitlePs = Len(TitleP) 'récupération de la longueur de l'extension'
TitlePn = Left(TitleP, TitlePs - 7) 'suppression de l'extension'
Set Part = swApp.ActiveDoc 'activation'
Set Part = Nothing
swApp.CloseDoc TitlePn 'fermeture de la pièce'
Set Part = swApp.ActiveDoc 'activation'
swApp.ActivateDoc2 "Magasin pots - Feuille1", False, longstatus 'activation de la mep'
Set Part = swApp.ActiveDoc 'activation'
longstatus = Part.SaveAs3(MFilePath, 0, 2) 'enregistrement de la mep'
Set swmodel = swApp.ActiveDoc 'activation de la mep'
TitleM = swmodel.GetTitle 'recuperation du titre de la nouvelle mep sans l'extension'
swApp.CloseDoc TitleM 'fermer la mep'
swApp.ActivateDoc2 TitlePn, False, longstatus 'retour sur la pièce'
Set Part = swApp.ActiveDoc 'activation'
Set Part = Nothing
swApp.CloseDoc TitlePn 'fermer la pièce'
Set Part = swApp.ActiveDoc 'activation'
swApp.ActivateDoc2 TitleAn, False, longstatus 'retour sur l'assemblage général (ensemble magasin pots)'
Set Part = swApp.ActiveDoc
Set Part = swApp.ActiveDoc
longstatus = Part.SaveAs3(FilePath, 0, 2) 'enregistrement de l'assemblage général (ensemble magasin pots)'
Set Part = swApp.ActiveDoc
Set Part = Nothing
swApp.CloseDoc TitleAn 'fermeture de l'assemblage général (ensemble magasin pots)'
End Sub
Donc si j'ai bien compris, il faut tout simplement remplacer le code :
Set Part = swApp.OpenDoc6("\\xxxxxxxxxxx.sldprt", 1, 0, "", longstatus, longwarnings) 'ouverture la pièce'
par :
Set Part = swApp.OpenDoc6(chemin1, 1, 0, "", longstatus, longwarnings) 'ouverture la pièce'
'et ainsi de suite pour les autres
Et ta boucle tu vas faire comme ceci :
for i = 1 to 3 '(3 si tu veux boucler 3 fois)
if i = 1 then
chemin 1 = "c:\test 1\"
else if i = 2 then
chemin 2 = "c:\test 2\"
else if i = 3 then
chemin 3 = "c:\test 3\"
end if
'ici le reste de ton code qui doit être inclus dans la boucle
next i
'ici le reste de ton code qui NE doit PAS être inclus dans la boucle
Subtile ! Je vais essayer comme ça, merci beaucoup :)
Pas de soucis :)
Pour êtr eplus propre il faudrait utiliser un select case au lieu :
if i = 1 then
chemin 1 = "c:\test 1\"
else if i = 2 then
chemin 2 = "c:\test 2\"
else if i = 3 then
chemin 3 = "c:\test 3\"
end if
Ca donnerait :
select case i
case 1
chemin 1 = "c:\test 1\"
case 2
......
end select