Comment détecter et supprimer une image (ex: signature JPEG) présente dans le cartouche d’un Catia Drawing à l’aide d’une macro VBA ?
Pour détecter et supprimer une image (comme une signature JPEG) dans le cartouche d’un Catia Drawing via une macro VBA, il est crucial de cibler le bon type d’objet et la bonne vue. Votre code initial utilisait Shape, qui est un type générique et ne s’applique pas directement aux images dans un Drawing.
Les images dans un Catia Drawing sont des objets de type DrawingPicture et se trouvent dans la collection Pictures d’une vue spécifique. De plus, les cartouches sont généralement situés dans la ‹ Background View › (Vue de fond de plan).
Voici la procédure et le code VBA corrigé :
-
Cibler la Vue de Fond de Plan (Background View)
Le cartouche de votre dessin est presque toujours situé dans la vue de fond de plan. Il est donc nécessaire d’activer cette vue pour y rechercher l’image. -
Itérer sur la Collection d’Images (
DrawingPictures)
Au lieu deMyview.Shape, vous devez parcourir la collectionMyview.Pictures. Chaque élément de cette collection est un objetDrawingPicture. -
Vérifier le Nom de l’Image et Supprimer
Une fois l’objetDrawingPictureidentifié par son nom (par exemple, « image.1 »), vous pouvez utiliser la méthodeDeletepour le supprimer.
Code VBA corrigé :
Sub SupprimerSignatureCartouche()
Dim oDrwDoc As Document
Dim oDrwSheet As Sheet
Dim oBackgroundView As View
Dim oDrawingPicture As DrawingPicture
Dim sImageName As String
' Nom de l'image à rechercher (à adapter si nécessaire)
sImageName = "image.1" ' Ou "Signature.jpeg" si c'est le nom Catia de l'objet
Set oDrwDoc = CATIA.ActiveDocument
If Not TypeOf oDrwDoc Is DrawingDocument Then
MsgBox "Le document actif n'est pas un Catia Drawing.", vbCritical
Exit Sub
End If
Set oDrwSheet = oDrwDoc.Sheets.ActiveSheet
' Activer la vue de fond de plan où se trouve le cartouche
' Important : Le nom de la vue de fond est généralement "Background View"
' mais peut varier si l'utilisateur l'a renommé.
On Error Resume Next ' Gérer l'erreur si la vue n'existe pas ou n'est pas nommée ainsi
Set oBackgroundView = oDrwSheet.Views.Item("Background View")
On Error GoTo 0
If oBackgroundView Is Nothing Then
MsgBox "La vue 'Background View' n'a pas été trouvée. Vérifiez son nom.", vbExclamation
Exit Sub
End If
oBackgroundView.Activate ' Activer la vue pour y travailler
' Parcourir toutes les images (DrawingPicture) dans la vue de fond
For Each oDrawingPicture In oBackgroundView.Pictures
If oDrawingPicture.Name = sImageName Then
oDrawingPicture.Delete
MsgBox "L'image '" & sImageName & "' a été supprimée du cartouche.", vbInformation
Exit For ' Sortir de la boucle une fois l'image trouvée et supprimée
End If
Next oDrawingPicture
' Réactiver la vue principale si nécessaire (optionnel)
' Set oMainView = oDrwSheet.Views.Item("Main View")
' If Not oMainView Is Nothing Then oMainView.Activate
End Sub
Explications et Bonnes Pratiques :
DrawingPicturevsShape:DrawingPictureest le type d’objet spécifique pour les images bitmap insérées dans un Catia Drawing.Shapeest une classe parente plus générique qui ne contient pas directement les propriétés ou méthodes nécessaires pour manipuler une image de cette manière.oBackgroundView.Pictures: C’est la collection correcte à parcourir pour trouver les images dans une vue.- Nom de l’image: Le nom de l’image dans Catia (
oDrawingPicture.Name) n’est pas toujours le nom du fichier original (ex: « image.1 », « image.2 », etc., ou un nom donné par l’utilisateur). Vérifiez ce nom dans l’arbre de spécification de Catia si vous avez des doutes. - Gestion des erreurs: L’ajout de
On Error Resume NextetOn Error GoTo 0permet de gérer le cas où la « Background View » n’aurait pas le nom attendu ou n’existerait pas, rendant le code plus robuste. - Activation de la vue: Il est recommandé d’activer la vue sur laquelle vous travaillez pour s’assurer que les opérations s’appliquent au bon contexte.
Cette approche garantit une détection et une suppression précises de l’image ciblée dans votre cartouche Catia.