Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Voir le sujet précédent Voir le sujet suivant Aller en bas

Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par Bernie12 le Sam 31 Oct 2015 - 1:55

Bonjour,

En ce moment, je me bataille avec le VBA de CATIA V5. J'essaie de créer un tableau Excel dans lequel sont indiqués les plans 2D (CATDrawing) qui ont comme texte "toto". Cette référence se trouvent dans une chaîne de caractère qui, elle, se trouve dans un texte.


Voici mon code :

   'Ouvrir catia
   Set CATIAApp = CreateObject("Catia.Application")
   
   'Ouvrir le CATDrawing
   CATIA.Documents.Open ("blabla.CATDrawing")
   
   'Document actif comme objet
   Set MyDrawing = CATIA.ActiveDocument
   
   'Extraire le nom du fichier drawing
   Name = MyDrawing.Name
   
   'Lire les feuilles du document actif
   Set MyDrawingSheets = MyDrawing.Sheets
       
   'Selectionne la feuille active
   For numF = 1 To MyDrawingSheets.Count
       
       'Donne a CurrentSheet la feuille n°numF
       Set CurrentSheet = MyDrawingSheets.Item(numF)
       
       'Attribue les vues de la feuille active à MyDrawingViews
       Set MyDrawingViews = CurrentSheet.Views
   
       'Analyse de toutes les vues
       For numV = 1 To MyDrawingViews.Count
       
           'Sélectionne la vue numéro "numV"
           Set CurrentView = MyDrawingViews.Item(numV)
           
           'Attribue à Textes tous les textes de la vue active
           Set Textes = CurrentView.Texts
       
           'Lecture de tous les texte de la vue active
           For numtxt2 = 1 To Textes.Count
           
               'Selection de chaque texte
               Set CurrentTexte = Textes.Item(numtxt2)
           
               'Attribution de la chaine de caractère du CurrentTexte à "Texte"
               Texte = CurrentTexte.Text

                   For s = 1 To Len(Texte)                
                   
                       If Mid(Texte, s, Len("Toto")) Like "Toto" Then
               
                           MonExcel.Cells(1,1) = MyDrawing.Name

                           MonExcel.Cells(1,2) = "Toto"
                           
                       End If
                       
                   Next

               End If

          Next

      Next

  Next

Bien que mon dessin indique "Toto", mon Excel reste vide. Votre aide m'est la bienvenue.


Dernière édition par Bernie12 le Sam 31 Oct 2015 - 3:05, édité 1 fois

Bernie12
timide
timide

Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil

Revenir en haut Aller en bas

Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par cad00 le Sam 31 Oct 2015 - 2:54

Il  faudrait peut-être écrire ton code de cette façon :

With ActiveWorkbook.Worksheets("Feuil1") ‘  Feuil1 est le nom de la feuille excell
 .Cells(1, 1) = MyDrawing.Name
 .Cells(1, 2) = "EN-7020"
End With

Tu peux également travailler avec tes modèles 3D, si ils ont la matière renseignée, je te donne un lien sur un tuto : http://cao-3d-pro.com/catia-vba-lister-les-matieres/

cad00
actif
actif

Messages : 30
Date d'inscription : 17/03/2015
Localisation : PACA

Revenir en haut Aller en bas

Dans un CATDrawing ?

Message par Bernie12 le Sam 31 Oct 2015 - 20:06

Salut,

Je te remercie pour ta rapidité et pour ta réponse.

Ton code fonctionne sur des CATParts. Mon problème est d'analyser tous les plans sous format CATDrawing car les noms des matières sont écrits en texte dans ces dessins et pas sur les CATParts.

Bernie12
timide
timide

Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil

Revenir en haut Aller en bas

Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par mike688 le Lun 2 Nov 2015 - 20:48

dans l'idée c'est cela.
le mieux est de creer une fonction de recherche. de text
ne pas utiliser  ta boucle "len" mais plutot la fonction instr(lcase(Texte),"toto")
la réponse est  = 0 si  n'existe pas
ou >0 (la valeur retour indique la position dans la chaine de texte)

donc tu creer une fonction as boolean
si c'est vrai tu ecris, sinon tu n'ecris pas.

tu peux ecrire en attendantdans une variable tableau et une foi tous les fichier repérer tu creer ton excel en fonction de ta variable.


Dernière édition par mike688 le Mar 3 Nov 2015 - 20:09, édité 1 fois
avatar
mike688
actif
actif

Messages : 255
Date d'inscription : 23/12/2009
Age : 35
Localisation : Portieux (88)

Revenir en haut Aller en bas

Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par mike688 le Lun 2 Nov 2015 - 20:51

