Macro multiplication

Ok, voici la pièce que j’ai testé ainsi que la macro :
TEST POTEAU HEXA.SLDPRT (567,1 Ko)
00-MASSE-SURFACE.swp (36 Ko)

Aucun problème de mon côté quel que soit la valeur du coefficient (faut bien mettre un point en tant que virgule).
peut-être vérifier dans les références du projet de macro:
image
Sinon reste peut-être une subtilité du côté des paramètres régionaux du poste et du séparateur décimal.

2 « J'aime »

@Cyril.f
Voici mes références Macro :

Et voici mes param^tres régionaux :

Essayez en remplaçant la virgule par un point.

2 « J'aime »

Bonjour @Cyril.f
La macro fonctionne uniquement si je créé la propriété SURFACE PIECE dans F8.
Si le champ n’est pas créé, rien ne se produit.
J’ai cherché comment créé le champ automatiquement, mais je bloque.

Voilà ce que j’ai essayé de bricoler sans réussite :

Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim sMasse As String
Dim sValout As String
Dim sVal As String
Dim bRet As String

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension

Set swCustProp = swModelDocExt.CustomPropertyManager(« PC ») 'Si la propriété est dans l’onglet personnaliser, laisser vide en remplaçant « PC » par «  »

bRet = swCustProp.Get6(« POIDS », False, sValout, sMasse, False, False) 'Récupération de la propriété de masse, changer le nom de la propriété en fonction de votre modèle

sVal = CStr(CDec(sMasse) * 2) 'Conversion du texte en valeur décimale, multiplication x RATIO et conversion en donné de type texte

'bRet = swCustProp.Set2(« SURFACE PIECE », sVal) 'Renseignement de la propriété SURFACE PIECE avec la valeur convertie en texte

bRet = swModel.AddCustomInfo3(« PC », « SURFACE PIECE », sVal)

End Sub

J’ai essayé avec cette commande, mais je pense que quelquechose cloche :
bRet = swModel.AddCustomInfo3(« PC », « SURFACE PIECE », sVal)

Est ce que vous avez une idée pour corriger cela s’il vous plait?

Plutôt que :
'bRet = swCustProp.Set2(« SURFACE PIECE », sVal)

Mettre quelque chose comme:
bRet = swCustPropMgr.Add3(« SURFACE PIECE », swCustomInfoType_e.swCustomInfoDate, sVal, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)

Set c’est quand la propriété est déjà existante, il me semble.

Voir ce lien:
https://help.solidworks.com/2020/English/api/sldworksapi/Add_and_Get_Custom_Properties_Example_VB.htm?verRedirect=1

Ou plus complet:

2 « J'aime »

C’est ça.
Si la propriété n’existe pas il faut la créer, si elle existe il arrive également que SW n’arrive pas à écrire (ça m’est arrivé sur d’anciens fichiers) et il faut dans ce cas supprimer et recréer la propriété.

2 « J'aime »

Je me réponds à moi même, c’est réglé avec Add3 qui permet de faire un écrasement si la propriété existe déjà.
Donc en gros:

swCustProp.Add3("SURFACE PIECE", 30, sVal, 1)
2 « J'aime »

Bonjour, merci pour vos réponses.
La macro 00-MASSE-SURFACE fonctionne bien. Toutefois, savez vous comment n’avoir que 3 décimales pour la valeur de surface ?
00-MASSE-SURFACE.swp (45,5 Ko)

Et j’aimerais intégrer cette macro dans la macro 00-MACRO HEXA ci dessous :
00-MACRO HEXA.swp (63,5 Ko)

J’ai testé, mais j’ai cette erreur lorsque je lance la macro :
image

Le débogage me donne ceci :

Savez vous comment corriger cela ?

Merci

Bonjour,

