Rebonjour, voici mon code et la pièce d'essai en exemple
Sub essai01()
ChangerValeurDeVariableDansEquaEtReconstruirePièce "D1@Ext", "80"
ChangerValeurDeVariableDansEquaEtReconstruirePièce "D1@Esq", "44.6"
End Sub
Sub ChangerValeurDeVariableDansEquaEtReconstruirePièce(NomVar As String, ValVar As String)
'Remarque : une équation est une chaîne de caractère alphanumérique est se traite comme telle avec les fonctions usuelles du VBA.
'Déclaration Objets *****************************
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEquaMgr As SldWorks.EquationMgr
'Affectation Objets *****************************
Set swApp = Application.SldWorks ' swApp est maintenant un objet contenant l'application SW.
Set swModel = swApp.ActiveDoc ' SwModel est maintenant un objet contenant le modèle actif (pièce ou assemblage) SW.
Set swEqua = swModel.GetEquationMgr ' swEquaMgr est maintenant un objet contenant l'ensemble des équations du modèle présent dans feature manager.
'Déclaration Variables Locales ******************
Dim NumEqua As Integer 'NumEqua est le Numéro del'équation
Dim NbEqua As Integer 'NbEqua est le Nombre d'Equations. Si NbEqua=0 alors il existe une équation, si NbEqua=1 alors il existe 2 équation, si NbEqua= -1 alors il n'existe pas d'équation.
Dim ChScind As Variant 'ChScind est une chaine Scindée.
Const Titre01 As String = "Constat (MC)"
'Affectation Variables
NbEqua = swEqua.GetCount - 1
'Procédure ************************************
For NumEqua = 0 To NbEqua 'Pour NumEqua allant de 0 à NbEqua (par pas de 1 par défaut)
ChScind = Split(swEqua.equation(NumEqua), "=") 'ChScind(0) contient maintenant la partie de l'équation située à gauche du signe "=". ChScind(1) contient maintenant la partie de l'équation située à droite du signe "="
ChScind(0) = Replace(ChScind(0), Chr(34), Empty) 'Remplacement systématique du premier et dernier caractère de Scind(0) (ayant le numéro ascii 34) par rien (empty), autant dit on supprime tout les chr(34) ["] de Scind(0) (c'est un formatage conditionnant le test suivant).
ChScind(0) = Replace(ChScind(0), Chr(32), Empty) 'Remplacement systématique des caractère de Scind(0) (ayant le numéro ascii 32) par rien (empty), autant dit on supprime tout les espaces [" "] de Scind(0) (c'est un formatage conditionnant le test suivant).
If ChScind(0) = NomVar Then
swEqua.equation(NumEqua) = Replace(swEqua.equation(NumEqua), ChScind(1), ValVar)
If swModel.EditRebuild3() Then 'si la reconstruction de la pièce renvoit vrai alors
MsgBox "Pièce reconstruite avec nouvelle valeur dans équation !", vbInformation, Titre01
Else 'sinon
MsgBox "Equation modifiée mais erreur de reconstruction pièce !", vbInformation, Titre01
End If 'fin de si
Exit Sub ' quitter cette Sub
End If
Next NumEqua 'prochain NumEqua
If NbEqua = -1 Then
MsgBox "Aucune équation n'est associée au modèle !", vbExclamation, Titre01
Else
MsgBox "Aucune modification d'équation possible !" & Chr$(13) & Chr$(13) & "'" & NomVar & "'" & " n'a était trouvé dans aucune d'elles.", vbExclamation, Titre01
End If
End Sub 'fin de sub
A+
part_essai01.sldprt