none
Visio : Actualiser le lien hypertexte en vba RRS feed

  • Question

  • Bonjour à tous

    J'essaie de faire la carte d'un site Web avec Visio 2010.
    Il y a des "cases" qui contiennent le texte :
    "Pas encore disponible"
    A la main on fait un clic droit et on choisit
    'Développer le lien hypertexte' ou 'Actualiser le lien hypertexte'

    Comment le faire en vba ?
    On sait trouver les formes qui présentent ce libellé, mais je n'ai pas trouvé comment actualiser ces formes en vba.

    Merci d'avance.


    A+


    vendredi 21 octobre 2011 18:50

Réponses

  • La fonction de création de site web de Visio est réalisée par un addon dont le nom universel (nom indépendant de la langue est) "VisWeb".
    Il faut donc l'appeler avec la commande qui va bien. Si tu connais la commande pas de problème sinon tu peux t'aider du contenu de la feuille de propriété des formes générées par l'addon. Clic-droit sur une forme et "Afficher la ShapeSheet" (il faut que l'onglet Développeur soit affiché - Fichier=>Options=>Personnaliser le ruban). Dans la ShapeSheet tu trouveras une section "Actions" qui comporte les actions du menu contextuel. Dans la cellule Action tu trouveras la syntaxe de la commande d'actualisation "=RUNADDONWARGS("VisWeb","/cmd=refresh")", la commande est donc /cmd=refresh.
    Il suffit donc de l'appeler en VBA par exemple avec la procédure suivante :
    Public Sub Refresh()
    Dim visWebAddon As Visio.Addon
    Dim vsoSelection As Selection
    ' récupération de l'addon dans la liste des Addons dipsonibles
    Set visWebAddon = ThisDocument.Application.Addons("VisWeb")
    ' récupération de la sélection
    Set vsoSelection = ThisDocument.Application.ActiveWindow.Selection
    ' on vérifie qu'un élément est sélectionné (on pourrait vérifier qu'il s'agit bien d'une forme sur laquelle la commande est valide)
    If vsoSelection.Count = 1 Then
    'Appel de l'addon avec la commande adéquate.
    visWebAddon.Run ("/cmd=refresh")
    End If
    End Sub.
    Voila.

    Si cette réponse résout votre problème, merci de la noter comme une réponse. Si elle vous a aidé, merci de la noter comme utile. Et n'oubliez pas www.visualblog.fr 
    Michel LAPLANE (MVP Visio)
    dimanche 23 octobre 2011 14:21
  • Cela dépend de l'addin et de la commande appelée.

    Dans le cas de la commande refresh, c'est une action non modale qui est appelée donc ton code continue de s'exécuter aprés le lancement ce qui perturbe le debugger car Visio doit à la fois exécuter le code de l'addin et le vba.

    Pour t'en convaincre met une messagebox aprés l'appel elle s'affichera.

    Tu peux aussi exécuter une commande modale comme "/cmd = collapse" pour laquelle le point d'arrêt sera respecté.

    Bonne continuation


    Si cette réponse résout votre problème, merci de la noter comme une réponse. Si elle vous a aidé, merci de voter pour l'indiquer comme utile. Et n'oubliez pas www.visualblog.fr
    Michel LAPLANE (MVP Visio)
    lundi 24 octobre 2011 05:25

Toutes les réponses

  • La fonction de création de site web de Visio est réalisée par un addon dont le nom universel (nom indépendant de la langue est) "VisWeb".
    Il faut donc l'appeler avec la commande qui va bien. Si tu connais la commande pas de problème sinon tu peux t'aider du contenu de la feuille de propriété des formes générées par l'addon. Clic-droit sur une forme et "Afficher la ShapeSheet" (il faut que l'onglet Développeur soit affiché - Fichier=>Options=>Personnaliser le ruban). Dans la ShapeSheet tu trouveras une section "Actions" qui comporte les actions du menu contextuel. Dans la cellule Action tu trouveras la syntaxe de la commande d'actualisation "=RUNADDONWARGS("VisWeb","/cmd=refresh")", la commande est donc /cmd=refresh.
    Il suffit donc de l'appeler en VBA par exemple avec la procédure suivante :
    Public Sub Refresh()
    Dim visWebAddon As Visio.Addon
    Dim vsoSelection As Selection
    ' récupération de l'addon dans la liste des Addons dipsonibles
    Set visWebAddon = ThisDocument.Application.Addons("VisWeb")
    ' récupération de la sélection
    Set vsoSelection = ThisDocument.Application.ActiveWindow.Selection
    ' on vérifie qu'un élément est sélectionné (on pourrait vérifier qu'il s'agit bien d'une forme sur laquelle la commande est valide)
    If vsoSelection.Count = 1 Then
    'Appel de l'addon avec la commande adéquate.
    visWebAddon.Run ("/cmd=refresh")
    End If
    End Sub.
    Voila.

    Si cette réponse résout votre problème, merci de la noter comme une réponse. Si elle vous a aidé, merci de la noter comme utile. Et n'oubliez pas www.visualblog.fr 
    Michel LAPLANE (MVP Visio)
    dimanche 23 octobre 2011 14:21
  • Bonjour Michel

    Merci pour cette réponse détaillée et surtout les explications qui permettent de mettre en oeuvre d'autres fonctions.

    Il y a quand même un truc qui me chagrine, c'est que l'exécution vba s'arrête comme si le Run était suivi d'un End.
    Pour en avoir le coeur net, j'ai mis un point d'arrêt sur le end if qui suit, on n'y passe jamais.


    A+

    dimanche 23 octobre 2011 16:33
  • Cela dépend de l'addin et de la commande appelée.

    Dans le cas de la commande refresh, c'est une action non modale qui est appelée donc ton code continue de s'exécuter aprés le lancement ce qui perturbe le debugger car Visio doit à la fois exécuter le code de l'addin et le vba.

    Pour t'en convaincre met une messagebox aprés l'appel elle s'affichera.

    Tu peux aussi exécuter une commande modale comme "/cmd = collapse" pour laquelle le point d'arrêt sera respecté.

    Bonne continuation


    Si cette réponse résout votre problème, merci de la noter comme une réponse. Si elle vous a aidé, merci de voter pour l'indiquer comme utile. Et n'oubliez pas www.visualblog.fr
    Michel LAPLANE (MVP Visio)
    lundi 24 octobre 2011 05:25
  • Bonjour

    Cela dépend de l'addin et de la commande appelée.

    Dans le cas de la commande refresh, c'est une action non modale qui est appelée donc ton code continue de s'exécuter aprés le lancement ce qui perturbe le debugger car Visio doit à la fois exécuter le code de l'addin et le vba.

    Pour t'en convaincre met une messagebox aprés l'appel elle s'affichera.

    Exact. Et dans ce cas le point d'arrêt sur le end if est bien respecté.
    Reste à vérifier que le contrôle revient au Sub appelant.
    J'ai donc bien avancé sur le sujet.
    Merci.


    A+

    lundi 24 octobre 2011 06:14