Alors pour l’erreur, c’est probablement la variable swCustProp.Get6 qui est vide, donc soit la propriété n’existe pas soit il y a un problème de déclaration de variables.
Pour limiter à 3 décimales il faut utiliser la fonction « Format »:

    sVal = CStr(Format(CDec(sMasse) * 0.0556, "0.000"))

2 « J'aime »

Il manque la déclarationpour swCustProp, en ajoutant les 3 lignes au dessus cela fonctionne (attention ton code à encore besoin d’un bon nettoyage (2x Set swModel…)
Voici le code à remttre au propre:

            Dim swModelDocExt           As ModelDocExtension
            Set swModelDocExt = swModel.Extension
            Set swCustProp = swModelDocExt.CustomPropertyManager(tConfig(i))
            bRet = swCustProp.Get6("POIDS", False, sValout, sMasse, False, False)
2 « J'aime »

je me répond à moi-même, manque le set de la variable swCustProp d’où l’erreur:

    Set swCustProp = swModelDocExt.CustomPropertyManager("POIDS") 'Propriété à changer si ce n'est pas celle-ci

2 « J'aime »

Oui je confirme qu’il y a du nettoyage à faire.
C’est du bricolage, j’essaye de comprendre tout cela, pas simple :face_with_spiral_eyes:
J’ai remis au propre et j’ai une nouvelle alerte concernant Dim i :

(tConfig(i)) c’est bien pour Toutes les Configs ?

Bonjour,

Dim i doit être déclaré ailleurs dans le code.
Faudrait le code complet pour comprendre.

2 « J'aime »

Voici le code :
00-MACRO HEXA.swp (61 Ko)

Alors, le problème est le sur positionnement de la déclaration DIM i as integer.
En gros, vu qu’il y a la ligne Set swCustProp = swModelDocExt.CustomPropertyManager(tConfig(i)) en début de macro, vba initie la variable i de lui-même.
Il considère donc qu’il y a un doublon de déclaration de variable.
Pour ma part je préfère avoir les déclarations de variable en global pour l’ensemble des Sub plutôt que de les déclarer dans chaque procédure (dépend grandement de l’usage des variables et des différentes procédures/fonctions dans la macro)

1 « J'aime »

Tu as également la déclaration swApp à 2 reprise une fois au dessus du Sub et une fois au tout début du sub.
Avant de faire une déclaration il faut rechercher si elle n’est pas déjà existante.
Et dans l’idée faire les déclaration au tout début du sub ou en dehors (avant le sub) est plus propre à mon sens.
Quelque chose comme cela me parait mieux:

Dim swApp                       As SldWorks.SldWorks
Dim swModel                     As SldWorks.ModelDoc2
Dim swPart                      As SldWorks.PartDoc
Dim tConfig()                    As String
Dim swModel                     As SldWorks.ModelDoc2
Dim swConfigMgr                 As SldWorks.ConfigurationManager
Dim swConfig                    As SldWorks.Configuration
Dim swCustProp                  As CustomPropertyManager
Dim vConfigName                 As Variant
Dim sSpecConfigNameArr(0)       As String
Dim vSpecConfigNameArr          As Variant
Dim dimValue                    As Variant
Dim stnameConfig                As String
Dim boolstatus                  As Boolean
Dim sMasse                      As String
Dim sValout                     As String
Dim sVal                        As String
Dim bRet                        As String
Dim swModelDocExt               As ModelDocExtension
Dim i                           As Integer
Dim swErrors                    As Long
Dim swWarnings                  As Long

Sub main()  
Set swApp = Application.SldWorks
'on récupére le document actif
Set swModel = swApp.ActiveDoc
Set swConfigMgr = swModel.ConfigurationManager
'on récupére la configuration active
Set swConfig = swConfigMgr.ActiveConfiguration
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager(tConfig(i))
 
stnameConfig = swConfig.Name
vConfigNameArr = swModel.GetConfigurationNames
   
'on boucle sur toutes les configurations
 For Each vConfigName In vConfigNameArr
     'on test si la configuration est différente de la configuration active et de la configuration Default
     If vConfigName <> swConfig.Name And vConfigName <> "xx" Then
               boolstatus = swModel.DeleteConfiguration2(vConfigName)
     End If
     If vConfigName <> swConfig.Name And vConfigName <> "Default" Then
               boolstatus = swModel.DeleteConfiguration2(vConfigName)
     End If
                 
 Next vConfigName
 
'on reconstruit la pièces
swModel.ForceRebuild3 False


'récupère le document actif dans SW
If Not swModel Is Nothing Then
    
    '''-----------------------------------------------
    ''' lignes délplacées dans la boucle, de manière à ce que l'operation s'effectue sur tous les fichiers et pas juste le premier.
    boolstatus = swModel.DeleteConfiguration2("Défaut")
    boolstatus = swModel.DeleteConfiguration2("xx")
    Set swPart = swModel
    boolstatus = swPart.AddConfiguration2("00", "", "", True, False, False, True, 256)
    boolstatus = swPart.AddConfiguration2("PC", "", "", True, False, False, True, 256)
    boolstatus = swPart.AddConfiguration2("R6029", "", "", True, False, False, True, 256)
    '''-----------------------------------------------
   
    'Mise en place de la matière
    swModel.SetMaterialPropertyName2 "", "X:\DONNEES BE\DAO\BUREAU ETUDES\BIBLI SOLIDWORKS\MATERIAUX\MATERIAUX QUALI-CITE/QUALI-CITE.sldmat", "ALUMINIUM 6060"
    'Boucle sur toutes les configurations
    tConfig = swModel.GetConfigurationNames
    For i = 0 To UBound(tConfig)
        'ajoute un propriété personnalisée edition avec la valeur POTEAUXHEXA"
        bRet = swModel.DeleteCustomInfo2(tConfig(i), "DESIGNATION 2")
        bRet = swModel.DeleteCustomInfo2(tConfig(i), "PROFILS")
        bRet = swModel.AddCustomInfo3(tConfig(i), "PROFILS", swCustomInfoText, "POTEAUXHEXA")
        
        'ajoute un propriété personnalisée edition avec la valeur Masse
        'Chr(34) permet d'ajouter le caractère "
        bRet = swModel.DeleteCustomInfo2(tConfig(i), "masse")
        bRet = swModel.AddCustomInfo3(tConfig(i), "masse", swCustomInfoText, Chr(34) & "SW-Mass" & Chr(34))
        
        'ajoute un propriété personnalisée edition avec la valeur Poids
        'Chr(34) permet d'ajouter le caractère "
        bRet = swModel.DeleteCustomInfo2(tConfig(i), "POIDS")
        bRet = swModel.AddCustomInfo3(tConfig(i), "POIDS", swCustomInfoText, Chr(34) & "SW-Mass" & Chr(34))
        
         'ajoute un propriété personnalisée edition avec la valeur MATERIAUX
        'Chr(34) permet d'ajouter le caractère "
        bRet = swModel.DeleteCustomInfo2(tConfig(i), "MATERIAUX")
        bRet = swModel.AddCustomInfo3(tConfig(i), "MATERIAUX", swCustomInfoText, Chr(34) & "SW-Material" & Chr(34))
        
        'Récupération de la propriété de masse, changer le nom de la propriété en fonction de votre modèle
        bRet = swCustProp.Get6("POIDS", False, sValout, sMasse, False, False)

        'Conversion du texte en valeur décimale, multiplication x RATIO et conversion en donné de type texte
        sVal = CStr(CDec(sMasse) * 0.0556)

        'Création de la propriété SURFACE PIECE avec la valeur sVal
        bRet = swCustProp.Add3("SURFACE PIECE", 30, sVal, 1)

    Next i


    
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsLinearFractionDenominator, 0, 0)
    boolstatus = swModel.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsLinearFeetAndInchesFormat, 0, False)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsDualLinear, 0, swLengthUnit_e.swMM)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsDualLinearFractionDenominator, 0, 0)
    boolstatus = swModel.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsDualLinearFeetAndInchesFormat, 0, False)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropMass, 0, swUnitsMassPropMass_e.swUnitsMassPropMass_Kilograms)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropVolume, 0, swUnitsMassPropVolume_e.swUnitsMassPropVolume_Meters3)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsLinear, 0, swLengthUnit_e.swMM)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropLength, 0, swLengthUnit_e.swMM)
    
    'Enregistre le docuement actif en mode silencieux
    bRet = swModel.Save3(swSaveAsOptions_Silent, swErrors, swWarnings)
    
    'Ferme le document actif
    swApp.CloseDoc swModel.GetPathName

End If

End Sub

Avec l’éditeur de code c’est plus facile de visualiser le code que de joindre un fichier swp pour info.

2 « J'aime »

Bonjour @Cyril.f @Lynkoa15 et merci à vous pour vos réponses,
me revoici sur mon soucis que je reprends aujourd’hui.
J’ai fait du nettoyage sur mon code. C’était bien le bordel !
Mais je me retrouve avec un code erreur 91 :
image

Le débogage me donne cette ligne :

Voici mon code, si vous avez une idée d’où se trouve l’erreur :

    Dim swApp                       As SldWorks.SldWorks
    Dim swModel                     As SldWorks.ModelDoc2
    Dim swConfigMgr                 As SldWorks.ConfigurationManager
    Dim swConfig                    As SldWorks.Configuration
    Dim vConfigName                 As Variant
    Dim sSpecConfigNameArr(0)       As String
    Dim vSpecConfigNameArr          As Variant
    Dim dimValue                    As Variant
    Dim stnameConfig                As String
    Dim boolstatus                  As Boolean
    Dim i                           As Integer
    Dim swErrors                    As Long
    Dim swWarnings                  As Long
    Dim swPart                      As SldWorks.PartDoc
    Dim tConfig()                   As String
    Dim swModelDocExt               As ModelDocExtension
    Dim swCustProp                  As CustomPropertyManager
    Dim sMasse                      As String
    Dim sValout                     As String
    Dim sVal                        As String
Sub main()

    '''-----------------------------------------------

    Set swApp = Application.SldWorks
    
    'on récupére le document actif
    Set swModel = swApp.ActiveDoc
    Set swConfigMgr = swModel.ConfigurationManager
    
    'on récupére la configuration active
    Set swConfig = swConfigMgr.ActiveConfiguration
    stnameConfig = swConfig.Name
    vConfigNameArr = swModel.GetConfigurationNames
    
    Set swModelDocExt = swModel.Extension
    
    'Set swCustProp = swModelDocExt.CustomPropertyManager(tConfig(i))
    Set swCustProp = swModelDocExt.CustomPropertyManager("00")

    
    '''-----------------------------------------------
   
   'on boucle sur toutes les configurations
    For Each vConfigName In vConfigNameArr
    'on test si la configuration est différente de la configuration active et de la configuration Default
        
    If vConfigName <> swConfig.Name And vConfigName <> "xx" Then
    boolstatus = swModel.DeleteConfiguration2(vConfigName)
        
    End If
        
    If vConfigName <> swConfig.Name And vConfigName <> "Défaut" Then
    boolstatus = swModel.DeleteConfiguration2(vConfigName)
        
    End If
                    
    Next vConfigName
 
    'on reconstruit la pièces
    swModel.ForceRebuild3 False

Do
    'récupère le document actif dans SW
    Set swModel = swApp.ActiveDoc
    If Not swModel Is Nothing Then
    
        
    ''' lignes déplacées dans la boucle, de manière à ce que l'operation s'effectue sur tous les fichiers et pas juste le premier.

    Set swPart = swModel
    boolstatus = swPart.AddConfiguration2("00", "", "", True, False, False, True, 256)
    boolstatus = swModel.DeleteConfiguration2("Défaut")
    boolstatus = swModel.DeleteConfiguration2("xx")
    
    '''-----------------------------------------------
    
    'Mise en place de la matière
    swModel.SetMaterialPropertyName2 "", "X:\DONNEES BE\DAO\BUREAU ETUDES\BIBLI SOLIDWORKS\MATERIAUX\MATERIAUX QUALI-CITE/QUALI-CITE.sldmat", "ALUMINIUM 6060"
    
    'Boucle sur toutes les configurations
    tConfig = swModel.GetConfigurationNames
    For i = 0 To UBound(tConfig)
        
    'ajoute une propriété personnalisée edition avec la valeur POTEAUXHEXA"
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "DESIGNATION 2")
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "PROFILS")
    bRet = swModel.AddCustomInfo3(tConfig(i), "PROFILS", swCustomInfoText, "POTEAUXHEXA")
    
    'ajoute un propriété personnalisée MASSE avec la valeur Masse
    'Chr(34) permet d'ajouter le caractère "
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "masse")
    bRet = swModel.AddCustomInfo3(tConfig(i), "masse", swCustomInfoText, Chr(34) & "SW-Mass" & Chr(34))
    
    'ajoute un propriété personnalisée POIDS avec la valeur Masse
    'Chr(34) permet d'ajouter le caractère "
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "POIDS")
    bRet = swModel.AddCustomInfo3(tConfig(i), "POIDS", swCustomInfoText, Chr(34) & "SW-Mass" & Chr(34))
    
    'ajoute un propriété personnalisée edition avec la valeur MATERIAUX
    'Chr(34) permet d'ajouter le caractère "
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "MATERIAUX")
    bRet = swModel.AddCustomInfo3(tConfig(i), "MATERIAUX", swCustomInfoText, Chr(34) & "SW-Material" & Chr(34))
    
    
    
'Récupération de la propriété de masse, changer le nom de la propriété en fonction de votre modèle
bRet = swCustProp.Get6("POIDS", False, sValout, sMasse, False, False)
    
'Conversion du texte en valeur décimale, multiplication x RATIO et conversion en donné de type texte
sVal = CStr(Format(CDec(sMasse) * 0.0556, "0.000"))
     
'Renseignement de la propriété SURFACE PIECE avec la valeur "sVal"
bRet = swCustProp.Add3("SURFACE PIECE", 30, sVal, 1)
    
    
    
    
    
    
    Next i

    'Préférences SolidWorks
        
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsLinearFractionDenominator, 0, 0)
    boolstatus = swModel.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsLinearFeetAndInchesFormat, 0, False)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsDualLinear, 0, swLengthUnit_e.swMM)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsDualLinearFractionDenominator, 0, 0)
    boolstatus = swModel.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsDualLinearFeetAndInchesFormat, 0, False)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropMass, 0, swUnitsMassPropMass_e.swUnitsMassPropMass_Kilograms)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropVolume, 0, swUnitsMassPropVolume_e.swUnitsMassPropVolume_Meters3)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsLinear, 0, swLengthUnit_e.swMM)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropLength, 0, swLengthUnit_e.swMM)
        
    'Enregistre le docuement actif en mode silencieux
    bRet = swModel.Save3(swSaveAsOptions_Silent, swErrors, swWarnings)
    
    'Ferme le document actif
    swApp.CloseDoc swModel.GetPathName
    
    End If

'boucle jusqu'a ce qu'il n'y ai plus de fichier ouvert dans SW
Loop While Not swModel Is Nothing

End Sub

Merci beaucoup

Je me réponds à moi même. J’ai cherché et cherché … :dizzy_face:
Lorsque je lançait une première fois ma macro, elle bloquait à cette ligne :

J’ai fait FIN à la commande et dans les propriété F8, j’ai pu voir que PROFILS/masse/POIDS et MATERIAUX se sont bien renseignés. Il manquait donc SURFACE PIECE

j’ai relancé et la macro a fonctionné jusqu’au bout en remplissant bien SURFACE PIECE.

Comme si au premier lancement de la macro, elle ne parvenait pas à récupérer la valeur de POIDS qui se calcule juste avant.

J’ai donc ajouté une reconstruction de pièce entre MATERIAUX et la récupération de propriété de masse et cela fonctionne. :+1:

J’ai testé ma macro avec une seule création de configuration et la SURFACE PIECE était correcte.
Puis j’ai testé ma macro en y intégrant la création de 3 configurations : 00 / PC / R1018.
SURFACE PIECE se créée bien dans les 3 configurations par contre je n’obtiens un bon résultat de calcul que sur une seule configuration.

Avez vous une idée du soucis ?

Voici le code :

    Dim swApp                       As SldWorks.SldWorks
    Dim swModel                     As SldWorks.ModelDoc2
    Dim swConfigMgr                 As SldWorks.ConfigurationManager
    Dim swConfig                    As SldWorks.Configuration
    Dim vConfigName                 As Variant
    Dim sSpecConfigNameArr(0)       As String
    Dim vSpecConfigNameArr          As Variant
    Dim dimValue                    As Variant
    Dim stnameConfig                As String
    Dim boolstatus                  As Boolean
    Dim i                           As Integer
    Dim swErrors                    As Long
    Dim swWarnings                  As Long
    Dim swPart                      As SldWorks.PartDoc
    Dim tConfig()                   As String
    Dim swModelDocExt               As ModelDocExtension
    Dim swCustProp                  As CustomPropertyManager
    Dim sMasse                      As String
    Dim sValout                     As String
    Dim sVal                        As String
Sub main()

    '''-----------------------------------------------

    Set swApp = Application.SldWorks
    
    'on récupére le document actif
    Set swModel = swApp.ActiveDoc
    Set swConfigMgr = swModel.ConfigurationManager
    
    'on récupére la configuration active
    Set swConfig = swConfigMgr.ActiveConfiguration
    stnameConfig = swConfig.Name
    vConfigNameArr = swModel.GetConfigurationNames
    
    Set swModelDocExt = swModel.Extension
    
    
    '''-----------------------------------------------
   
   'on boucle sur toutes les configurations
    For Each vConfigName In vConfigNameArr
    'on test si la configuration est différente de la configuration active et de la configuration Default
        
    If vConfigName <> swConfig.Name And vConfigName <> "xx" Then
    boolstatus = swModel.DeleteConfiguration2(vConfigName)
        
    End If
        
    If vConfigName <> swConfig.Name And vConfigName <> "Défaut" Then
    boolstatus = swModel.DeleteConfiguration2(vConfigName)
        
    End If
                    
    Next vConfigName
 
    'on reconstruit la pièces
    swModel.ForceRebuild3 False

Do
    'récupère le document actif dans SW
    Set swModel = swApp.ActiveDoc
    If Not swModel Is Nothing Then
    
        
    ''' lignes déplacées dans la boucle, de manière à ce que l'operation s'effectue sur tous les fichiers et pas juste le premier.

    Set swPart = swModel
    boolstatus = swPart.AddConfiguration2("00", "", "", True, False, False, True, 256)
    boolstatus = swPart.AddConfiguration2("PC", "", "", True, False, False, True, 256)
    boolstatus = swPart.AddConfiguration2("R1018", "", "", True, False, False, True, 256)
    boolstatus = swModel.DeleteConfiguration2("Défaut")
    boolstatus = swModel.DeleteConfiguration2("xx")
    
    '''-----------------------------------------------
    
    'Mise en place de la matière
    swModel.SetMaterialPropertyName2 "", "X:\DONNEES BE\DAO\BUREAU ETUDES\BIBLI SOLIDWORKS\MATERIAUX\MATERIAUX QUALI-CITE/QUALI-CITE.sldmat", "ALUMINIUM 6060"
    
    'Boucle sur toutes les configurations
    tConfig = swModel.GetConfigurationNames
    For i = 0 To UBound(tConfig)
        
    'ajoute une propriété personnalisée edition avec la valeur POTEAUXHEXA"
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "DESIGNATION 2")
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "PROFILS")
    bRet = swModel.AddCustomInfo3(tConfig(i), "PROFILS", swCustomInfoText, "POTEAUXHEXA")
    
    'ajoute un propriété personnalisée MASSE avec la valeur Masse
    'Chr(34) permet d'ajouter le caractère "
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "masse")
    bRet = swModel.AddCustomInfo3(tConfig(i), "masse", swCustomInfoText, Chr(34) & "SW-Mass" & Chr(34))
    
    'ajoute un propriété personnalisée POIDS avec la valeur Masse
    'Chr(34) permet d'ajouter le caractère "
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "POIDS")
    bRet = swModel.AddCustomInfo3(tConfig(i), "POIDS", swCustomInfoText, Chr(34) & "SW-Mass" & Chr(34))
    
    'ajoute un propriété personnalisée edition avec la valeur MATERIAUX
    'Chr(34) permet d'ajouter le caractère "
    bRet = swModel.DeleteCustomInfo2(tConfig(i), "MATERIAUX")
    bRet = swModel.AddCustomInfo3(tConfig(i), "MATERIAUX", swCustomInfoText, Chr(34) & "SW-Material" & Chr(34))
    
    
    
    'on reconstruit la pièces
    swModel.ForceRebuild3 False
    
    Set swCustProp = swModelDocExt.CustomPropertyManager(tConfig(i))

    
    'Récupération de la propriété de masse, changer le nom de la propriété en fonction de votre modèle
    bRet = swCustProp.Get6("POIDS", False, sValout, sMasse, False, False)
    
    'Conversion du texte en valeur décimale, multiplication x RATIO et conversion en donné de type texte
    sVal = CStr(Format(CDec(sMasse) * 0.0556, "0.000"))
     
    'Renseignement de la propriété SURFACE PIECE avec la valeur "sVal"
    bRet = swCustProp.Add3("SURFACE PIECE", 30, sVal, 1)
    
    
    
    
    
    
Next i

    'Préférences SolidWorks
        
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsLinearFractionDenominator, 0, 0)
    boolstatus = swModel.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsLinearFeetAndInchesFormat, 0, False)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsDualLinear, 0, swLengthUnit_e.swMM)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsDualLinearFractionDenominator, 0, 0)
    boolstatus = swModel.Extension.SetUserPreferenceToggle(swUserPreferenceToggle_e.swUnitsDualLinearFeetAndInchesFormat, 0, False)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropMass, 0, swUnitsMassPropMass_e.swUnitsMassPropMass_Kilograms)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropVolume, 0, swUnitsMassPropVolume_e.swUnitsMassPropVolume_Meters3)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsLinear, 0, swLengthUnit_e.swMM)
    boolstatus = swModel.Extension.SetUserPreferenceInteger(swUserPreferenceIntegerValue_e.swUnitsMassPropLength, 0, swLengthUnit_e.swMM)
        
    'Enregistre le docuement actif en mode silencieux
    bRet = swModel.Save3(swSaveAsOptions_Silent, swErrors, swWarnings)
    
    'Ferme le document actif
    swApp.CloseDoc swModel.GetPathName
    
End If

'boucle jusqu'a ce qu'il n'y ai plus de fichier ouvert dans SW
Loop While Not swModel Is Nothing

End Sub

Je me re-réponds !
J’ai modifié la macro en ne créant que la config 00 au début, puis en renseignant toutes les propriétés.
Enfin je créé toutes les autres configurations qui reprennent donc les propriétés de la configuration initiale.

YOUPI !!!

Merci à vous pour l’aide. J’ai réussi à me débrouiller avec vos conseils. :+1::+1::+1:

1 « J'aime »