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

Macros et VBA Excel Discussion :

Transformer du texte en un lien hypertexte [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Rédacteur
    Inscrit en
    Octobre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur

    Informations forums :
    Inscription : Octobre 2019
    Messages : 11
    Par défaut Transformer du texte en un lien hypertexte
    Bonjour,

    Voici mon besoin…
    J’ai un tableau Excel de clients, dans lequel je cherche à créer des liens hypertexte pour afficher leur compte de notre base de données (application web via un navigateur).
    Je dois créer un lien hypertexte en concaténant les données d’une ou plusieurs cellules.

    Je me sers donc de la fonction CONCATENER, ce qui donne ce genre de chose :
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =CONCATENER("=LIEN_HYPERTEXTE("""&"http://lien/"&B3&"suite du lien""" &";"&B3&")")
    B3 contient un numéro de compte client. Cette donnée étant contenue dans l’URL, il me faut la récupérer dans mon tableau.
    Jusque-là, pas de souci. Sauf que le but est de supprimer les cellules auxquelles je fais référence dans les liens (B3 dans l’exemple) ; le lien ne doit donc plus être une concaténation, mais le lien en « dur » qui affichera ce que contenait B3.

    J’ai donc tenté de copier la formule en ne retenant que les valeurs et ça marche… presque. La valeur de la formule est bien copiée dans la cellule de réception, mais celle-ci n’est pas considérée comme un lien. Elle s’affiche comme du texte non cliquable de cette façon :
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =LIEN_HYPERTEXTE("http://lien/6301292/suite du lien";6301292)
    Alors que je voudrais un lien hypertexte qui s’affiche ainsi :
    6301292
    Pour qu’elle soit considérée comme un lien, il faut que je mette la cellule en mode modification (F2) et que je valide « tout simplement » pour que la cellule soit bien formatée.

    Bon, si je n’avais qu’une cellule, ce serait vite fait bien fait, mais j’en ai 40.000, et là ça devient bien lourd. J’ai cherché sur le net, mais je n’ai pas trouvé de fonction qui permet de formater un texte en lien hypertexte.

    J’ai trouvé un palliatif qui est le suivant : je sélectionne toute la colonne et tente de convertir les données ; la fenêtre « Assistant conversion » s’affiche alors et il me suffit de cliquer sur le bouton « Terminer » pour que les données soient converties… Mais dans ce cas, le contenu de la première cellule est recopié dans toutes les autres cellules ! Mais j’ai trouvé une solution de contournement : il suffit d’annuler la dernière fonction (Contrôle + Z) pour que les cellules affichent les bonnes références (ne me demandez pas pourquoi…). Fort de cette trouvaille, j’ai tenté avec l’enregistreur de macro de récupérer le code, mais… ça ne fonctionne pas.

    La seule solution que j’ai trouvée est de simuler l’appui des touches avec SendKeys, mais comme ce n’est pas première fois que je suis confronté au problème, je me demandais s’il n’y avait pas une solution plus propre.
    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
    17
    18
    19
    Sub Hypertexte()
    'Mettre au format "lien hypertexte"
    'Utilisation de la simulation d'appuie de touches
    'Sélectionner la feuille
    Worksheets("EtatSoldes").Activate
    'Sélectionner la cellule de départ
    Range("y2").Select
    'Etendre la sélection à toute la colonne
    Range(Selection, Selection.End(xlDown)).Select
    'Simulation des touches
    SendKeys "%"
    SendKeys "é"
    SendKeys "o"
    SendKeys "t"
    ''Simulation des touches "Contrôle + Z"
    'pour annuler la dernière fonction, c'est la seule façon
    'pour que ça marche
    SendKeys "^z"
    End Sub

  2. #2
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 166
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Je dois créer un lien hypertexte en concaténant les données d’une ou plusieurs cellules.

    Je me sers donc de la fonction CONCATENER, ce qui donne ce genre de chose :
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =CONCATENER("=LIEN_HYPERTEXTE("""&"http://lien/"&B3&"suite du lien""" &";"&B3&")")
    ça me semble compliqué, j'aurais plutôt mis la formule

    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =LIEN_HYPERTEXTE("http://lien/"&B3&"suite du lien";B3)

  3. #3
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 166
    Billets dans le blog
    2
    Par défaut
    Re,

    Je crois que j'ai enfin compris
    La question est, si au bout on est contraint de passer par une macro, pourquoi ne pas faire une macro qui crée directement les liens hypertexte ?

    bon, sinon pour répondre directement, tu peux essayer une macro du type (en ayant sélectionné tes cellules)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub test()    
    Selection.FormulaLocal = Selection.Value
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Rédacteur
    Inscrit en
    Octobre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur

    Informations forums :
    Inscription : Octobre 2019
    Messages : 11
    Par défaut
    Merci tototiti2008 mais... ça ne fonctionne pas.
    En effet, comme dit plus haut, le contenu de la première cellule est recopié dans toutes les autres cellules ! Et là, ma solution de contournement ne fonctionne pas : Impossible d’annuler la dernière action lors de l'exécution d'une macro .

    Nom : Tableau Excel.jpg
Affichages : 3663
Taille : 195,0 Ko

  5. #5
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 166
    Billets dans le blog
    2
    Par défaut
    Re,

    Le soucis vient du tableau structuré (insertion-tableau) qui recopie la formule par défaut

    à tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub ConvLien()
    Dim C As Range
        Application.AutoCorrect.AutoFillFormulasInLists = False
        With ActiveSheet.ListObjects(1).ListColumns("Colonne2").DataBodyRange
            For Each C In .Cells
                C.FormulaLocal = C.Value
            Next
        End With
        Application.AutoCorrect.AutoFillFormulasInLists = True
    End Sub

  6. #6
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 166
    Billets dans le blog
    2
    Par défaut
    Re,

    Sinon, l'approche création de lien directe
    Fichiers attachés Fichiers attachés

  7. #7
    Membre averti
    Homme Profil pro
    Rédacteur
    Inscrit en
    Octobre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur

    Informations forums :
    Inscription : Octobre 2019
    Messages : 11
    Par défaut
    J'ai regardé le fichier joint, et ta macro me plait bien !

    Mais là, c'est le WE et je suis chez moi, je verrai ça en détail lundi et je te dis.

    Merci encore et bon week-end !

  8. #8
    Membre averti
    Homme Profil pro
    Rédacteur
    Inscrit en
    Octobre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur

    Informations forums :
    Inscription : Octobre 2019
    Messages : 11
    Par défaut
    La macro pour créer directement son lien hypertexte est exactement ce qu'il me faut.

    Une petite réponse à :
    "ça me semble compliqué, j'aurais plutôt mis la formule"

    Effectivement, je ne vois pas pourquoi j'ai utilisé la fonction concaténer, j'étais sûrement parti sur cette base au début de mes réflexions et y suis resté sans chercher à optimiser, et c'est vrai que ça complique inutilement.

    Bref, j'ai une solution à mon problème, alors un grand merci à tototiti2008 !

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 168
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En effet, comme dit plus haut, le contenu de la première cellule est recopié dans toutes les autres cellules ! Et là, ma solution de contournement ne fonctionne pas : Impossible d’annuler la dernière action lors de l'exécution d'une macro
    Je sais que cette discussion est clôturée mais cette réponse m'a interpellée.

    L'utilisation de la fonction LIEN_HYPERTEXTE permet justement de se passer d'un code VBA en ayant une liaison dynamique et le fait de l'intégrer dans un tableau structuré ajoute encore plus ce côté dynamique.

    Lorsque je dispense mes formations Excel ou VBA, j'ai un classeur avec des liens qui permettent aux personnes qui ont suivi la formation de pouvoir consulter notamment les tutoriels présents sur développez.com
    Comme cette liste peut grandir en fonction de nouveaux tutoriels qui s'ajoutent au fil du temps, j'ai juste à remplir les éléments dans les cellules concernées pour qu'automatiquement le lien devienne prêt à être utilisé et ce sans une ligne de code VBA

    Dans l'illustration ci-dessous, la formule se trouve en colonne C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NBVAL(T_Tutoriel[@[Titre]:[URL]])=2;LIEN_HYPERTEXTE([@URL];[@Titre] & " - [" & [@Auteur] & "]");"")
    Je cache les colonnes de D à F afin que les personnes n'aient en visuel que les colonnes A à C et puissent cliquer pour aller sur la page du tutoriel
    Je fais la même chose pour certaines contributions et billets de mon blog

    Nom : 200110 dvp Lien_Hypertexte.png
Affichages : 3499
Taille : 87,4 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre averti
    Homme Profil pro
    Rédacteur
    Inscrit en
    Octobre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur

    Informations forums :
    Inscription : Octobre 2019
    Messages : 11
    Par défaut

    Merci pour ce complément d'information.

    J'apprécie l'utilisation de fonctions moi aussi, ça me permet de ne pas trop utiliser le VBA que je ne maîtrise pas, mais... il m'en faut quand même un peu, surtout dans ce cas.

    J'avais aussi pensé à cacher les colonnes, mais dans ce cas précis je ne veux pas le faire surtout pour un problème de place :

    1. 45.000 lignes, ça commence à faire et j'ai 7 liens à créer, donc 7 colonnes à doubler,
    2. Si pour commencer j'aurai à traiter un classeur par semaine, le but final est de le faire quotidiennement et chaque fichier sera historisé,
    3. Chaque classeur sera scindé en 6,
    4. Des statistiques (au moins annuelles) sont aussi envisagées, il va donc falloir que je sauvegardes certaines données tous les jours dans un fichier destinée qu'à ça.


    Et je crains que certains utilisateurs n'arrivent à afficher les dites colonnes sans le vouloir et mettre le bazard

    Mais l'idée est bonne et suffisante dans bien des cas, merci de le rappeler.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 11/09/2017, 23h45
  2. Extraction de la partie texte d'un lien hypertexte
    Par edsaar dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/03/2011, 09h17
  3. [XL-2003] Excel et ouvrir des photos avec un lien hypertexte
    Par Alain53 dans le forum Excel
    Réponses: 2
    Dernier message: 22/03/2010, 10h10
  4. taille du texte d'un lien hypertexte
    Par Mathieu72 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/07/2007, 18h17
  5. Récupération du texte d'un lien hypertext
    Par -=ET=- dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/05/2005, 17h08

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