vla ma fonction de recherche

Public Function LookForText(content As String, whole As Boolean) As DrawingText

Dim fichier1 As DrawingDocument
Set fichier1 = CATIA.ActiveDocument
Dim Drawing1 As DrawingRoot
Set Drawing1 = fichier1.DrawingRoot
Dim sheets1 As DrawingSheets
Dim sheet1 As DrawingSheet
Set sheets1 = Drawing1.Sheets
Dim views1 As DrawingViews
Dim view1 As DrawingView
Dim texts1 As DrawingTexts
Dim TexT1 As DrawingText
'
For s = 1 To sheets1.Count
Set sheet1 = sheets1.Item(s)
Set views1 = sheet1.views
For V = 1 To views1.Count
Set view1 = views1.Item(V)
Set texts1 = view1.texts
For t = texts1.Count To 1 Step -1

Set TexT1 = texts1.Item(t)

If InStr(LCase(TexT1.text), LCase(content)) > 0 Then
Select Case whole
Case True
If LCase(TexT1.text) = LCase(content) Then GoTo textfound
Case False
GoTo textfound
End Select
End If
Next t
Next V
Next s
MsgBox "no " & Chr(34) & content & Chr(34) & "text found content": Exit Function
textfound:
'MsgBox content & " X:" & text1.X & " y:" & text1.Y
'Set SEL = Fichier1.selection
'SEL.Add text1
Set LookForText = TexT1
:
End Function


selon les habitude de position de ton texte, tu peux inverser ou non les boucles (garder "whole" = true )
g pas fini de coder Smile

avatar
mike688
actif
actif

Messages : 255
Date d'inscription : 23/12/2009
Age : 35
Localisation : Portieux (88)

Revenir en haut Aller en bas

Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par Bernie12 le Mar 3 Nov 2015 - 15:07

Salut Mike688,

Super ! Ta procédure marche très bien. En inspirant de ta procédure, mon code marche et il trouve les "toto". Merci beaucoup. Smile  Smile  Smile  Smile  Smile

Merci encore.

J'espère que tous les utilisateurs de CATIA V5 seront satisfaits de ta réponse. cheers

Bernie12
timide
timide

Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil

Revenir en haut Aller en bas

Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par mike688 le Mar 3 Nov 2015 - 20:13

alors juste pour preciser,
le parametre whole est la pour outre passer la boucle " dans toutes les feuilles"
et n'utiliser que la feuille active (pour plus de rapiditer)

si apres tu as une multitude de fichier, tu peux les faire a la voler en les recherchant soit dans le repertoire de travail soit dans un fichier liste.txt

quand tu va ouvrir un fichier avec vba, tu peux soit fair :
catia.documents.open(nom_du_fichier)
soit
catia.documents.open(nom_du_fichier)
la deuxieme methode est beaucoup plus rapide


je m'en sert pour extraire des parametres de fichier pour les mettre en tableau dans un drawing.
avatar
mike688
actif
actif

Messages : 255
Date d'inscription : 23/12/2009
Age : 35
Localisation : Portieux (88)

Revenir en haut Aller en bas

Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par Bernie12 le Ven 6 Nov 2015 - 23:16

Mike688 a écrit:Select Case whole
Case True
If LCase(TexT1.text) = LCase(content) Then GoTo textfound
Case False
GoTo textfound
End Select

Pourrais-tu nous expliquer ce que signifie chaque ligne, s'il te plaît ?

Bernie12
timide
timide

Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil

Revenir en haut Aller en bas

Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par mike688 le Sam 7 Nov 2015 - 1:17

il s'agit donc d'un fonction ou methode j'en sais rien de type select case.
l'interet c'est de faire une etude de cas qui evite les if then etc...
dans le cas la ça permet lors de la boucle de savoir si le text trouvé est exactement celui qu'on recherche (whole = true) ou
ou alors pour whole= false
si qu'une seule partie du texte trouvé contient ce que l'on recherche

donc en fait.... je ne me souvenais pas du tout avoir fait ça comme ça ..... Sad



avatar
mike688
actif
actif

Messages : 255
Date d'inscription : 23/12/2009
Age : 35
Localisation : Portieux (88)

Revenir en haut Aller en bas

A la recherche de deux textes

Message par Bernie12 le Ven 20 Nov 2015 - 2:48

Bonjour tout le monde,

Je suis maintenant à la recherche de deux termes : "Toto" et "Babar". J'ai maintenant tenté le code suivant :

