CATIA V5 | 3DEXPERIENCE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment :
Jeux, jouets et Lego : le deuxième à ...
Voir le deal

Section programmation CatScript, VBA, VB.NET...

+8
flo
Tétras-Mobile
Guss_
Threedots
tuxmickmac
mike688
gautier2305
SamsGuamejy
12 participants

Page 4 sur 5 Précédent  1, 2, 3, 4, 5  Suivant

Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par SamsGuamejy Jeu 25 Nov 2010 - 6:12

Oula ça fait longtemps que je suis pas venu ici...
j'ai pas reçu les alertes par mail:(

je vais avoir de la lecture...
SamsGuamejy
SamsGuamejy
Fédérateur
Fédérateur

Messages : 314
Date d'inscription : 13/09/2010
Age : 39
Localisation : Vendée (85) FRANCE

http://www.beam3.fr

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par gautier2305 Jeu 25 Nov 2010 - 8:31

Oui un petit peu de lecture Sam Wink

gautier2305
Fédérateur
Fédérateur

Messages : 412
Date d'inscription : 02/09/2010
Age : 37
Localisation : Carvin(62)

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Threedots Jeu 25 Nov 2010 - 9:37

Ah ! Sam le retour ^^

Oui, de la lecture... et quelques nouvelles têtes Very Happy
Threedots
Threedots
Fédérateur
Fédérateur

Messages : 617
Date d'inscription : 16/09/2010
Age : 36
Localisation : Toulouse

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Guss_ Lun 6 Déc 2010 - 17:45

Bon allez c'est presque noel, deux petits scripts (à adapté pour les version US) :

- Permettant en mise en plan d'aller chercher le nom d'une pièce 3D et de la passer dans une zone de texte nommée "nom"
Code:

Sub CATMain()

'---- Début du script de résolution de l'objet : vue_active

Set drawingDocument1 = CATIA.ActiveDocument
Set drawingSheets1 = drawingDocument1.Sheets
Set drawingSheet1 = drawingSheets1.Item("Calque.1")
Set drawingViews1 = drawingSheet1.Views
Set vue_active = drawingViews1.ActiveView
'---- Fin du script de résolution

'---- Début du script de résolution de l'objet : zone_text_nom
Set drawingView1 = drawingViews1.Item("Main View")
Set drawingTexts1 = drawingView1.Texts
Set zone_text_nom = drawingTexts1.GetItem("nom")
'---- Fin du script de résolution

'----Traitement
If vue_active.Name = "Main View" Then
    MsgBox ("veuilliez séléctioner une vue")
Else
    nom_piece_3D = vue_active.GenerativeBehavior.Document.ReferenceProduct.Name
    zone_text_nom.Text = Replace(nom_piece_3D, "_", " ")
End If

End Sub

- Permettant en mise en plan de cacher toutes les flèches de repères bleus de toutes les vues de mise en plan
Code:

Sub CATMain()
'---- Début du script de résolution de l'objet : Axe horizontal
Set drawingDocument1 = CATIA.ActiveDocument
Set drawingSheets1 = drawingDocument1.Sheets
Set selection1 = drawingDocument1.Selection
Set visPropertySet1 = selection1.VisProperties
Set drawingSheet1 = drawingSheets1.Item("Calque.1")
Set drawingViews1 = drawingSheet1.Views

Set visPropertySet1 = visPropertySet1.Parent
'---- Fin du script de résolution

selection1.Clear'----  libère toutes les séléctions
For A = 3 To drawingViews1.Count '---- séléctionne tous les repères
    Set drawingView1 = drawingViews1.Item(A)
    Set geometricElements1 = drawingView1.GeometricElements
    Set repere = geometricElements1.Item("Repère")
    Set axe_h = repere.GetItem("Axe horizontal")
    Set axe_v = repere.GetItem("Axe vertical")
    selection1.Add axe_v
    selection1.Add axe_h
Next
visPropertySet1.SetShow 1 '---- cache tout ce qui à été séléctionné
selection1.Clear '---- libère toutes les séléctions

End Sub

