• Ce forum est la traduction générée par la machine de www.cad3d.it/forum1 - la communauté italienne du design. Plusieurs termes ne sont pas traduits correctement.

macro vbs fonctionne correctement depuis les fenêtres mais pas en SE

  • Auteur du sujet Auteur du sujet Davimont
  • Date de début Date de début

Davimont

Guest
Je vais t'expliquer.
utilisation de temps ce tour de @vespa_83 pour lancer les macros écrites en vbs.
Maintenant, j'en ai créé un qui cache les parties dupliquées (créées avec chatgpt donc je ne sais pas à quel point élégante) et si jetées des fenêtres cela fonctionne comme je m'y attendais, je vois les parties disparaître une par une.
J'ai ensuite rebaptisé le fichier exécutable de vespa_83 avec le même nom que les vbs.
Si je lance maintenant le fichier exe, l'affichage des composants est inversé, le visible est caché et ce qui est caché est rendu visible. le fichier vbs continue de fonctionner correctement.
Sur quoi peut-on compter ?

J'attache également la macro si elle peut être utile.
la macro lit le premier composant et l'insère dans un tableau.
lorsque vous lisez la suite, vérifiez qu'ils ne sont pas à l'intérieur du tableau autrement les cacher.
 

Pièces jointes

la macro écrite en vbs peut être insérée (et exécutée) directement dans le menu solidedge, sans avoir besoin d'un exécutable, avez-vous essayé cette route?
 
Tu m'as fait curieux et je suis allé chercher le guide.
si par défaut il ne vous montre que l'exe mais il y avait cette première voix que je n'avais jamais explorée1727852088229.pngMerci dws, j'ai réussi à insérer la macro et elle fonctionne correctement.

La macro a encore des défauts à corriger, par exemple je ne peux pas la mettre dans les bras) mais pour l'instant je vais bien comme ça.
 
Tu m'as fait curieux et je suis allé chercher le guide.
si par défaut il ne vous montre que l'exe mais il y avait cette première voix que je n'avais jamais exploréeVoir la pièce jointe 72250Merci dws, j'ai réussi à insérer la macro et elle fonctionne correctement.

La macro a encore des défauts à corriger, par exemple je ne peux pas la mettre dans les bras) mais pour l'instant je vais bien comme ça.
dans les sous-assistances, vous devez examiner les sous-occurrences et les non-occurrences
 
Gardez à l'esprit que le code écrit chatgpt, je l'ai lu en devinant ce qu'il fait mais rien de plus.

Maintenant j'ai ce code qui fonctionne anormalement.

Dans la pratique, il va bien cacher les parties dupliquées présentes au premier niveau, mais quand il va cacher celles des sous-ensembles, il les cache dans le fichier ci-dessous ensemble et non dans la fenêtre sur laquelle je travaille.

Si j'ouvre le bas ensemble, je trouve les parties cachées.

J'ai fait mille tests, mais je ne sors pas.

Code:
'à l'ouverture d'un bord solide
dim objapp
dim objdoc
set objapp = getobject(, "solidedge.application")
set objdoc = objapp.activedocument.occurrences' suppose que le document actif est un set

' crée un dictionnaire pour retracer les éléments déjà traités
dim produits traités
set processeditems = createobject("scripting.dictionary")

«Appel initial à traiter l'aide principale
processuscurrencesobjdoc

' affiche un message final
msgbox "Le processus de cache des pièces dupliquées est terminé. "

Fonction récurrente pour traiter les événements
sous-proccurrences(occurrences)
DIM participation
dim nom de fichier
dim sous-currences

Iter à travers toutes les occurrences (parties ou sous-assistances)
pour chaque participation à des événements
' obtient le nom complet du fichier (y compris l'extension)
nom de fichier = partoccurrence. occurrencedocument.fullname ' utilise le nom complet pour obtenir le chemin complet

Vérifie maintenant si c'est un jeu
s'il s'agit d'un sous-ensemble, alors
«si c'est un ensemble, traiter ses composants internes
sous-occurrences = participation. occurrencedocument.occurrences
sous-assurances liées au processus
♪
Si ce n'est pas un jeu, vérifiez s'il a déjà été traité.
if processeditems.exists(filename) alors
S'il a déjà été jugé, il le cache
partoccurrence.visible = faux
♪
Si elle n'a pas été traitée, l'ajouter à la liste
traitementitems.add nom de fichier, true
fin si
fin si
suivant
fin
 
