Masquer/Afficher les lignes/colonnes de la famille de pièce SW Vba

Bonjour à tous,

Afin d'afficher un tableau comme je le souhaite sur une mise en plan, je dois mettre en forme le fichier excel où se trouve ce dernier. Cela passe par masquer et dans certains cas afficher des colonnes/lignes et j'aimerais le faire automatiquement donc par macro mais je n'y arrive pas.

J'ai enregistrer une macro sous excel pour voir la tête que cela peut avoir :
Sub Cacher_ligne_colonne()
'
'Macro pour cacher les ligne et les colonne que je souhaite
    Columns("B:E").Select
    Selection.EntireColumn.Hidden = True
    Columns("I:K").Select
    Selection.EntireColumn.Hidden = True
    Rows("35:36").Select
    Range("A36").Activate
    Selection.EntireRow.Hidden = True
    Rows("2:8").Select
    Range("A8").Activate
    Selection.EntireRow.Hidden = True
End Sub

Mais je suppose que sous SW ce n'est pas pareil, peut-être faut-il simplement rajouter des xlSW quelque part ? 
Et en enregistrant la manipulation sous SW il enregistre que les mouvement de la fenêtre pas l'action de "masquage" :

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
boolstatus = Part.Extension.SelectByID2("Famille de pièces", "DESIGNTABLE", 0, 0, 0, False, 0, Nothing, 0)
Part.InsertFamilyTableEdit
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Part.ClearSelection2 True
Part.CloseFamilyTable
End Sub

Merci pour votre aide !


 

J'ai cherché mais toujours pas de solution, quelqu'un svp ?

Salut,

Je pense que tu dois déjà ouvrir ta table avec cette méthode : http://help.solidworks.com/2016/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModelDoc2~InsertFamilyTableEdit.html

Ensuite tu créer une macro Excel et tu l'appelles depuis SW.

1 « J'aime »

Merci pour ta réponse, effectivement j'ouvre déjà ma famille de pièce. J'ai un code déjà bien développer pour choisir des configuration au travers d'un formulaire SW donc j'utilise déjà ce genre de syntaxe.

Étant assez novice en programmation Vba, je ne savais pas qu'il était possible d'appeler des "macro* Excel depuis SW. L'idée serait de faire une macro écrite dans Excel mais appeler depuis SW ou elle s'exécuterait tout le temps ? 
Aurais-tu un exemple de code appelant une fonction Excel depuis SW stp ?

Vous vous êtes donné la réponse tout seul.

Pour accéder aux méthodes et aux propriétés d'une cellule ou ligne ou colonne dans excel, il faut utiliser un objet WorkSheet. 

Dans la macro que vous avez faite, recuperez la feuille de la famille de pièces puis faites :

mafeuille.column("l'index de la colonne ").Hidden= True

1 « J'aime »

Bonjour à tous,

je reviens vers ce sujet car j'ai fait quelque recherches mais je suis de nouveau bloqué. J'ai écrit un code fonctionnant dans Excel afin d'afficher toutes les lignes et colonnes d'un tableau :

Dim ShowAllLines As Integer
Dim ShowAllColumns As Integer
                 
ShowAllLines = Columns(1).Find("", after:=[A1]).Row
Range("A1:A" & ShowAllLines).Select
Selection.EntireRow.Hidden = False

ShowAllColumns = Rows(1).Find("", after:=[A1]).Column
Range("A1:" & Chr(64 + ShowAllColumns) & "1").Select
Selection.EntireColumn.Hidden = False

Ceci marche très bien depuis le module Vba d'Excel mais dès que je passe sur SW j'ai une erreur dès la première ligne : 

Dim ShowAllLines As Integer
Dim ShowAllColumns As Integer
                 
ShowAllLines = xlWS.Columns(1).Find("", after:=[A1]).Row
xlWS.Range("A1:A" & ShowAllLines).Select
Selection.EntireRow.Hidden = False
                 
ShowAllColumns = xlWS.Rows(1).Find("", after:=[A1]).Column
xlWS.Range("A1:" & Chr(64 + ShowAllColumns) & "1").Select
Selection.EntireColumn.Hidden = False

Je suppose que c'est dans la syntaxe de la fonction "Find" que cela bloque mais je n'ai pas trouvé d'aide déjà existante, c'est pourquoi je me permets de poster ici.

Merci pour votre aide.

 

Salut

Tu as rajouté a référence Excel à ton projet ?

Sinon : https://excel.developpez.com/faq/index.php?page=Automation#ActiverReference

 

1 « J'aime »

Au fait utilise la nouvelle balise code avec ce bouton :

Cela donne beaucoup de lisibilité au code dans les messages.

Merci

1 « J'aime »

Merci pour l'astuce balise code remrem.
Et oui j'ai ajouté la référence Excel:

Alors, donne-nous ton code complet. Car on ne peut chercher l'erreur sans voir comment tu instancies tes variables...

J'ai du raccourcir mon code car le reste était en construction donc très probablement incompréhensible pour vous et j'ai changé le non de 2-3 variables.

Merci 


code_lynkoa.txt

Si tu fait un débogage pas à pas.

Les vaiables xlWS et  xlWB sont différentes de Nothing ?

 

Non elles sont égales à Nothing.

C'est pour cela que çà dysfonctionne !

C'est là tout le challenge de récupérer le classeur et la feuille excel en cours.

Edit :

J'ai essayé plusieurs pistes mais sans résultats probants pour l'instant....

Je ne comprends pas bien ce que tu veux dire car pour moi je récupère déjà la feuille et le classeur actifs vu que j'écris dedans. En fait grâce à ma macro, j'ouvre le fichier 3D, j'ouvre la famille associée, j'écris le choix de l'utilisateur dans une cellule, je ferme la famille, je mets à jour la famille, je reconstruis et là ma configuration est activée. 

Et dans cela j'aimerais masquer/afficher des colonnes suivant le choix de l'utilisateur.

Je viens de voir que xlWB  ne sert à rien.

Si ta variable xlWS est égale à Nothing après cette ligne :

Set xlWS = swDesignTable.EditTable2(False)

Alors tu ne récupères pas la feuille correctement.

Oui elle ne sert à rien pour le moment car comme j'ai dit mon code est encore en construction donc j'ai créé cette variable dans un but futur :).

Effectivement j'ai vu xlWS ètait égale à Nothing mais du coup je ne vois pas bien comment faire..

Salut,

Après un peu de recherche, tu dois utiliser la propriété Worksheet.

Comme enoncé dans cet exemple.

Tu dois donc faire :

Set xlWS = swDesignTable.Worksheet

Et ensuite vérifier quelle est différente de Nothing :

If Not xlWS Is Nothing Then

End if