Macro VBA Solidworks (06/03/2024)

Bonjour à tous !

Je débute sur VBA et sur le code en général et je suis actuellement en train de faire une macro qui importe des coordonnées de points depuis un fichier texte pour me créer une spline.

J’ai déjà glané pas mal d’informations en ligne mais je reste bloqué sur la partie création d’un tableau à partir du fichier texte.

Le plus gros problème que je rencontre est le suivant : scinder mes valeurs et les ranger dans un tableau que je pourrais appeler plus tard (Pour placer mes points, comparer les positions de ceux-ci etc …)

Voici où j’en suis :

 Private Sub cmdDecoupe_Click()
 
     Dim inputString, values() As String
     Dim firstValue, secondValue As String
     
     ' Chaîne de caractères
     inputString = "0.0013     0.0010"
     
     ' Supprimer les espaces en trop et divise la chaîne en deux parties
     values = Split(Trim(inputString), " ")
     
     ' Si la longueur de caractères est supérieur ou égale à 1 alors assigne les valeurs aux variables et remplace les points par des virgules
     If UBound(values) >= 1 Then
         firstValue = CDbl(Replace(values(0), ",", "."))
         secondValue = CDbl(Replace(values(1), ",", "."))
         
         ' Affiche les valeurs dans la fenêtre de la console (à des fins de vérification)
         MsgBox ("Première valeur : " & firstValue & " ;Deuxième valeur : " & secondValue)

     Else
         ' Gère le cas où la chaîne ne peut pas être correctement divisée
         MsgBox "La chaîne d'entrée n'est pas au format attendu.", vbExclamation
     End If
 
>End Sub

Cependant, dans la message box qui s’affiche, je n’ai que la première valeur qui s’affiche. J’ai l’impression que le split ne conserve que la première partie coupée.

Comme je débute en code/VBA, je prends en compte tous les conseils :smiley:

Bonjour le problème vient de la variable InputString.
Le split crée une variable tableau de dimension 6 d’où la valeur vide pour secondValue.
image
Quand on veut faire du split d’une chaîne de caractères faut maitriser le formatage des données d’entrée du fichier texte avec un séparateur connu et une chaîne maitrisée.
Au besoin rajouter des tests pour s’assurer que le contenu de la variable n’est pas vide et boucler pour arriver sur la première contenant une donnée.
Autre point cette ligne ne semble servir à rien si les données sont déjà formatée en x.xxxx

firstValue = CDbl(Replace(values(0), ",", "."))
3 « J'aime »

As-tu vraiment besoin de le faire par macros?
Il suffirais peut être de l’importé par Courbe passant par des points XYZ :
image
Au besoin il suffit peut-être de transformé ton fichier texte pour le rendre compatible avec la fonction.
Sinon il me semble avoir déjà vu d’autre macro sur le sujet:

ou

Et il y en a encore d’autre suivant le besoin.

3 « J'aime »

Bonjour, merci pour vos réponses.

@Cyril_f , Je n’avais pas remarqué que mon tableau était bien plus grand que ça. Je pensais que le split aurais conserver que 2 élements, la partie droite de " " et la partie gauche. Si je remplace par ça :

values = Split(Trim(inputString), " ")

Est-ce que je n’aurais plus que 2 éléments dans mon tableau ?

@sbadenis , c’est vrai que cette solution est plus rapide, le problème est que la courbe que je vais générer doit avoir un bord pointu. Si je passe par cette fonction alors le bord est arrondi. A moins qu’il existe un argument pour cette fonction qui me permet de ne pas avoir de continuité en tangence ?
Concernant la macro « Create a spline » de The CAD Coder. J’ai eu l’occasion d’y jeter un oeil et elle fonctionne. Sauf que mon gros blocage c’est pour créer un tableau avec les valeurs. Dans son code, THE CAD CODER fait une simple incrémentation, là où j’ai besoin de récuperer les données depuis mon fichier texte une à une.

Mon texte est une donnée d’entré que je ne peux pas modifier.

Petite question supplémentaire plus globale : Où est-ce que je peux trouver une liste des commandes VBA de solidworks ? Je vois bien l’explorateur d’objets mais cela n’explique pas la fonction.
Par exemple :

Function CreateSpline3(PointData, Surfs, Direction, SimulateNaturalEnds As Boolean, Status) As Object

Comment est ce que je peut connaitre les types de données demandé pour chaque argument ?

Merci

Bonjour,
La fonction Trim supprime les espaces avant et après le texte, pas en plein milieu de celui-ci.
Je n’ai pas vu de modification de votre code, c’est toujours la même ligne donc le résultat sera le même (tableau de dimension 6).
Deux options, soit utiliser la fonction Mid et supprimer les espaces avec la fonction Trim soit faire le split initial puis supprimer les valeurs vides dans le tableau afin qu’il soit à la bonne dimension.
Ci-dessous un bout de code qui permet de transférer les données d’un tableau à un tableau temporaire pour supprimer les lignes vides et ainsi le redimensionner:

     For i =0 To UBound(values)
        If values(i) <> "" Then
            ReDim Preserve tmpValues(j)
            tmpValues(j) = values(i)
            j = j + 1
        End If
    Next i
    ReDim values(UBound(tmpValues))
    For j = 0 To UBound(tmpValues)
        values(j) = tmpValues(j)
    Next j

Sinon après faut jouer avec les manipulations de chaîne.
Pour les aides de l’API SW: CreateSpline3 Method (ISketchManager) - 2023 - SOLIDWORKS API Help

3 « J'aime »