Point et Virgules - macro prop depuis .xls

Bonjour

J'ai fait une macro qui copie les valeur présentes dans un tableau excel  et les colle dans les prop perso d'une pièce. ces valeurs sont ensuite utilisé dasndes équations.

J'ai un problème de format de séparateur de décimale: celui utilisé dans excel est une virgule ",", alors que SW demande un point "."

voici le bout de code qui fait la copie:

Dim numeroligne As Integer
numeroligne = 1 'Numéro de départ

Do While Not IsEmpty(Cells(numeroligne, 1))
retval = swModel.DeleteCustomInfo(Cells(numeroligne, 1))
retval = swModel.AddCustomInfo2(Cells(numeroligne, 1), swCustomInfoText, Cells(numeroligne, 2))
numeroligne = numeroligne + 1 'Le numéro est augmenté de 1 à chaque boucle
Loop

J'ai essai différentes choses, sans succes:

- remplacer la variable "swCustomInfoText" par " swCustomInfoNumber" ou " swCustomInfoDouble" : le type de la propriété change, mais j'ai toujours une virgule comme séparateur

-Passer a un séparateur au format "." dans excel" : ca ne change que l'apparence, mais la valeur récupérée et collée dans solide à toujours une virgule ","

-utiliser un symbol de décimal virgule "," par défaut dans SW (option systeme / general) : dans mes equation, les nombres à séparateur virgule ne sont pas reconnus

Help!

 

Bonjour;

Voici un bout de code pour vérifier les réglages dans Excel:
 

ParamSeparators = Application.International(xlDecimalSeparator)

Ensuite il est facile de faire une boucle dans exel pour remplacer les carracteres "," par des "." ou vice et versa.
 

If ParamSeparators = "," then
for each cells in range (La zone excel contenant les valeurs à modifier)...
...Replace(Texte de la Cellule, ",", ".")
....
end if

Le tout sans à avoir à modifier les paramètres de Solidworks ni d'Excel.

Cordialement.

2 « J'aime »

Ca va modifier la valeur dans le fichier excel ? c'est un solution en effet. Mais tant qu'à faire, je demande a remplacer systématiquement "," par ".", sans le poser la question "If ParamSeparators = "," "

Je suis étonné qu'il n'y ai pas une solution plus "naturelle"

Bonjour;
J'utilise ce type de contrôle quand je partage des Macro entre plusieurs PC, comme cela je compense les réglages de chaque utilisateurs.
Je fait aussi la même chose pour vérifier si Office est en 32 ou en 64Bits.
C'est une sorte d'aveux d'échec de mes tentatives de "Standardisation" et d'uniformisation de notre parc informatique...
Si vous étes seule utilisateur (utilisatrice) ce type de contrôle est effectivement superflu...

Cordialement.

1 « J'aime »

Al a réflexion, et si cela est possible, je préfèrerais remplacer la virgule par un point DANS SW . cela me permet de travailler les valeur comme des nombres dans Excel, et c'est bien plus pratique pour moi que de les avoir au format texte. Pour le moment je me contenterai du remplacement dans Excel, mais si quelqu'un à mieux, je serais bien content.

Il doit faloir faire quelque chose comme

lister les propriétées

récupérer la valeur de chaque propriété comme string

faire une recherche / remplace dans la string

recopier la string dans la bonne propriété

Ca me semble tout de même être une usine a gaz...

En combinant ton code et celui de @Maclane cela devrait le faire il suffit de mettre le remplacement de la , par le. là ou tu récupère ta valeur (éventuellement il faut peut être transformer en string avant à tester)

Regarde la valeur du Debug.print dans ta fenêtre d'exécution et ajuste si besoin de transformer en string ou non. Et si besoin (numérique et non numérique tu applique seulement si la valeur est numérique.

Si ta valeur est toujours numérique pas besoin de faire ce test.

Dim numeroligne As Integer
numeroligne = 1 'Numéro de départ

Do While Not IsEmpty(Cells(numeroligne, 1))
retval = swModel.DeleteCustomInfo(Cells(numeroligne, 1))
Debug.print Replace(Cells(numeroligne, 2),",","."))
retval = swModel.AddCustomInfo2(Cells(numeroligne, 1), swCustomInfoText, Replace(Cells(numeroligne, 2),",","."))
numeroligne = numeroligne + 1 'Le numéro est augmenté de 1 à chaque boucle
Loop

Merci SbaDenis ! je vais tester ça un peu plus tard. Et que je cherche un peu pour comprendre ce qu'est debug.Print.

En tout cas, MERCI de m'avoir poussé à apprendre le code VBA. C'est repoussant au début, mais plus j'en fais, plus j'aime ça. Je vous embête encor pour plein de question mais je sent que je progresse. Fini le temps ou j'essayais de faire des chimère a partir de morceaux trouvés ça et là ;)

 

Bonjour,

Dans Excel il est tout a fait possible de remplacer un point par une virgule (ou vice versa).

On avait des soucis sur des configurations suivant si le poste était configuré en US ou en FR.

Comme cela par exemple :

=SUBSTITUE(A3;",";".")

 

 

 

Bonjour

Pour info, je n'ai pas réussi a changer le "," par "." dans excel. La méthode de sbadenis non plus ne fonctionnais pas (le débug.print intervient sur la cellule excel ou bien sur la chaine de texte stockèe?)

J'ai finalement trouvé la solution en changeant les options  dans windows (paramètres régionaux).

C'est pas ultra satisfaisant pour moi, car si j'utilise ma macro excel sur un autre ordi, il faut que je vérifie que ce paramètre est bien règle.

L'idéale serait de pouvoir remplacer dans la propriété solidworks

Bonjour,

Dans Excel, il faut créer une colonne pour la propriété que vous voulez piloter.

Dans cette colonne il faut rentrer la formule =SUBSTITUE(A3;",";".") ou A3 est la cellule contenant la valeur numérique que vous voulez rentrer dans votre propriété. (la formule ici remplace la virgule par le point, i faut utiliser =SUBSTITUE(A3;".";",") pour faire l'inverse). Il faut donc remplacer A3 pour sélectionner la bonne cellule.

 

En PJ une pièce SW2020 avec un Excel utilisant cette fonction sur la propriété 'observation' : la cote de 2,5 (avec virgule) dans SW devient 2.5 (avec point) dans la propriété


08hu_test.sldprt