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 :

Récupérer lien hypertexte du presse-papier en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité de passage
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2025
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2025
    Messages : 5
    Par défaut Récupérer lien hypertexte du presse-papier en VBA
    Bonjour,

    J'ai dans le presse-papier la copie d'une page internet, donc avec du texte, des images, mais surtout, ce qui m'intéresse, des liens hypertexte.

    Je cherche la solution pour récupérer uniquement les liens hypertexte de ce presse-papier. J'ai fait pas mal de recherches, mais à chaque fois je tombe sur l'instruction Gettext de GetFromClipboard qui me retourne que le texte et aucun le lien.

    Exemple simple :
    Si j'ai copié sur la page internet ceci :
    Cliquer ICI pour accéder au site.

    Si je colle directement le presse-papier sur une feuille Excel, je récupère bien "Cliquer ICI pour accéder au site." dans une cellule mais avec le lien hypertexte sur le mot ICI.
    Par contre, si je place dans une cellule le contenu de Gettext, je n'ai pas ce lien...

    Donc le presse papier a bien mémorisé le lien hypertexte, mais je ne trouve pas de code VBA pour le récupérer.

    Bien sûr, je pourrai d'abord coller le presse-papier directement sur une feuille Excel, puis ensuite rechercher tous les liens sur cette feuille en VBA. Mais le souci, c'est que les pages internet que je colle sont lourdes, il y a beaucoup d'images, et de données. Donc quand je colle directement sous Excel, c'est très long...

    Qui aurait une idée ???

    Merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 537
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 537
    Par défaut
    Hello,

    Manipuler le presse papier en VBA, c'est se battre contre des moulins à vent.

    Lorsque tu colle le contenu du presse papier dans un editeur de texte basique (Notepad par exemple), les liens hypertexte sont-ils visible ?
    Si oui, tu peux les récupérer via une expression régulière:
    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
    Dim clipboard As New MSForms.DataObject
    clipboard.GetFromClipboard
     
    Dim htmlContent As String
    htmlContent = clipboard.GetText
     
    Dim regex As Object, matches As Object, i As Integer
    Set regex = CreateObject("VBScript.RegExp")
    regex.Pattern = "href\s*=\s*[""']([^""']+)[""']"
    regex.IgnoreCase = True
    regex.Global = True
     
    Set matches = regex.Execute(htmlContent)
     
    For i = 0 To matches.Count - 1
        Debug.Print matches(i).SubMatches(0)
    Next i
    Dans le cas contraire,
    on peut automatiser le navigateur internet via CDP Framework (et donc se passer du presse papier):
    https://www.developpez.net/forums/d2...r-vba-excel/#3

    Selon la structure de la page web, on peut envisager une solution Power Query.

    Sinon, il faudra se tourner vers d'autres outils capable de faire du web-scraping (Power Automate par exemple).

  3. #3
    Invité de passage
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2025
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2025
    Messages : 5
    Par défaut Lien hypertexte dans le presse-papier
    Bonjour Deedolith,

    Merci beaucoup pour ta réponse. J'ai testé. Dans un premier temps, j'avais une erreur sur la 1ère ligne (MSForms.DataObject), car il fallait activer la référence MicrosoftForms 2.0 et elle n'était pas dans la liste, mais en cherchant, j'ai trouvé qu'il fallait ajouter manuellement la MF20.DLL du dossier Windows\System32. Bon maintenant le code s'exécute sans erreur.

    Par contre, ce code ne me retourne rien. Dans les pages que je copie, le texte associé au lien ne correspond pas au lien lui-même. Par exemple sur le site si je copie "Cliquer ICI pour accéder au site", le texte du lien est "ICI" et le lien est par exemple https://www.google.fr

    J'ai donc testé avec le texte identique au lien. Ça tombe bien, car dans ton message, en dessous du code, j'ai copié ce texte :

    Dans le cas contraire,
    on peut automatiser le navigateur internet via CDP Framework (et donc se passer du presse papier):
    https://www.developpez.net/forums/d2...r-vba-excel/#3

    Selon la structure de la page web, on peut envisager une solution Power Query.

    Sinon, il faudra se tourner vers d'autres outils capable de faire du web-scraping (Power Automate par exemple).



    Donc il y a bien un lien avec le texte identique (https://www.developpez.net/forums/d2...r-vba-excel/#3)

    Mais en exécutant le code, toujours aucun affichage.
    En déboguant, dans la boucle For i, le "matches.Count" retourne 0, donc il ne trouve rien...

    Je confirme que c'est la galère d'exploiter le contenu du presse-papier en VBA.

    Je vais regarder du côté de Power Query ou Power Automate au cas où.

    Encore Merci d'avoir pris le temps de me réponse.

  4. #4
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 207
    Par défaut return link in code
    Bonjour

    c'est tout a fait normal que tu n'obtienne rien avec la solution de deedolith

    le data object contient ce que tu a sélectionné a main levée (selon tes dires) sauf qu'il ne contient pas le code html mais le INNERTEXT de ce que tu a sélectionné

    c'est a dire le texte brut sans format et sans balisage

    a moins que tu ai fait click droit et non pas copier mais copier le lien

    pour faire ce genre de chose il y a plusieurs astuces possible

    mais dans tout les cas on ne passe pas par le dataobject .gettext

    la meilleure solution vba que je connaisse c'est encore le transfert temporaire dans webbrowser

    qui quand on colle on colle le OUTERHTML

    PARTI DE LA TU SCRUTE LE DOCUMENT avec les librairies (si encore dispos de IE) de l'arborescence html
    le webbrowser est dans un userform( pas obligé que le userform soit affiché)
    mais avec les pages html ou php d'aujourd'hui c'est pas gagne

    ou alors un paste sur une feuille temporaire (la aussi tu aura le html et donc la possibilité de récupérer les hyperlinks

    sinon après il y a power query mais là on est hors de mon domaine

  5. #5
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 324
    Par défaut
    Bonjour

    un exemple de code Power Query pour extraire les liens contenus dans cette page.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let
        Source = Web.BrowserContents("https://www.developpez.net/forums/d2178235/logiciels/microsoft-office/excel/macros-vba-excel/recuperer-lien-hypertexte-presse-papier-vba/"),
        #"Table extraite à partir de code Html" = Html.Table(Source, {{"Column1", "BODY"}}),
        #"Fractionner la colonne par délimiteur" = Table.ExpandListColumn(Table.TransformColumns(#"Table extraite à partir de code Html", {{"Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
        #"Fractionner la colonne par délimiteur1" = Table.ExpandListColumn(Table.TransformColumns(#"Fractionner la colonne par délimiteur", {{"Column1", Splitter.SplitTextByDelimiter("#(cr)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
        #"Fractionner la colonne par délimiteur2" = Table.ExpandListColumn(Table.TransformColumns(#"Fractionner la colonne par délimiteur1", {{"Column1", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
        #"Lignes filtrées" = Table.SelectRows(#"Fractionner la colonne par délimiteur2", each Text.Contains([Column1], "www") or Text.Contains([Column1], "http"))
    in
        #"Lignes filtrées"
    ce code peut sembler long mais il est obtenu en utilisant uniquement l'interface utilisateur (aucun codage en dur)

    A partir du Web / Texte
    Trois étapes successives "Fractionner la colonne" : par espace, puis par #(cr) et enfin par #(lf) (choisir dans les options les caractères spéciaux pour ces deux derniers - et à chaque fois, fractionner en lignes et non en colonnes)
    il ne reste plus qu'à filtrer les lignes contenant http ou www.

    Non testé mais je pense qu'on pourrait transformer ce code en fonction pour l'exécuter sur plusieurs url simultanément

    Stéphane

  6. #6
    Invité de passage
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2025
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2025
    Messages : 5
    Par défaut Suite
    Bonjour,

    @patmeziere : Merci pour ton message. Concernant la solution webbrowser, si j'ai bien compris je fais un userform avec un webbrowser ?
    Comment insérer un webbrowser dans un userform ? J'avoue que je ne connais pas.

    La solution de passer par une feuille temporaire n'est pas idéale car le site que je copie contient beaucoup de photos, animations, etc, donc c'est hyper long en collant sur une feuille.
    Encore merci d'avoir pris le temps de me répondre.



    @Raccourcix : Merci également pour ta réponse. Il faut que je me mette à Power Query pour tester.

    À bientôt.

Discussions similaires

  1. Vider le presse papier en VBA
    Par knecmotet dans le forum Général VBA
    Réponses: 17
    Dernier message: 05/03/2022, 20h50
  2. [AC-2010] lien hypertexte dans presse papier.
    Par fab.85 dans le forum IHM
    Réponses: 0
    Dernier message: 01/05/2015, 10h11
  3. [XL-2003] Nettoyage de la RAM et presse-papier avec VBA
    Par Romanuche dans le forum Excel
    Réponses: 4
    Dernier message: 03/08/2009, 18h27
  4. [XL-2003] Lien hypertexte dans Mail généré via VBA excel
    Par jerem7w dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/06/2009, 16h12
  5. Réponses: 12
    Dernier message: 10/06/2006, 19h07

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