Code:
Vérifie maintenant si c'est un jeu
s'il s'agit d'un sous-ensemble, alors
«si c'est un ensemble, traiter ses composants internes
sous-occurrences = participation. occurrencedocument.occurrences
sous-assurances liées au processus
dans cette partie du code, dans le cas où le besoin est un subassième, appeler le même subrécursivement en passant l'objet sept sous-occurrences = partoccurrence.occurrencedocument.occurrencesCela ne fonctionne pas car il représente les occurrences du subaxième et non les occurrences du subaxième dans l'axième principal.
il doit donc être modifié set suboccurrences = partoccurrence.suboccurrences
 
patience
si j'entre le changement, je vais à la mauvaise ligne 26 qui détecte le chemin
nom de fichier = partoccurrence. occurrencedocument.fullname
 
Merci dws, j'ai réussi à insérer la macro et elle fonctionne correctement.
De rien.

Je vois. @be_on_edge vous a déjà donné de bons conseils/suggestions pour corriger des erreurs, si vous voulez jeter un oeil à ma version du code (pas complètement testé). .
Code:
option explicite

«code original de révision de l'auteur: rousse praderi 2024-10-02

déclaration variable
dim oapp
DIM Odoc
dim produits traités

' attribue une application variable
set oapp = getobject(, "solidedge.application")

' vérifier si l'objet de l'application a été assigné
si pas oapp n'est rien alors
suite de l'erreur

oapp.screenupdating = faux
oapp.delaycompute = true

set odoc = oapp.activedocument ' attribue le document actif

' vérifier si le document actif est assigné et est un ensemble
si non odoc n'est rien et odoc.type = 3 alors
set processeditems = createobject("scripting.dictionary")

' lance le processus pour les occurrences de l'axième principal
odoc.occurrences

' affiche un message de confirmation
msgbox "le programme contrôlait toutes les pièces et cachait les duplicatas." vbinformation, "opération complète"
♪
msgbox "le document actif n'est pas un jeu!", vbexclamation, "opération inachevée"
fin si

oapp.screenupdating = true
oapp.delaycompete = faux
♪
' affiche un message de confirmation
msgbox "le programme n'est pas actif!", vbexclamation, "opération inachevée"
fin si

ensemble des éléments traités = rien
set odoc = rien
set oapp = rien

Sous-programme récurrent
sous-proccurrences(occurrences)
DIM participation
dim nom de fichier

Iter à travers toutes les occurrences (parties ou sous-assistances)
pour chaque participation à des événements
' obtient le nom complet du fichier (y compris l'extension)
si partoccurrence.type = -1020639365
fichiername = partoccurrence.suboccurrencefilename ' utilise suboccurencefilename pour obtenir le chemin complet
♪
fichiername = partoccurrence. equacefilename ' utilise equacefilename pour obtenir le chemin complet
fin si

Si ce n'est pas un jeu, vérifiez s'il a déjà été traité.
if processeditems.exists(filename) alors
S'il a déjà été jugé, il le cache
partoccurrence.visible = faux
♪
Si elle n'a pas été traitée, l'ajouter à la liste
traitementitems.add nom de fichier, true
fin si

Vérifie maintenant si c'est un jeu
s'il s'agit d'un sous-ensemble, alors
«si c'est un ensemble, traiter ses composants internes
processuscurrences partoccurrence.subcurrences
fin si
suivant
fin

% 1 Je voulais vous demander, vous avez réalisé que le fichier exécutable que vous avez posté dans votre premier message n'est pas celui de @vespa_83 Ma di @be_on_edge (décollage)?
 
C'est le cas. Votre code fonctionne bien ! c'est la différence entre qui sait écrire du code et qui fait mille tentatives aveugles avec chatgpt! Il y a des années, j'ai écrit quelques macros de ma piqûre que j'utilise toujours mais je ne me souviens de rien et j'ai eu un espion pour le bord solide qui m'a donné un coup de main.
Maintenant, j'essaie de comprendre comment vous avez structuré le code pour apprendre quelque chose de nouveau.
Merci beaucoup.

merci également à @be_on_edge pour la patience, le code où j'ai eu l'erreur que je lui ai donné depuis que le code dsw fonctionne.

Je n'avais pas réalisé l'erreur. en recopiant la macro j'ai dû prendre la mauvaise mais je n'aurais jamais remarqué
 
Maintenant, j'essaie de comprendre comment vous avez structuré le code pour apprendre quelque chose de nouveau.
Merci beaucoup.
vous êtes les bienvenus! :)
Je n'avais pas réalisé l'erreur. en recopiant la macro j'ai dû prendre la mauvaise mais je n'aurais jamais remarqué
Eh bien, que dire, mais comment vous faites des erreurs... unmarcettabile... c'est... inacceptable... Je suis absolument sûr que peut-être je ne me trompe jamais :rolleyes:: mal sûr:
 

Statistiques du forum

Sujets
58 521
Messages
499 056
Membres
104 110
Dernier membre
ChristianR

Membres en ligne

Aucun membre en ligne actuellement.
Retour
Haut