Microsoft 365 extraire plusieurs url (texte) d'une cellule

link93

XLDnaute Occasionnel
Bonjour Le forum,

Je bloque sur l'extraction d'adresses web (type Https:) contenues dans une cellule, je suis tombé sur ce post qui réponds grandement à ma problématique mais qui est limité à 3 adresses. "https://www.excel-downloads.com/threads/extraire-url-dune-phrase-dans-une-cellule.233665/".

Avez-vous des pistes, sur comment augmenter le nombre d'extraction ? J'aurais bien recopier autant de fois que nécessaire la formule dans des cellules adjacentes, mais je n'ai pas saisie la construction et d’après les commentaires cela ne serait pas efficient.

Merci pour votre aide :).
 

patricktoulon

XLDnaute Barbatruc
bonjour
a mon avis tu es parti pour de longues nuits d’insomnie
a moins que tu ai une solution (miracle) pour repérer la fin d'une url ni excel ni vba ne saura deviner
quoi qu'avec vba une requête et récup du status de celle ci ,pourra te donner un meilleur résultat
par formule tu n'aura qu'une solution approximative qui tronquera les urls de temps en temps pour peu que tu utilise des espaces dans tes urls
 

patricktoulon

XLDnaute Barbatruc
re
c'est bien ce que je dit
je ne suis pas sur que dans B ">parametres" fasse partie de l'url
comme je l'ai dis plus haut il y aura certaines fois ou ca va dérailler un peu
et tu n'y peux absolument rien par formule
maintenant par vba puisque la on a un exemple et en plus c'est du code html , je peut te montrer comment les extraire sans fautes ;)
si tu ne veux pas de VBA alors OUBLIE!!! ce projet je ne peux être plus clair ;)
 

link93

XLDnaute Occasionnel
Sinon j'avais trouvé ce code qui fonctionne bien pour pour des urls mais qui ne m'extrait que la 1er et non pas les suivantes :

Function ExtractURL(cel As Range) As String
'extraction URl mais que la 1er de la case

MyRegExPattern = "(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})"

Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")
With RegEx
.Global = True
.IgnoreCase = True
.Pattern = MyRegExPattern
End With

ExtractURL = ""
Set allMatches = RegEx.Execute(cel.Value)
If allMatches.Count <> 0 Then
ExtractURL = allMatches(0)
End If

End Function


Si ca peut orienter sur d'autres options ?
 

patricktoulon

XLDnaute Barbatruc
bonjour chris
même avec powerquery même punition pour les meme raison
comme ca vite fait
mettre ceci dans un module ( j'ai même mis une sub de test )
VB:
Function getURLS(cel As String, x As Long)
    Dim i As Long, mesliens As Object
    With CreateObject("htmlfile")
        .body.innerhtml = cel
        Set mesliens = .getelementsbytagname("A")
        ReDim t(1 To mesliens.Length + 10)
        For i = 0 To mesliens.Length - 1
            t(i + 1) = mesliens(i).href
            If i = x - 1 Then getURLS = mesliens(i).href: Exit For
        Next
    End With
End Function

Sub test()
    MsgBox getURLS([A1].Value, 1)
End Sub
maintenant dans la cellule a coté en "B" tu met cette formule
=getURLS($A1;COLONNE()-1)
et tu etends la formule vers la droite
démonstration
demo5.gif
 

link93

XLDnaute Occasionnel
C'est génial, je récupère toujours plus d'info que ce que j'avais actuellement. Merci bcp Patrick pour votre aide et réactivité et merci également à Chris :), je viens d'apprendre que je pouvais sourcer dans PQ à partir d'une cellule nommée et pas que par des urls :).
 

link93

XLDnaute Occasionnel
J'ai parlé un peu vite, dites moi si je dois changer de topic pour cette nouvelle question. On peut importer des table via Donnée - A partir du web et on y ajouter L’URL du site.

Et il possible de pointer plutôt vers une cellule qui contiendrait cette URL que de l'ajouter manuellement ?
 

chris

XLDnaute Barbatruc
RE

Ce qu'on peut récupérer du net dépend de la structure de la page : les tableaux html, en voie de disparition, permettaient pas mal de choses mais aujourd'hui c'est plus compliqué avec css.

Je crois que Jason permet des choses mais je ne connais pas
 

patricktoulon

XLDnaute Barbatruc
re bonsoir
allons donc tu peux récupérer ce que tu veux même en utilisant que du DOM 1
comme je fait pour les balise "A" tu fait pour les balises "TABLE"
alors avec querytable tu peux mais c'est lourd c'est pas ce qu'excel a fait de mieux
et c'est pas plus compliqué parce qu'il y a du css
il te faut simplement convertir le computedstyle en style c'est tout
en gros le tyle outline en style inline mettre le tout en clipboard et coller
surprise tu a le style avec dans la feuille excel
donnez moi un code avec une table avec style out ou in (line) et je vous montre
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 792
Membres
101 817
dernier inscrit
carvajal