SelectByID2 ne fonctionne pas dans un certain cas

Bonjour,

Je suis en train de créer une macro et, forcément, la derniète étape ne fonctionne pas. 

Je veux sélectionner une esquisse dans un fichier pièce. 

Quand je met en dur le nom de la pièce dans laquelle se trouve l'esquisse : OK ( exemple : SelectByID2("Nomdelesquisse@nomdelapiece@assemablage" etc etc )

Quand je remplace le nomdelapiece par une variable ( qui provient de Name2) PAS OK. Pas d'erreur du compileur mais juste il se passe rien et sa passe à la suite.  (exemple : SelectByID2("Nomdelesquisse@&NomPiece&@assemablage" etc etc )

Petites précisions : Name2 retourne une String et SelectByID2 demande un nom en STRING donc ça c'est bon ( enfin je crois ) 

                               Ma méthode pour choper Name2 fonctionne ( j'ai placé un espion sur ma ligne swComp.Name2 et c'est bon j'ai bien la propriété de prise ) 

 

Voilà, si quelqu'un à une idée. Je suis preneur !!

 

Merci beaucoup

Bonjour,

Si la ligne correspond bien à votre code c'est plutôt :  "Nomdelesquisse@" & nomdelapiece & "@assemblage"

Tel que c'est écrit c'est interprété comme du texte à 100%

1 « J'aime »

Bonjour et merci pour votre réponse, 

Alors,

dans cette version -  SelectByID2("Nomdelesquisse@nomdelapiece@assemblage" - : c'est l'enregistrement de la macro. En effet, que du texte.

Dans cette version - SelectByID2("Nomdelesquisse@&NomPiece&@assemablage" - : j'ai bien concaténé la variable NomPiece mais ça ne fonctionne pas.

De plus, je ne peux pas mettre de " " avant et après le &, le compileur n'accepte pas. En gros, c'est pas comme dans une MsgBox quoi.

En bref, c'est comme si il ne voulait pas prendre de variable, alors qu'elle est bien déclarée en String.  Je dois passer à coté d'un truc tout bête mais là, je colle. 

 

Bonjour,

D'accord avec Cyril.f, attention à la position des guillemets.

boolstatus = Part.Extension.SelectByID2(nomCote & "@" & nomEsquisse & "@" & nomPiece, "DIMENSION", 0, 0, 0, False, 0, Nothing, 0)

fonctionne très bien.

Cordialement,

Mais comme ta pièce est dans un assemblage, il ne faut pas oublier d'indiquer l'identificateur de l'occurrence de la pièce, ce qui de mémoire ne remonte pas dans le swComp.Name2 , donc :

boolstatus = Part.Extension.SelectByID2("Esquisse1@" & nomPiece & "-1@Assemblage1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

pour l'occurrence 1

Cordialement,

 

Bonjour et merci pour votre réponse, 

La ligne de code telle que enregistré par VB :

 boolstatus = swModel.Extension.SelectByID2("Contourdecoupe@19XXX000001A-256@Simulateur", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

Contourdecoupe est le nom de l'esquisse. Il ne change jamais. 

Simulateur est le nom de l'assemblage. Il ne change jamais. 

Fonctionne parfaitement. Mais, 19XXX000001A change tout le temps. Ainsi que -256, qui est le numéro d'instance dans l'assemblage. D'ou le placement d'une variable. 

--------------------------------------------------------------------------------

Ce que je veux ( ma variable en Italique gras soulignée ) :

boolstatus = swModel.Extension.SelectByID2("Contourdecoupe@&Nom&@Simulateur", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

J'ai beau ajouter déplacer des guillemets ça ne marche pas. Tel que c'est écrit là, il ne se passe absolument rien. Pas d'erreur. Rien.  

J'ai placé un espion sur le retour Name2, l'ID d'occurence remonte bien. 256 comme indiqué dans ma réponse trop lente à écrire :D

J'ai aussi essayé en créant une seconde variable contenant justement ce numéro. Rien non plus. 

Enfin ! 

Alors c'est bien un soucis de guillemets. Mais aussi d'espaces. 

Au lieu de : boolstatus = swModel.Extension.SelectByID2("Contourdecoupe@&Nom&@Simulateur", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

Il faut :        boolstatus = swModel.Extension.SelectByID2("Contourdecoupe@ " & Nom & " @Simulateur", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

Et pas :      boolstatus = swModel.Extension.SelectByID2("Contourdecoupe@"&Nom&"@Simulateur", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)

On en apprend tout les jours ! 

Merci pour vos conseil :)

 

 

Donc ma mémoire était défaillante, l'identificateur de l'occurrence de la pièce remonte bien...

Pour info, pour que cela fonctionne, il faut aussi que tes pièces soient en mode résolues.

Cordialement,

Bonjour,

Tu es sûr du choix de la meilleure réponse ?

Celle de Cyril.f a tout ce qu'il faut, les guillemets, les espaces ...

Cordialement,

3 « J'aime »