Code:
                Select Case whole
            
                    Case True
 
                    If LCase(TexT1.Text) = LCase("Toto") Then GoTo Protectionfound
                    
                    If LCase(TexT1.Text) = LCase("Babar") Then GoTo Materialfound
                    
                    Case False
                    
                    GoTo Protectionfound
                    
                    GoTo Materialfound
 
                End Select

Le drawing possède "toto" et "babar" mais il ne trouve que "toto". Donc, ce code ne marche pas.

Pourriez-vous m'aider ?

Votre aide m'est toujours la bienvenue.

Bernie12

Bernie12
timide
timide

Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil

Revenir en haut Aller en bas

Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par cad00 le Sam 21 Nov 2015 - 4:04

Bonjour,

En lisant ton problème, j'ai essayé de faire une macro qui va chercher des valeurs de texte dans des dessins catia, elle n'est pas encore bien pratique mais chez moi ça marche bien.
Avant de lancer la macro, il faudra ouvrir une mise en plan (c'est juste pour avoir le chemin du répertoire dans lequel ce trouve les mises en plan à traiter, de plus je ne traite que les texte qui ne sont pas dans le fond de plan (je modifierais plus tard).
Ensuite pour cet exemple je ne cherche que les texte 316L et 304L, à toi de changer les valeurs.
Si j'ai un peu de temps j'essaierais de modifier la macro en incluant le choix du répertoire (sans ouvrir une mise en plan) et la possibilité de changer le texte recherché à partir d'une boite de dialogue, tu lances le code avec la fonction "ExploreFolder" voila mon code :

Code:
Public oCountVieuw As Integer
Public oMaVieuw As DrawingView
Public oCountNote As Integer
Public oText As DrawingText
Public j As Integer
Public k As Integer
Public folderDraft
Public DirectoryDraft
Public CheckDraft
Public CheckDrafts
Public LigneExcel As Integer
Public CheminFolder As String
Public ObjetFolder As FileSystemObject
'
Public Property Get oDrawDocument() As DrawingDocument
Set oDrawDocument = CATIA.ActiveDocument
End Property
'
Public Property Get oAcView() As DrawingViews
Set oAcView = oCalque.Views
End Property
'
Public Property Get oCalque() As DrawingSheet
Set oCalque = oDrawDocument.Sheets.ActiveSheet
End Property
'
Public Property Get oMaNote() As DrawingTexts
Set oMaNote = oCalque.Views.ActiveView.Texts
End Property
'
Public Property Get CheminDirectory() As String
CheminDirectory = oDrawDocument.Path
End Property
'
Public Sub ExploreFolder()
Set ObjetFolder = New FileSystemObject
Set DirectoryDraft = ObjetFolder.GetFolder(CheminDirectory) 'chemin du plan ouvert
Set CheckDrafts = DirectoryDraft.Files
oDrawDocument.Close
'
LigneExcel = 1
'
Set Appli = Excel.Application
Appli.Workbooks.Add.Activate
Excel.Workbooks.Application.Visible = True
LigneExcel = 1
'
Dim catDOC As Document
For Each CheckDraft In CheckDrafts
   If (InStr(1, CheckDraft.Name, "CATDrawing") > 0) Then
        With ActiveWorkbook.Worksheets("Feuil1")
        .Cells(LigneExcel, 1) = CheckDraft.Name
        Set catDOC = CATIA.Documents.Open(CheckDraft.Path)
        oParam  'renvoi sur la fonction de recherche de texte
        LigneExcel = LigneExcel + 1
        End With
        catDOC.Close
   End If
Next
End Sub
'
Public Function oParam()
NomDocCatia = oDrawDocument.Name
If (InStr(1, NomDocCatia, "CATDrawing") > 0) Then
    CheminFolder = oDrawDocument.Path
    oCountVieuw = oAcView.Count
        For k = 1 To oCountVieuw
            Set oMaVieuw = oAcView.Item(k)
                If oMaVieuw.Name = "Background View" Then
                Else
                    oAcView.Item(k).Activate
                    oCountNote = oMaNote.Count
                        For j = 1 To oCountNote
                            Set oText = oMaNote.Item(j)
                                If LCase(oText.Text) = "316l" Then
                                        With ActiveWorkbook.Worksheets("Feuil1")
                                        .Cells(LigneExcel, j + 1) = oText.Text
                                        End With
                                End If
                                If LCase(oText.Text) = "304l" Then
                                         With ActiveWorkbook.Worksheets("Feuil1")
                                        .Cells(LigneExcel, j + 1) = oText.Text
                                        End With
                                End If
                        Next j
                End If
        Next
End If
End Function

cad00
actif
actif

Messages : 30
Date d'inscription : 17/03/2015
Localisation : PACA

Revenir en haut Aller en bas

Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

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