Batch "rechercher/remplacer par" texte dans un dossier de plan

Bonjour à tou(te)s,

J'ai un dossier avec plein de mise en plan et je voudrai changer une partie d'un texte (genre M6x30 en M6x30 - 8.8) dans des notes.

Je voulais savoir si comme sous Word on peut faire un "rechercher/remplacer par" sur un dossier de mise en plan ?

Macro, Mycadtool, ...

(j'ai fait une rechercher sur le forum mais sans succès)

Merci d'avance

Bonjour,

Je ne connais pas d'outils existant permettant de faire ça mais cela est surement faisable via un programme qui devrait en automatique à partir d'une liste de plan :

- ouvrir le plan slddrw.

- analyser toutes les notes de ce plan.

- modifier la note si = xxxxxxx.

- sauvegarder ce plan.

- passer au plan suivant.

- etc...

ci-joint un petit exemple de programme, à lancer après démarrage de SW et chargement d'un plan SLDDRW. Ce programme permet de rechercher toutes les notes et toutes les cotes présentes sur un plan (pas toutes les tolérances par contre).

Cordialement,


test-search.zip
2 « J'aime »

Merci d.roger !

J'ai regardé ton exécutable.

Il fonctionne bien pour tout lister.

Deux remarques :

  • dommage que l'on ne puisse pas scroller certaines info étaient inaccessibles en bas de la fenêtre de résultat
  • on ne peut pas sélectionner le texte

Mais surtout pour mon application il me faudrait ouvrir tous les plans (200) un par un. Autant le faire à la mano avec SW / outils / Rechercher/modifier.

J'aurais aimé quelque chose de plus automatique, mais je ne pense pas que cela existe.

Il va falloir que je me mette au VB.

Bonne journée

L'enregistreur de macro donne ceci

Dim swApp As Object

Dim Part As Object
Dim longstatus As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
'--------------------Find and Replace Annotations--------------------
Set swUtil = swApp.GetAddInObject("Utilities.UtilitiesApp")
Set swUtilFindReplaceAnnotations = swUtil.FindReplaceAnnotations
longstatus = swUtilFindReplaceAnnotations.InitPMPage()
'--------------------Block Recording--------------------
#If 0 Then
#End If
'--------------------UnBlock Recording------------------
swUtilFindReplaceAnnotations.FindText = "M6x30"
swUtilFindReplaceAnnotations.ReplaceText = "M6x30 - 8.8"
swUtilFindReplaceAnnotations.options = gtFraMatchCase Or gtFraWholeWord Or gtFraIncludeHiddenAnnotation
swUtilFindReplaceAnnotations.AnnotationFilter = gtFraAllTypes
Part.ClearSelection2 True
longstatus = swUtilFindReplaceAnnotations.ReplaceAll()
'--------------------Block Recording--------------------
#If 0 Then
#End If
'--------------------UnBlock Recording------------------
longstatus = swUtilFindReplaceAnnotations.Close()
End Sub

à voir pour le mettre dans un programme qui boucle sur tout les plan d'un dossier par contre je suis embeter par la boite de dialogue qui apparait a la fin de la macro :/

1 « J'aime »

Bonjour,

Ce programme n'est qu'un exemple pour rechercher les notes et cotes d'un plan, il faut automatiser l'ouverture et la fermeture des SLDDRW, modifier les notes ou cotes en automatique, tracer le résultat dans un fichier log, etc ....

Ton besoin nécessite un peu de connaissance en programmation (vba, vb.net ou C#) mais est faisable. Pour traiter 200 plans, cela représentera un temps de traitement d'environ 20 à 30 minutes au final mais avant il faut prévoir à peu près 2 heures pour écrire le programme.

Cordialement,

Voici déjà une fonction (en C#) permettant de lister toutes les notes d'un plan et de remplacer la valeur "M6x30" par "M6x30 - 8.8" :

private void ListeAnnotations()
{

            DrawingDoc swDraw;
            long j;
            long count;
            SolidWorks.Interop.sldworks.View swView;
            swDraw = (DrawingDoc)swApp.ActiveDoc;
            swView = (SolidWorks.Interop.sldworks.View)swDraw.GetFirstView();
           
            while ((swView != null))
            {
                count = swView.GetNoteCount();
                if (count > 0)
                {
                    Object[] Notes = (Object[])swView.GetNotes();
                    for (j = 0; j <= Notes.GetUpperBound(0); j++)
                    {
                        Note swNote;
                        swNote = (Note)Notes[j];
                        string valueNote = swNote.GetText();
                        string newValueNote = valueNote;
                        if (valueNote.Contains(M6x30))
                        {
                            newValueNote = newValueNote.Replace(M6x30, M6x30 - 8.8);
                            swNote.SetText(newValueNote);
                        }
                    }
                }
                swView = (SolidWorks.Interop.sldworks.View)swView.GetNextView();
            }

}

Cordialement,

1 « J'aime »

Merci pour vos retours, et votre implication !

Je vais regarder en fonction de mes maigres capacité en programmation et de mes disponibilités.

Je suis plus familier avec le VB car j'ai fait beaucoup de macro pour Excel, pour le C++ je l'ai vue à l'école dans les année 2000, je ne suis donc plus du tout à la page mais il offre d'autre possibilités.

Je m'inspirerai de vos code pour faire un choix.

Bon w-end

Bonjour,

Voici une version de programme qui permet de :

- chargement d'un fichier csv contenant la liste des fichiers à analyser, attention cette liste doit être formattée comme le fichier liste.csv joint avec le programme.

- Ouvrir chaque fichier dans Solidworks.

- Analyser toutes les notes de chaque fichier 2D chargé.

- Remplacer le "Texte à modifier" par le "Nouveau texte de la note"

- Sauvegarder le plan ainsi modifié.

Il est préférable de faire un test sur une petite quantité de copie de fichier 2D pour démarrer.

A la fin du traitement, il y aura création d'un fichier résultat.csv dans le dossier de l'éxécutable indiquant si les fichiers ont étés traités ou mis en erreur.

Comme indiqué au lancement du programme, il est impératif de faire une sauvegarde de tous les fichiers à traiter avant traitement.

Je n'aime pas créer de fonction de sauvegarde des fichiers SolidWorks pour d'autres personnes car en temps que personne externe j'estime que je n'ai pas à intervenir sur ceux-ci en mode modification mais pour le fonctionnement de ce programme j'y était un peu obligé, merci donc de bien vouloir travailler sur des copies des fichiers et non sur les originaux.

Cordialement,


modif-notes.zip
1 « J'aime »

Merci d.roger,

Malheureusement les restrictions de mon organisation ne me permet plus d'utiliser les exécutable (le premier est passé mais pas le second)

Je vais donc m'orienter vers du VBA SW + planificateur de tache.

Chapeau pour le travail ! je suis sûr que cela aurai répondu à 100% de mon besoin

Bonne journée !

Sinon il y a l'outil intégration dans mycadtools que tu peux installer et lancer sur un dossier il suffit de modifié la règle jointe.

Et pour cela aucune compétence en programation ne sont nécessaire.

Il suffit de modifier la condition ici j'ai mis pour tous les documents de type plan.

Puis de changer l'opération ici remplacement du texte d'une note par une autre note.Note recherché dans la règle jointe M6x30 texte de remplacement M6x30 -8.8

Et choix des feuilles j'ai choisit toutes les feuilles.

Tu peux l'adapter très simplement puis appliquer cette règle à tout un dossier à tout un assemblage ou autre suivant tes besoin.

 


modification_de_note.mcact
1 « J'aime »