voilà peut être que j'améliorerais les codes pour qu'ils soit compatibles plus facilement entre les version FR et US (mais je n'ai pas de version US pour tester)
Il faudrait indiqué le numéro d'ITEM et non le nom comme le fait automatiquement identification automatique.

Guss_
Admin
Admin

Messages : 530
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par gautier2305 Mar 7 Déc 2010 - 8:48

Merci Guss, je modifie et teste ca dés que j'ai 5 minutes sur une version US!

gautier2305
Fédérateur
Fédérateur

Messages : 412
Date d'inscription : 02/09/2010
Age : 37
Localisation : Carvin(62)

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Guss_ Mar 7 Déc 2010 - 17:57

Ok Wink

J'ai un petit soucis de script, je voudrais automatiser mes impression de dossier de plan mais voilà j'arrive à tout faire sauf, l'impression

J'ai une erreur lorsque j'utilise "PrintOut"

"Method 'PrintOut' of object 'DrawingSheet' failled"

Je ne trouve pas vraiment d'exemple sur le net, et il n'y a pas d'exemple dans la doc de catia à part la syntaxe ...

Je n'ai peut pas pas initialisé un paramètre de l'objet, je n'en sais rien, quelqu'un a t-il utilisé cette method ?

Guss_
Admin
Admin

Messages : 530
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Un script pour dupliquer un product

Message par Tétras-Mobile Mer 8 Déc 2010 - 9:04

Bonjour,
Je suis totalement incapable de créer un script Crying or Very sad Mais j'aimerais bien en avoir un qui réponde à une manip que je fais souvant. A partir d'un produit j'en fait un nouveau en concervant quelques pièces communes entre le premier produit et le nouveau. Pour y parvenir, entre le renommage des nouvelles parts et le nouveau produit, ça peu me prendre un peu de temps. Un script me ferai gagner beaucoup de temps.
Si l'un d'entre vous se sent l'âme de me faire ça alors je le remerci d'avance. Wink
Tétras-Mobile
Tétras-Mobile
actif
actif

Messages : 276
Date d'inscription : 30/11/2010
Age : 55
Localisation : MEGEVETTE -74

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Threedots Mer 8 Déc 2010 - 9:27

Salut Stéphane,

Je sais pas si tu as jeté un coup d'oeil un peu plus avant dans le fil de discussion (p.2-3), mais je m'étais un peu penché sur la sauvegarde de produit, permettant de découpler totalement le nouveau produit de l'ancien (pour permettre notamment de "figer" un modèle à un instant "T").

Pour ce faire, la sauvegarde est manuelle (sauvegarder le produit principal dans un répertoire, propager le répertoire, ajouter un préfixe : tout est dispo dans "gestion des enregistrements", c'est donc assez rapide), puis on renomme les pièces en leur ajoutant un préfixe. Cette partie renommage a été automatisée par une macro.

Ca pourrait t'aider ? Si oui je t'enverrai ça par boite mail, il y a plusieurs choses à ajouter et si tu ne connais pas du tout VBA ça peut être difficile...

Après comme je suis moi aussi pas trop un spécialiste, je n'ai pas le temps de modifier ce bout de code, qui pourrait être amélioré, j'en suis sûr... mais bon.

A tout'
Threedots
Threedots
Fédérateur
Fédérateur

Messages : 617
Date d'inscription : 16/09/2010
Age : 36
Localisation : Toulouse

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Tétras-Mobile Mer 8 Déc 2010 - 9:31

Threedots a écrit:Salut Stéphane,

Je sais pas si tu as jeté un coup d'oeil un peu plus avant dans le fil de discussion (p.2-3), mais je m'étais un peu penché sur la sauvegarde de produit, permettant de découpler totalement le nouveau produit de l'ancien (pour permettre notamment de "figer" un modèle à un instant "T").

Pour ce faire, la sauvegarde est manuelle (sauvegarder le produit principal dans un répertoire, propager le répertoire, ajouter un préfixe : tout est dispo dans "gestion des enregistrements", c'est donc assez rapide), puis on renomme les pièces en leur ajoutant un préfixe. Cette partie renommage a été automatisée par une macro.

Ca pourrait t'aider ? Si oui je t'enverrai ça par boite mail, il y a plusieurs choses à ajouter et si tu ne connais pas du tout VBA ça peut être difficile...

Après comme je suis moi aussi pas trop un spécialiste, je n'ai pas le temps de modifier ce bout de code, qui pourrait être amélioré, j'en suis sûr... mais bon.

A tout'
Merci pour cette réponse si rapide. Je vais regarder ça. J'ai du louper une ligne en lisant ce fil. Embarassed
Tétras-Mobile
Tétras-Mobile
actif
actif

Messages : 276
Date d'inscription : 30/11/2010
Age : 55
Localisation : MEGEVETTE -74

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par gautier2305 Mer 8 Déc 2010 - 9:54

Guss_ a écrit:Ok Wink

J'ai un petit soucis de script, je voudrais automatiser mes impression de dossier de plan mais voilà j'arrive à tout faire sauf, l'impression

J'ai une erreur lorsque j'utilise "PrintOut"

"Method 'PrintOut' of object 'DrawingSheet' failled"

Je ne trouve pas vraiment d'exemple sur le net, et il n'y a pas d'exemple dans la doc de catia à part la syntaxe ...

Je n'ai peut pas pas initialisé un paramètre de l'objet, je n'en sais rien, quelqu'un a t-il utilisé cette method ?

Je viens de faire un essai en imprimant un fichier en pdf avec PDF creator et ca marche, il y a surement la réponse à ta question dans le script, tu as surement du oublié de déclarer une variable. Voici le script:

Language="VBSCRIPT"

Sub CATMain()

Dim printers1 As Printers
Set printers1 = CATIA.Printers

Dim printer1 As Printer
Set printer1 = printers1.Item("PDFCreator")

CATIA.ActivePrinter = printer1

Dim specsAndGeomWindow1 As Window
Set specsAndGeomWindow1 = CATIA.ActiveWindow

Dim pageSetup1 As PageSetup
Set pageSetup1 = specsAndGeomWindow1.PageSetup

pageSetup1.PaperSize = catPaperA4

pageSetup1.Orientation = catPaperPortrait

pageSetup1.LeftMargin = 1.000000

pageSetup1.RightMargin = 1.000000

pageSetup1.TopMargin = 1.000000

pageSetup1.BottomMargin = 1.000000

pageSetup1.MaximumSize = True

pageSetup1.Rotation = catImageRotation90

pageSetup1.BannerPosition = catBannerPositionNone

pageSetup1.Quality = catPrintQualityDraft

pageSetup1.color = catColorTrueColor

pageSetup1.PrintRenderingMode = catPrintRenderingModeDefault

pageSetup1.TextBlanking = False

pageSetup1.WhiteVectorsInBlack = True

pageSetup1.LineWidthSpecification = catPrintAbsolute

pageSetup1.LineTypeSpecification = catPrintAbsolute

pageSetup1.LineCap = catPrintFlat

pageSetup1.TextScaling = True

pageSetup1.LineTypeOverlappingCheck = False

pageSetup1.Gamma = 1.000000

specsAndGeomWindow1.PrintOut

End Sub

gautier2305
Fédérateur
Fédérateur

Messages : 412
Date d'inscription : 02/09/2010
Age : 37
Localisation : Carvin(62)

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Guss_ Mer 8 Déc 2010 - 11:07

gautier2305 a écrit:
Guss_ a écrit:Ok Wink

J'ai un petit soucis de script, je voudrais automatiser mes impression de dossier de plan mais voilà j'arrive à tout faire sauf, l'impression

J'ai une erreur lorsque j'utilise "PrintOut"

"Method 'PrintOut' of object 'DrawingSheet' failled"

Je ne trouve pas vraiment d'exemple sur le net, et il n'y a pas d'exemple dans la doc de catia à part la syntaxe ...

Je n'ai peut pas pas initialisé un paramètre de l'objet, je n'en sais rien, quelqu'un a t-il utilisé cette method ?

Je viens de faire un essai en imprimant un fichier en pdf avec PDF creator et ca marche, il y a surement la réponse à ta question dans le script, tu as surement du oublié de déclarer une variable. Voici le script:
Code:

[color=green]Language="VBSCRIPT"

Sub CATMain()

Dim printers1 As Printers
Set printers1 = CATIA.Printers

Dim printer1 As Printer
Set printer1 = printers1.Item("PDFCreator")

CATIA.ActivePrinter = printer1

Dim specsAndGeomWindow1 As Window
Set specsAndGeomWindow1 = CATIA.ActiveWindow

Dim pageSetup1 As PageSetup
Set pageSetup1 = specsAndGeomWindow1.PageSetup

pageSetup1.PaperSize = catPaperA4

pageSetup1.Orientation = catPaperPortrait

pageSetup1.LeftMargin = 1.000000

pageSetup1.RightMargin = 1.000000

pageSetup1.TopMargin = 1.000000

pageSetup1.BottomMargin = 1.000000

pageSetup1.MaximumSize = True

pageSetup1.Rotation = catImageRotation90

pageSetup1.BannerPosition = catBannerPositionNone

pageSetup1.Quality = catPrintQualityDraft

pageSetup1.color = catColorTrueColor

pageSetup1.PrintRenderingMode = catPrintRenderingModeDefault

pageSetup1.TextBlanking = False

pageSetup1.WhiteVectorsInBlack = True

pageSetup1.LineWidthSpecification = catPrintAbsolute

pageSetup1.LineTypeSpecification = catPrintAbsolute

pageSetup1.LineCap = catPrintFlat

pageSetup1.TextScaling = True

pageSetup1.LineTypeOverlappingCheck = False

pageSetup1.Gamma = 1.000000

specsAndGeomWindow1.PrintOut

End Sub[/color]


Merci, je pense avoir oublié de configurer la propriété Pagesetup
Par contre tu imprime un objet Window alors que je veux imprimer un objet Drawingsheet, pour le moment je n'arrive pas à configurer le pagesetup

v'la mon bout de code
Code:
Private Sub btn_imprime_Click()
    Dim Documents1 As Documents
    Dim DrwDocument As DrawingDocument
    Dim DrwSheets As DrawingSheets
    Dim Drwsheet As DrawingSheet
    Dim Conf_impression As DrawingPageSetup
   
    Set Documents1 = CATIA.Documents
    n_selection = lst_fichiers.ListCount
    For n = 0 To n_selection - 1
        If lst_fichiers.Selected(n) Then
            selection_impression = repertoire + "" + lst_fichiers.List(n)
            ListBox1.AddItem selection_impression
            Set DrwDocument = Documents1.Read(selection_impression)
            Set DrwSheets = DrwDocument.Sheets
            Set Drwsheet = DrwSheets.Item(1)
            Set Conf_impression = Drwsheet.PageSetup  <==== erreur "methode 'PageSetup' of object 'Drawingsheet' failed"
           
            txt_debug4.Text = imprimante.DeviceName
            Conf_impression.FitToPrinterFormat = true
            Drwsheet.PrintOut
            DrwDocument.Close
        End If
    Next
End Sub

Guss_
Admin
Admin

Messages : 530
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par gautier2305 Mer 8 Déc 2010 - 11:34

la macro marche pour du 3d mais aussi pour le drawing, je l'ai testée!

Au lieu de mettre ca

Drwsheet.PrintOut

Si tu mets ca ca marche pas?

specsAndGeomWindow1.PrintOut

gautier2305
Fédérateur
Fédérateur

Messages : 412
Date d'inscription : 02/09/2010
Age : 37
Localisation : Carvin(62)

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Guss_ Mer 8 Déc 2010 - 11:41

specsAndGeomWindow1 c'est ton objet window définie par
Dim specsAndGeomWindow1 As Window

Moi j'ai
Dim Drwsheet As DrawingSheet

Donc visiblemetn pas tout à fait pareil à gèrer.

Ce que tu imprime c'est le contenu d'une fenêtre, moi je veux imprimé le contenu d'un 2D en le chargeant en mémoire sans l'afficher dans une fenêtre.

dans les exemple il y a bien

o Property PageSetup( ) As DrawingPageSetup (Read Only)

Returns the page setup.
Example:
This example returns the page setup for the MySheet drawing sheet.
Dim MySheetPageSetup As DrawingPageSetup
Set MySheetPageSetup = MySheet.PageSetup


Sub PrintOut( )

Prints the drawing sheet according to its page setup on the default printer.
Warning: This method is not available with 2D Layout for 3D Design.
Example:
This example prints the DrawingSheet1 on the default printer.
DrawingSheet1.PrintOut



Guss_
Admin
Admin

Messages : 530
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Guss_ Jeu 9 Déc 2010 - 15:26

Bon encore un petit soucis.

Mon script est visiblement opérationnel, par contre, seul bémol, là ou je bosse il y a des page de garde pour chaque tâche d'impression, alors j'aimerais pouvoir regrouper toutes mes impressions en une seul.

Je ne sais pas si avec catia ce genre de chose est possible

Guss_
Admin
Admin

Messages : 530
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par gautier2305 Jeu 9 Déc 2010 - 16:42

Merci de nous tenir au courant.

Pour ton nouveau problème, en imprimant tes documents en PDF et en les compilant ensuite mais en dehors de Catia, ca ne te convient pas?

Car dans catia je ne pense pas que ce soit faisable, mais on ne sait jamais.

gautier2305
Fédérateur
Fédérateur

Messages : 412
Date d'inscription : 02/09/2010
Age : 37
Localisation : Carvin(62)

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Guss_ Jeu 9 Déc 2010 - 16:47

Voilà mon code actuel

Le code à besoin de :
1 combobox : lst_imprimantes
1 label : lab_repertoire
2 bouton : btn_repertoire, btn_imprime
1 listbox : lst_fichiers

Code lié au module :
Code:
Sub CATMain()
    Load Page
    Page.Show
End Sub


code lié à la "Form" :
Code:

Dim repertoire
Dim imprimantes As Printers
Dim imprimante As Printer
Dim selection_impression As String
Dim n_selection As Integer

Private Sub btn_imprime_Click()
'initialisation des parametres
    Dim Documents As Documents
    Dim Document As Document
    Dim DrwDocument As DrawingDocument
    Dim DrwSheets As DrawingSheets
    Dim DrwSheet As DrawingSheet
    Dim Conf_impression As DrawingPageSetup
'création d'un fentre sinon les moethode liées à l'impression ne sont pas disponibles
    Set Document = CATIA.Documents.Add("Part")
    Set Documents = CATIA.Documents
    n_selection = lst_fichiers.ListCount
'Traitement de chaque éléments séléctioné dans la liste
    For n = 0 To n_selection - 1
        If lst_fichiers.Selected(n) Then
            selection_impression = repertoire + "" + lst_fichiers.List(n) 'chargement d'un drawing
            Set DrwDocument = Documents.Read(selection_impression)
            Set DrwSheets = DrwDocument.Sheets
            Set DrwSheet = DrwSheets.Item(1)
            Set Conf_impression = DrwSheet.PageSetup 'paramètrage du format d'impression
            Conf_impression.Orientation = imprimante.Orientation
            Conf_impression.PaperSize = imprimante.PaperSize
            Conf_impression.PaperHeight = imprimante.PaperHeight
            Conf_impression.PaperWidth = imprimante.PaperWidth
            DrwSheet.PrintOut 'imprsionn
            DrwDocument.Close 'fermeture du drawing
        End If
    Next
Document.Close 'fermeture de la fenetre
End Sub

Private Sub btn_repertoire_Click()
    repertoire = choix_rep("choix du répètroire")
    lab_repertoire = repertoire + ""
    scan_repertoire (repertoire)
    Call trie(lst_fichiers)
End Sub

Function choix_rep(titre)
    Set objShell = CreateObject("shell.Application")
    Set objFolder = objShell.BrowseForFolder(0, titre, 0)
    If (Not objFolder Is Nothing) Then
        choix_rep = objFolder.Items.Item.Path
    End If
    Set objFolder = Nothing
    Set objShell = Nothing
End Function

Sub scan_repertoire(ByVal rep)
    Dim FSO
    Set FSO = CreateObject("Scripting.FileSystemObject")
    lst_fichiers.Clear
    On Error GoTo erreur
    Set contenu_rep = FSO.GetFolder(rep)
        For Each fichier In contenu_rep.Files
            If (InStr(1, fichier.Name, ".catdrawing", 1) > 0) Then
                lst_fichiers.AddItem fichier.Name
            End If
        Next
    lst_fichiers.Enabled = True

Exit Sub
erreur:
        MsgBox ("erreur de séléction du répertoire")
End Sub

Private Sub lst_fichiers_Change()
    btn_imprime.Enabled = False
    For n = 0 To lst_fichiers.ListCount - 1
        If lst_fichiers.Selected(n) = True Then btn_imprime.Enabled = True
    Next n
End Sub

Private Sub lst_imprimantes_Change()
    Set imprimantes = CATIA.Printers
    CATIA.ActivePrinter = imprimantes.Item(lst_imprimantes.Text)
    Set imprimante = CATIA.ActivePrinter
   
End Sub

Private Sub UserForm_Activate()
    Set imprimantes = CATIA.Printers
    For Each imprimante In imprimantes
        lst_imprimantes.AddItem imprimante.DeviceName
    Next
    Set imprimante = CATIA.ActivePrinter
    lst_imprimantes.Text = imprimante.DeviceName
End Sub

Private Sub trie(ByRef LB As ListBox)
    Dim First, Last, i, j As Integer
    Dim Temp As String
    Dim TempArray As Variant
   
    ReDim TempArray(LB.ListCount)
   
    First = LBound(TempArray)
    Last = UBound(TempArray) - 1
   
    For i = First To Last
        TempArray(i) = LB.List(i)
    Next i
   
    For i = First To Last
        For j = i + 1 To Last
            If TempArray(i) > TempArray(j) Then
                Temp = TempArray(j)
                TempArray(j) = TempArray(i)
                TempArray(i) = Temp
            End If
        Next j
    Next i
   
    LB.Clear
    For i = First To Last
        LB.AddItem TempArray(i)
    Next i
End Sub



Guss_
Admin
Admin

Messages : 530
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Guss_ Mer 12 Jan 2011 - 10:12

Nouvelle macro (editeur visual basic), permettant d'insérer ou éditer un tableau Catia via Excel
avec un tableau contenant les colonnes N°plan, indice, nombre, désignation et Observation
A adapter suivant vos besoins, et me demander si vous voulez changer le nombre de colonnes et les tailles si vous n'arrivez pas à déchiffrer toutes la macro.

Attention, lors du passage de Excel vers catia, il y a une vérification de l'existence de la case contenant "N°Plan" dans la colonne A, donc il faut changer cette vérification si vous changez le nom de cette case

Attention pour un bon focntionnement il faut autoriser Excel à recevoir du code depuis catia
Dans le menu Excel "outils" -> "Macro" -> "Securité" -> "Editeur approuvée"
cochez la case "Faire confiance au projet Visual Basic

Code:

Sub CATMain()
'--- initialisation objet nomenclateur
    Dim drawingDocument1 As DrawingDocument
    Dim drawingSheets1 As DrawingSheets
    Dim drawingSheet1 As DrawingSheet
    Dim drawingViews1 As DrawingViews
    Dim drawingView1 As DrawingView
    Dim drawingTables1 As DrawingTables
    Dim nomenclature As DrawingTable
    Set drawingDocument1 = Catia.ActiveDocument
    Set drawingSheets1 = drawingDocument1.Sheets
    Set drawingSheet1 = drawingSheets1.Item("Calque.1")
    Set drawingViews1 = drawingSheet1.Views
    Set drawingView1 = drawingViews1.Item("Main View")
    Set drawingTables1 = drawingView1.Tables
'---- test si un taleau existe si non on le créé
    On Error Resume Next
    Set nomenclature = drawingTables1.Item(1)
    If Err.Number <> 0 Then
        Set nomenclature = drawingTables1.Add(0, 0, 1, 5, 7, 200 / 5)
        With nomenclature
            .SetCellString 1, 1, "N°Plan"
            .SetCellString 1, 2, "Ind."
            .SetCellString 1, 3, "Nb"
            .SetCellString 1, 4, "Désignation"
            .SetCellString 1, 5, "Observations"
            .SetColumnSize 1, 28
            .SetColumnSize 2, 10
            .SetColumnSize 3, 10
            .SetColumnSize 4, 76
            .SetColumnSize 5, 76
            For C = 1 To 5
                With .GetCellObject(1, C)
                    .SetFontSize 0, 0, 2.3
                End With
            Next
        End With
    End If
'---- initialisation variables de traiement
    Dim colonnes As Long
    Dim lignes As Long
    colonnes = nomenclature.NumberOfColumns
    lignes = nomenclature.NumberOfRows
'---- initialisation excel
    Dim Excel As Object
    On Error Resume Next
    Set Excel = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
        Set Excel = CreateObject("Excel.Application")
        Excel.Visible = True
    End If
    On Error GoTo 0
    Excel.Visible = True
    Excel.Workbooks.Add
    Set wbks = Excel.ActiveWorkbook
    Set wbk = wbks.Sheets(1)
'------- passage catia -> excel
    For L = 1 To lignes
        For C = 1 To colonnes
            wbk.Cells(L, C) = nomenclature.GetCellString(L, C)
            wbk.Cells(L, C).borders.LineStyle = 1
            wbk.Cells(L, C).borders.Weight = 2
        Next
    Next
'------ mis en page excel
    wbk.Columns(1).ColumnWidth = 14.29
    wbk.Columns(2).ColumnWidth = 2.57
    wbk.Columns(3).ColumnWidth = 4.43
    wbk.Columns(4).ColumnWidth = 42.71
    wbk.Columns(5).ColumnWidth = 30.71
'---- initialisation bouton de mise à jour excel
    Dim Obj As Object
    Dim Code As String
'---- create button
    Set Obj = wbk.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
    Link:=False, DisplayAsIcon:=False, Left:=550, Top:=0, Width:=100, Height:=35)
    Obj.Name = "Bouton_MAJ"
'---- buttonn text
    wbk.Bouton_MAJ.Caption = "Mise à jour de la nomenclature"
    wbk.Bouton_MAJ.WordWrap = True
    wbk.Bouton_MAJ.TakeFocusOnClick = False
'---- macro text
    Code = Code & "Private Sub Bouton_MAJ_Click()" & vbCrLf
    Code = Code & " " & vbCrLf
    Code = Code & "'---- initialisation catia" & vbCrLf
    Code = Code & "    Dim Catia As Object" & vbCrLf
    Code = Code & "    On Error Resume Next" & vbCrLf
    Code = Code & "    Set Catia = GetObject(, ""CATIA.Application"")" & vbCrLf
    Code = Code & "    If Err.Number <> 0 Then" & vbCrLf
    Code = Code & "        MsgBox (""pas de session catia trouvée"")" & vbCrLf
    Code = Code & "    Else" & vbCrLf
    Code = Code & "        On Error GoTo 0" & vbCrLf
    Code = Code & "        Set drawingDocument1 = Catia.ActiveDocument" & vbCrLf
    Code = Code & "        Set drawingSheets1 = drawingDocument1.Sheets" & vbCrLf
    Code = Code & "        Set drawingSheet1 = drawingSheets1.Item(""Calque.1"")" & vbCrLf
    Code = Code & "        Set drawingViews1 = drawingSheet1.Views" & vbCrLf
    Code = Code & "        Set drawingView1 = drawingViews1.Item(""Main View"")" & vbCrLf
    Code = Code & "        Set drawingTables1 = drawingView1.Tables" & vbCrLf
    Code = Code & "        Set nomenclature = drawingTables1.Item(1)" & vbCrLf
    '--Code = Code & "        nomenclature.ComputeMode = CatTableComputeOFF" & vbCrLf
    Code = Code & "'---- determine nom de ligne de la nomenclature" & vbCrLf
    Code = Code & "        Dim l, lignes As Long" & vbCrLf
    Code = Code & "        l = 1" & vbCrLf
    Code = Code & "        While Cells(l, 1) <> ""N°Plan""" & vbCrLf
    Code = Code & "            l = l + 1" & vbCrLf
    Code = Code & "            if l>150 then" & vbCrLf
    Code = Code & "                MsgBox (""case 'N°Plan' non trouvée"")" & vbCrLf
    Code = Code & "                Exit Sub" & vbCrLf
    Code = Code & "            end if" & vbCrLf
    Code = Code & "        Wend" & vbCrLf
    Code = Code & "'---- lit taille de la nomenclature existante" & vbCrLf
    Code = Code & "        lignes = nomenclature.NumberOfRows" & vbCrLf
    Code = Code & "'---- redimentionna la nomenclature Catia" & vbCrLf
    Code = Code & "        If lignes < l Then" & vbCrLf
    Code = Code & "            lignes = l - lignes" & vbCrLf
    Code = Code & "            For t = 1 To lignes" & vbCrLf
    Code = Code & "                nomenclature.AddRow 0" & vbCrLf
    Code = Code & "                nomenclature.Y = nomenclature.Y + 7" & vbCrLf
    Code = Code & "            Next" & vbCrLf
    Code = Code & "        Else" & vbCrLf
    Code = Code & "            lignes = lignes - l" & vbCrLf
    Code = Code & "            For t = 1 To lignes" & vbCrLf
    Code = Code & "                nomenclature.RemoveRow 0" & vbCrLf
    Code = Code & "                nomenclature.Y = nomenclature.Y - 7" & vbCrLf
    Code = Code & "            Next" & vbCrLf
    Code = Code & "        End If" & vbCrLf
    Code = Code & "'---- passage excel -> Catia" & vbCrLf
    Code = Code & "        For ligne = 1 To l" & vbCrLf
    Code = Code & "            For colonne = 1 To 5" & vbCrLf
    Code = Code & "                nomenclature.SetCellString ligne, colonne, Cells(ligne, colonne)" & vbCrLf
    Code = Code & "            Next" & vbCrLf
    Code = Code & "        Next" & vbCrLf
    '---Code = Code & "        nomenclature.ComputeMode = CatTableComputeON" & vbCrLf
    Code = Code & "        thisworkbook.Close SaveChanges:=False" & vbCrLf
    Code = Code & "    End If" & vbCrLf
    Code = Code & "End Sub" & vbCrLf
'---- add macro at the end of the sheet module
    With wbks.VBProject.VBComponents(wbk.Name).CodeModule
        .insertlines .CountOfLines + 1, Code
    End With
    nomenclature.ComputeMode = CatTableComputeON
End Sub

Guss_
Admin
Admin

Messages : 530
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Threedots Mer 12 Jan 2011 - 10:27

Ho Ho Ho...

J'ai pas de temps en ce moment pour m'y pencher dessus, mais j'y jeterai un oeil Guss. Ca m'a l'air tout bon pour mes ptits plans ça ! Wink

Merci pour ton travail !
Threedots
Threedots
Fédérateur
Fédérateur

Messages : 617
Date d'inscription : 16/09/2010
Age : 36
Localisation : Toulouse

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Guss_ Mer 12 Jan 2011 - 10:45

ça évite de passer par les objet OLE et d'être limité à une 50aine de ligne lors de l'importation d'un tableau Excel

Guss_
Admin
Admin

Messages : 530
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par gautier2305 Jeu 13 Jan 2011 - 15:40

Ouah merci du partage Guss!!

Je teste ca dés que j'ai 5 minutes Wink

gautier2305
Fédérateur
Fédérateur

Messages : 412
Date d'inscription : 02/09/2010
Age : 37
Localisation : Carvin(62)

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Guss_ Ven 14 Jan 2011 - 9:27

De rien j'ai vu plusieurs fois ce genre de soucis avec d'autre qui répondaient qu'ils avaient un script qu'il ne voulaient pas partager.
Donc s'ils avaient été capable de le faire, pourquoi pas moi Wink

Guss_
Admin
Admin

Messages : 530
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par flo Ven 28 Jan 2011 - 23:34

Quelqu'un connait il le module knowledge expert ? car j'ai besoin d'explication, en effet, je voudrais créer une règle qui ressemblerai à :
en CATscript
if Longueur.1 <= Longueur.2
time =1s

en VBScript
if Longueur.1< Longueur.2 then
time =1s
end if
if longueur.1=Longueur.2 then
time =1s
end if

avec Longueur 1 et 2, 2 paramètres en mm
et time un paramètre en seconde
flo
flo
Fédérateur
Fédérateur

Messages : 455
Date d'inscription : 21/01/2011
Age : 34
Localisation : Angers

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par gautier2305 Lun 31 Jan 2011 - 8:36

C’est l’atelier Knowlegde Advisor qu’il faut que tu utilises.

Voici la formule en CatScript :

If Longueur_1 <= Longueur_2
Time_1 =10s

Tu as testé les lignes que tu avais mis?car ca me semble relativement similaire. A mon avis ca devait marcher Wink

gautier2305
Fédérateur
Fédérateur

Messages : 412
Date d'inscription : 02/09/2010
Age : 37
Localisation : Carvin(62)

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par flo Lun 31 Jan 2011 - 10:36

Oui je connais ce module, mais le problème est que je ne peut pas l'utiliser car il n'est pas installé, en effet, j'utilise LMS Virtual.lab (logiciel de simulation dynamique compatible avec catia : certain module sont identique) mais je n'ai accès qu'à Knowledge expert et non advisor. Mais Expert est bien plus compliqué à utiliser.
flo
flo
Fédérateur
Fédérateur

Messages : 455
Date d'inscription : 21/01/2011
Age : 34
Localisation : Angers

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par rouday Jeu 3 Fév 2011 - 11:10

Salut à tous !
j'ai besoin d'un petit coup de pouce pour du vbscript (en effet je gère assez bien vba mais je bloque en vbscript !)

En fait j'ai réalisé une pièce paramétrée à partir d'un fichier Excel et j'ai besoin de récupérer la valeur de ce parametre pour enregistrer mon fichier
Concrétement

j'ai un arbre principal nommé "Parameters", un sous-arbre nommé "Dimensions" qui contient plusieurs paramètres donc "PartNumber"
PartNumber est le nom de ma pièce (EX: moteur_V8)

je voudrais créer une petite macro qui me permette de renommer mon Part1.CATPart en PartNumber.CATPart, est-ce possible ?
(de récupérer la valeur d'un paramètre)
Merci bien

rouday
timide
timide

Messages : 2
Date d'inscription : 03/02/2011

Revenir en haut Aller en bas

Section programmation CatScript, VBA, VB.NET... - Page 4 Empty Re: Section programmation CatScript, VBA, VB.NET...

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 4 sur 5 Précédent  1, 2, 3, 4, 5  Suivant

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum