IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Retrouver des liens hypertextes dynamiques


Sujet :

Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 46
    Par défaut Retrouver des liens hypertextes dynamiques
    Bonjour,

    Je n'arrive pas, dans une macro vba, à retrouver tous mes liens hypertextes dans une feuille.
    Pour les liens en dur, aucun problème. En parcourant la liste des liens de la feuille, on retrouve tout. Le problème, c'est quand certaines cellules contiennent un lien hypertexte dynamique, créé par une formule éventuellement assez complexe, avec valeurs conditionnelles qui dépendent de certains paramètres.
    Lorsqu'on parcourt la liste des liens présents sur la feuille, ceux-ci ne sont pas dans la liste.
    Par exemple, si la cellule A1 contient un lien hypertexte dynamique, range("A1").Hyperlinks.count vaut 0, et on ne voit pas le lien.
    Y a-t-il tout de même un moyen de savoir que la cellule contient un lien hypertexte et de récupérer l'adresse ciblée par le lien ?
    Je sèche lamentablement.

    Merci de votre aide !

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Est-ce que tu peux donner un exemple de ces liens ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 46
    Par défaut
    Merci de tenter de m'aider.
    J'ai fait un petit fichier Excel bidon, mais qui reproduit bien mon problème : je peux positionner une option dans la cellule C1, en mettant 1 ou 2. Un lien hypertexte se construit automatiquement dans la cellule C3, en fonction de l'option choisie.
    Le problème est qu'ensuite dans le VBA, je ne peux pas trouver le lien hypertexte en bouclant sur les liens de la feuille. Seuls les liens hypertextes en dur apparaissent, mais pas les liens dynamiques.
    D'où mon problème : comment savoir si la feuille contient des liens dynamiques, et comment les retrouver ?
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Dans l'exemple, tu as deux liens dynamiques, qu'est-ce que tu veux faire ? La liste des liens ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 46
    Par défaut
    Ben non, il n'y a qu'un seul lien dynamique, dans la cellule C3, mais qui peut prendre deux valeurs différentes suivant la valeur contenue en C1. J'ai besoin dans une macro de récupérer tous les liens hypertextes de la feuille, pour les insérer dans un document Word, que ces liens soient statiques ou dynamiques.

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Essaie (il faut ajouter le code pour les liens fixes) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub test()
        Dim Plage As Range, C As Range, ResAdr As String, Ligne As Long
        Set Plage = Sheets("Feuil1").UsedRange
        With Sheets("Feuil2")
            Set C = Plage.Find("HYPERLINK(", , xlFormulas, xlPart)
            If Not C Is Nothing Then
                ResAdr = C.Address
                Do
                    Ligne = Ligne + 1
                    .Cells(Ligne, 1).Value = C.Address
                    .Cells(Ligne, 2).Value = "'" & C.FormulaLocal
                    Set C = Plage.FindNext(C)
                Loop Until C.Address = ResAdr
            End If
        End With
    End Sub

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 46
    Par défaut
    Merci de ton aide.
    Mais ce code ne répond pas vraiment à mon besoin. On peut en effet récupérer les formules qui contiennent une utilisation de la fonction LIEN_HYPERTEXTE, mais ce dont j'ai besoin, c'est finalement du résultat de cette formule, c'est-à-dire vers quoi pointe le lien hypertexte, sachant que la cible est différente selon l'option choisie (il y a un appel à la fonction LIEN_HYPERTEXTE dans la partie "alors" et un autre dans la partie "sinon" du test).
    J'ai simplifié mon petit fichier de test, mais dans la réalité, on peut avoir un lien dynamique créé par une formule qui teste la valeur d'une option :
    si option = 1 -> lien hypertexte 1
    si option = 2 -> lien hypertexte 2
    si option = 3 -> texte en dur
    si option = 4 -> ""

    Par exemple en C3, on peut avoir une formule du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =CHOISIR(C1;LIEN_HYPERTEXTE("c:\tmp\fichier 1.docx";"Fichier 1");LIEN_HYPERTEXTE("c:\tmp\fichier 2.docx";"Fichier 2");"Rien à signaler";"")
    J'ai besoin de retrouver si la cellule contient un lien hypertexte ou non, et si oui vers quoi il pointe.
    Donc si on positionne l'option en C1 à 1, je dois retrouver que ma cellule C3 contient un lien hypertexte et pointe sur le fichier "c:\tmp\fichier 1.docx".
    Si on modifier la valeur de C1 et qu'on la positionne à 2, je dois retrouver que ma cellule C3 contient un lien hypertexte et pointe désormais sur le fichier "c:\tmp\fichier 2.docx".
    Si on modifie le contenu de C1 en le mettant à 3, je dois me rendre compte qu'il n'y a plus de lien hypertexte en C3, mais une simple valeur en dur ("Rien à signaler").
    Etc.


    Je cherche depuis un bout de temps, et je me demande si c'est vraiment possible.

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Je cherche depuis un bout de temps, et je me demande si c'est vraiment possible.
    Ca dépend. Tel quel, je ne peux pas traiter le classeur. Je ne récupère que le second argument de LIEN_HYPERTEXTE (Fichier 1). Si tu ne le spécifie pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI($C$1=1;LIEN_HYPERTEXTE("c:\tmp\fichier 1.docx");LIEN_HYPERTEXTE("c:\tmp\fichier 2.docx"))
    Alors je récupère le fichier et le chemin :

    Remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Ligne, 2).Value = "'" & C.FormulaLocal
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Ligne, 2).Value = Evaluate(C.Formula)

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 46
    Par défaut
    Oui, je comprends bien, et j'avais déjà envisagé cette possibilité.
    Mais cette technique a deux inconvénients :
    - le texte qui s'affiche dans la cellule C3 est directement l'adresse du lien, et non plus un libellé convivial
    - rien ne permet de savoir dans le VBA si le texte récupéré est un lien hypertexte ou un simple texte

    Le fait que la chaîne de caractères "HYPERLINK(" apparaisse dans la formule ne garantit rien (cf. mon post d'hier 20h48, en imaginant que la cellule C1 contienne la valeur 3, le résultat de l'évaluation de la formule est le simple texte "Rien à signaler").

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Dans ce cas, puisque tu en es également là, une fois récupéré le nom convivial, il ne te reste plus qu'à obtenir la sous-chaîne précédant le ";" situé devant. Par contre, si tu as deux fois le même nom convivial dans la même formule, laisse tomber.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 46
    Par défaut
    Oui, ça fait drôlement bidouillage, mais je vais essayer comme ça.

Discussions similaires

  1. importer des liens hypertextes depuis excel
    Par maywen dans le forum Access
    Réponses: 1
    Dernier message: 30/03/2007, 22h52
  2. [regex] Récupérer des liens hypertextes
    Par smarties dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 15/02/2007, 19h12
  3. Utilisation des Liens hypertextes
    Par lolo_bob2 dans le forum Access
    Réponses: 3
    Dernier message: 26/04/2006, 14h10
  4. Liens hypertext dynamique
    Par bianconeri dans le forum Langage
    Réponses: 5
    Dernier message: 03/02/2006, 12h59
  5. Aspect des liens hypertextes
    Par flzox dans le forum Mise en forme
    Réponses: 5
    Dernier message: 04/09/2004, 15h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo