Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
3 participants
Page 1 sur 1
Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
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.
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 Ven 30 Oct 2015 - 16:05, édité 1 fois
Bernie12- timide
- Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil
Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
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/
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
- Messages : 33
Date d'inscription : 17/03/2015
Localisation : PACA
Dans un CATDrawing ?
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.
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
- Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil
Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
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.
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 - 9:09, édité 1 fois
mike688- actif
- Messages : 257
Date d'inscription : 23/12/2009
Age : 43
Localisation : Portieux (88)
Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
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
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
mike688- actif
- Messages : 257
Date d'inscription : 23/12/2009
Age : 43
Localisation : Portieux (88)
Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
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.
Merci encore.
J'espère que tous les utilisateurs de CATIA V5 seront satisfaits de ta réponse.
Super ! Ta procédure marche très bien. En inspirant de ta procédure, mon code marche et il trouve les "toto". Merci beaucoup.
Merci encore.
J'espère que tous les utilisateurs de CATIA V5 seront satisfaits de ta réponse.
Bernie12- timide
- Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil
Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
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.
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.
mike688- actif
- Messages : 257
Date d'inscription : 23/12/2009
Age : 43
Localisation : Portieux (88)
Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
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
- Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil
Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
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 .....
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 .....
mike688- actif
- Messages : 257
Date d'inscription : 23/12/2009
Age : 43
Localisation : Portieux (88)
A la recherche de deux textes
Bonjour tout le monde,
Je suis maintenant à la recherche de deux termes : "Toto" et "Babar". J'ai maintenant tenté le code suivant :
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
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
- Messages : 12
Date d'inscription : 30/10/2015
Localisation : Argenteuil
Re: Recherche d'une chaîne de caractère (~un texte) dans un CATDrawing
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 :
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
- Messages : 33
Date d'inscription : 17/03/2015
Localisation : PACA
Sujets similaires
» Texte modifiable dans l’instance
» Macro Changement de la couleur d'un Part dans un Product suivant une recherche du nom dans un tableau excel
» Récupérer le lien d'une part dans un CATDrawing
» Modifier la police d'un tableau dans un CATDrawing
» Rechercher un texte dans une vue active
» Macro Changement de la couleur d'un Part dans un Product suivant une recherche du nom dans un tableau excel
» Récupérer le lien d'une part dans un CATDrawing
» Modifier la police d'un tableau dans un CATDrawing
» Rechercher un texte dans une vue active
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum