Comment faire une boucle de chaîne de caractère string par VBA?

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

 

1 « J'aime »

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

 

1 « J'aime »

Subtile ! Je vais essayer comme ça, merci beaucoup :)

1 « J'aime »

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