Remplacer forme visio depuis Excel

Bonjour à tous,

Actuellement je réalise un code vba qui me permets de remplacer des formes visio par des nouvelles formes présentes dans une bibliothèque ".vssx". Lorsque j'intégre le code suivant directement dans mon fichier visio tout fonctionne parfaitement :

Public Sub vso()

Dim MonApplication As Object
Dim MonFichier As String
Dim shpObjs As Visio.Shapes
Dim shpObj As Visio.Shape
Dim celObj As Visio.Cell
Dim PagObj  As Visio.Page
Dim visShp As Visio.Shape
Dim visShps As Visio.Shapes
Dim a As String

'Set MonApplication = CreateObject("Shell.Application")
'
'MonFichier = "C:\adresse\Test.vsd" 'choix du fichier
'MonApplication.Open (MonFichier)

For Each PagObj In ActiveDocument.Pages
    For Each visShp In PagObj.Shapes
        a = Split(visShp, ".")(0)

        If (InStr(1, "sensor", a, vbTextCompare) <> 0) Then
            visShp.ReplaceShape Application.Documents.Item("C:\adresse\v9.vssx").Masters.ItemU("ANA Sens")
        End If

    Next visShp
Next PagObj

End Sub
or j'aimerais pouvoir changer ces formes depuis Excel. J'ai donc changé un petit peu le code afin de pouvoir l'intégrer directement à Excel et la j'ai une erreur "propriété ou méthode non gérée par cet objet". Voici le code pour Excel :

voici le code excel :

Sub replaceobject()

Dim shpObjs As Visio.Shapes
Dim shpObj As Visio.Shape
Dim celObj As Visio.Cell
Dim PagObj  As Visio.Page
Dim visShp As Visio.Shape
Dim visShps As Visio.Shapes
Dim a As String

Set MonApplication = CreateObject("Visio.Application")
Set MonFichier = MonApplication.Documents.Open(UserForm2.TextBox1.Value)

For Each PagObj In MonFichier.Pages
    For Each visShp In PagObj.Shapes
        a = Split(visShp, ".")(0)

        If (InStr(1, "sensor", a, vbTextCompare) <> 0) Then
            visShp.ReplaceShape Application.Documents.Item("C:\adresse\v9.vssx").Masters.ItemU("ANA Sens")
        End if
    Next visShp
Next PagObj
End sub

Savez vous ou est mon erreur ?

Bonjour, piloter un autre programme à partir d'Excel c'est toujours galère.

Puisque la macro fonctionne dans Visio ; n'est-il pas plus simple d'utiliser excel juste pour l'ouverture du fichier visio et le lancement de la macro dans visio ?

Bonjour Xmenpl,

Merci pour votre réponse. En effet cela serait plus facile, mais le fichier visio est un document de travail dans lequel je n'ai pas le droit d'ajouter des macros :(

Mais si d'autres solutions existent je suis preneur

J'ai trouvé !!! C'était la ligne suivante qui fonctionne bien sous visio mais pas sur excel :

visShp.ReplaceShape Application.Documents.Item("C:\adresse\v9.vssx").Masters.ItemU("ANA Sens")

Dans mon cas étant donné que je fais déjà :

Set MonApplication = CreateObject("Visio.Application")

il fallait juste mettre :

visShp.ReplaceShape MonApplication.Documents.Item("C:\adresse\v9.vssx").Masters.ItemU("ANA Sens")

:) :) :)

Rechercher des sujets similaires à "remplacer forme visio"