XL 2019 Problème ouverture lien hypertexte

Marilo

XLDnaute Nouveau
Bonjour,

Je souhaite obtenir des données depuis une page internet.
Plusieurs solutions existent, mais j'ai préféré celle-ci ; voici mon code qui va interroger un site, pour 50 lignes différentes:
VB:
Set Obk = Workbooks.Open("https://goh.warstats.net/guilds/units/62?unit=" & Sheets("Données de Base").Cells(perso_base, 1) & "&type=ground")

    Obk.Activate

    'Suppression des liens hypertextes
    Cells.Hyperlinks.Delete

    'Suppression des images et contrôles
    ActiveSheet.Shapes.SelectAll
    Selection.Delete

    Sheets("62").Copy After:=Workbooks("Gestion Ukio.xlsm").Sheets("Global")
    Workbooks("62").Close

Ce code fonctionne très bien et m'importe toutes les données dont j'ai besoin.
Une donnée, toutefois, se trouve sur un autre site que celui-ci, j'ai donc revu mon code ainsi:
Code:
Sub test()

Application.DisplayAlerts = False

    Set Obk = Nothing
    Set Obk = Workbooks.Open("https://swgoh.gg/p/" & sheets("Données de Base").cells(perso, 6) & "/omicrons/")
    'exemple de sheets("Données de Base").cells(perso, 6): 367332181 ou encore 323787692
    
    Obk.Activate

    'Suppression des liens hypertextes
    Cells.Hyperlinks.Delete

    'Suppression des images et contrôles
    ActiveSheet.Shapes.SelectAll
    Selection.Delete

    Sheets("swgoh").Copy After:=Workbooks("Gestion Ukio.xlsm").Sheets("Global")
    Workbooks("swgoh.gg").Close

Application.DisplayAlerts = True

End Sub

Les pages existent, on peut y accéder directement depuis n'importe quel navigateur. Sauf que, très souvent, j'ai une erreur 1004 qui apparait, m'indiquant qu'Excel ne peut pas accéder au fichier pour les raisons suivantes:
- Le nom du fichier ou le chemin d'accès n'existe pas,
- Le fichier est actuellement utilisé par un autre programme,
- Le classeur que j'essaye d'enregistrer porte le même nom qu'un autre classeur déjà ouvert.

Le chemin d'accès fonctionne vu qu'il est accessible par internet, je n'ai rien d'ouvert hormis mon programme actuel qui s'appelle "Gestion Ukio.xlsm" et je n'essaye pas d'enregistrer.

J'essaye de passer par un autre système pour récupérer mes données, mais j'aimerais vraiment comprendre pourquoi cela bloque, surtout que, de prime abord, cela semble aléatoire. Parfois la page va s'ouvrir sans soucis, et parfois j'ai le message.
J'ai tenté des choses genre Set Obk = Nothing avant d'ouvrir le lien, genre sauvegarder mon fichier, au cas où il soit en temporaire et avec un nom bateau, mais rien n'y fait.

Auriez-vous une idée du pourquoi du comment et comment résoudre le problème?

Merci d'avance,
 

Marilo

XLDnaute Nouveau
Bonjour Marilo,
Dans votre second code Test, où est définie la variable "perso" qui donne le N° de ligne où se trouve la référence ?

Bonjour,

Je n'ai pas mis tout mon code, c'est pour l'exemple (c'est pour cela que j'ai indiqué en commentaire des codes qui remplacent le "sheets("Données de Base").cells(perso, 6)", mais en gros cela donne ceci:

VB:
Sub test()

Dim perso as double
Dim liste as range

Application.DisplayAlerts = False
    
    Set liste = Sheets("Données de Base").Range("F1", Sheets("Données de Base").Range("F1").End(xlDown))

    perso = 2
    
    Do until perso > liste.count

        Set Obk = Nothing
        Set Obk = Workbooks.Open("https://swgoh.gg/p/" & sheets("Données de Base").cells(perso, 6) & "/omicrons/")
        'exemple de sheets("Données de Base").cells(perso, 6): 367332181 ou encore 323787692

        Obk.Activate

        'Suppression des liens hypertextes
        Cells.Hyperlinks.Delete

        'Suppression des images et contrôles
        ActiveSheet.Shapes.SelectAll
        Selection.Delete

        Sheets("swgoh").Copy After:=Workbooks("Gestion Ukio.xlsm").Sheets("Global")
        Workbooks("swgoh.gg").Close

        'Là j'ai toute la gestion de la page internet importée

    Sheets("swogh").delete
    perso = perso +1

    Loop

Application.DisplayAlerts = True

End Sub

Mon soucis se situe sur la ligne Set Obk = Workbooks.Open("https://swgoh.gg/p/" & sheets("Données de Base").cells(perso, 6) & "/omicrons/") qui parfois fonctionne, parfois non, pour le même lien. Je n'ai pas réussi à avoir de constante pour comprendre pourquoi certains cas fonctionnaient et d'autres non.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Pour les deux constantes (367332181 ou 323787692 ) votre code ne pose pas de problème sur mon PC.
Est ce que sur un de ces codes ça plante chez vous ou est ce sur les codes particuliers ? ( en particulier si des nombres commençaient par 0 qui serait ignorés d'XL )
Sinon comme chez moi ça ne plante pas, difficile d'aller plus loin.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Peut être une idée. Je pense que sur ce site toute ref à 9 caractères ( si ce n'est pas le cas, cette idée est stupide )
Si c'est le cas on peut mettre une sécurité avec :
VB:
    perso = 2
    donnée = Sheets("Données de Base").Cells(perso, 6)
    If Len(donnée) <> 9 Then
        MsgBox donnée & " n'a pas un format valide car " & Len(donnée) & " caractères au lieu de 9."
    End If
    Set Obk = Nothing
    Set Obk = Workbooks.Open("https://swgoh.gg/p/" & donnée & "/omicrons/")
Et effectivement avec 367332181 ça marche bien mais avec 1367332181ça donne :
1652112308901.png

Vous pouvez aussi rajouter un On Error Goto Fin, et à la fin faire :
Code:
Application.DisplayAlerts = True
Exit Sub
Fin:
    MsgBox "https://swgoh.gg/p/" & donnée & "/omicrons/" & " est inaccessible."
End Sub
Ca vous donnera peut être une piste d'investigation.
 

Marilo

XLDnaute Nouveau
Merci pour ton retour.
Le bug est aléatoire. Les 2 codes que j'ai mis fonctionnent chez moi, et buguent aussi sans que je ne sache pourquoi.

Retentes chez toi. Généralement quand un lien marche, ils marchent tous pendant 5 min, et après plus aucun ne fonctionnent, et rebelotte plus tard.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Ce n'est pas normal, chez moi c'est ok. Le problème ne pourrait il pas venir d'ailleurs ?
Tout peut dépendre de votre code complet. Par exemple un "Workbooks("swgoh.gg").Close" prend du temps. serait il possible que vous embrayez sur un autre code avant que le fichier soit réellement fermé ?
Ou autre chose qui se passerait mal au niveau des temps entre plusieurs macros ?
Sur mon PC je ne peut guère aller plus loin puisque ça marche.
 

Marilo

XLDnaute Nouveau
Rebonsoir,

C'est hyper chiant comme histoire.
Je viens de voir ton message, du coup j'ai lancé ma macro.
Voici ci-après les éléments:
Je ne me suis pas basé sur ma grosse macro mais sur ma base de test, dont la seule mission est d'ouvrir la page, enlever les images et les liens hypertextes, et l'intégrer à mon fichier.
J'ai obtenu l'erreur, alors que je n'avais ouvert que mon fichier. Comme tu le vois sur l'image, les seules fenêtres Excel que j'ai sont Gestion ukio.xlsm et le vba, et malgré tout, j'ai l'erreur (cf fenêtre au milieu).
Je n'ai pas non plus de page swogh dans mon classeur et donc encore moins de fichier à côté.
bug.jpg


Je te joins mon fichier. (modifié: mince, mon fichier est trop volumineux)

Franchement, je ne comprends pas pourquoi cela foire. Surtout que si tu remontes dans mon code, je fais appelle à un autre site, de la même façon, et je n'ai jamais eu de problème auparavant.
Comme ce bug est aléatoire et ne semble touché que ce site, je mettais cela sur le compte du site sans trop savoir pourquoi ; le pire c'est si toi tout va bien, je ne comprends pas pourquoi ça foire. C'est embêtant :/
 
Dernière édition:

Marilo

XLDnaute Nouveau
Re,
Ce n'est pas normal, chez moi c'est ok. Le problème ne pourrait il pas venir d'ailleurs ?
Tout peut dépendre de votre code complet. Par exemple un "Workbooks("swgoh.gg").Close" prend du temps. serait il possible que vous embrayez sur un autre code avant que le fichier soit réellement fermé ?
Ou autre chose qui se passerait mal au niveau des temps entre plusieurs macros ?
Sur mon PC je ne peut guère aller plus loin puisque ça marche.
Et juste après avoir validé mon message, je viens de relancer le code, et là il marche. C'est à n'y rien comprendre !!

Je viens de diminuer le fichier et de le joindre.
 

Pièces jointes

  • Gestion Ukio.xlsm
    443.1 KB · Affichages: 0
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoit ChTi,
La variable Données est dans un de mes essais, je ne l'ai pas typée, ... ni même déclarée.
Mais chez moi c'est ok, impossible d'obtenir l'erreur de Marilo.

En PJ j'ai fait un petit fichier test qui rapatrie plein de pages les unes après les autres le plus rapidement possible. Chez moi aucun bug. ( le bouton bleu supprime les pages pour recommencer le test )
 

Pièces jointes

  • Gestion Ukio Essai.xlsm
    19.7 KB · Affichages: 1

Marilo

XLDnaute Nouveau
Bonsoit ChTi,
La variable Données est dans un de mes essais, je ne l'ai pas typée, ... ni même déclarée.
Mais chez moi c'est ok, impossible d'obtenir l'erreur de Marilo.

En PJ j'ai fait un petit fichier test qui rapatrie plein de pages les unes après les autres le plus rapidement possible. Chez moi aucun bug. ( le bouton bleu supprime les pages pour recommencer le test )
Je l'ai lancé 2 fois, tout s'est bien passé.
Je ne comprends pas pourquoi ça peut foirer sur mon fichier, et encore, pas tout le temps, et aller bien dans ton fichier + le mien de temps en temps :s

J'avais tout quitté, je viens de relancer mon fichier, j'ai relancé mon test, et bug. C'est fou ça !! Alors que pas d'onglet swogh ni de fichier autre que Gestion ukio.
bug 2.jpg
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Je pense avoir compris.
La ligne "Workbooks("swgoh.gg").Close" est longue a éxécutée. Et je pense que le VBA continue sa Loop et quand il veut accéder à Sheets("Données de Base").Cells(perso, 6) il accède à
Workbooks("swgoh.gg").Sheets("Données de Base").Cells(perso, 6) car il n'est pas encore fermé.
Essayez ce code :
VB:
Sub test()
Dim perso As Double
Dim liste As Range
Application.DisplayAlerts = False
    Set liste = Sheets("Données de Base").Range("F1", Sheets("Données de Base").Range("F1").End(xlDown))
    perso = 2
    Do Until perso > liste.Count
        Donnée = Workbooks("Gestion Ukio.xlsm").Sheets("Données de Base").Cells(perso, 6)
        Set Obk = Nothing
        Set Obk = Workbooks.Open("https://swgoh.gg/p/" & Donnée & "/omicrons/")
        'exemple de sheets("Données de Base").cells(perso, 6): 367332181 ou encore 323787692
        Obk.Activate
        'Suppression des liens hypertextes
        Cells.Hyperlinks.Delete
        'Suppression des images et contrôles
        ActiveSheet.Shapes.SelectAll
        Selection.Delete
        Sheets("swgoh").Copy After:=Workbooks("Gestion Ukio.xlsm").Sheets("Global")
        Workbooks("swgoh.gg").Close
        'Là j'ai toute la gestion de la page internet importée
        Sheets("swogh").Delete
        perso = perso + 1
    Loop
Application.DisplayAlerts = True
End Sub
C'est le même que vous sauf que je précise bien le workbook d'où extraire la donnée avec :
Code:
Donnée = Workbooks("Gestion Ukio.xlsm").Sheets("Données de Base").Cells(perso, 6)
 

Marilo

XLDnaute Nouveau
Re,
Je pense avoir compris.
La ligne "Workbooks("swgoh.gg").Close" est longue a éxécutée. Et je pense que le VBA continue sa Loop et quand il veut accéder à Sheets("Données de Base").Cells(perso, 6) il accède à
Workbooks("swgoh.gg").Sheets("Données de Base").Cells(perso, 6) car il n'est pas encore fermé.
Essayez ce code :
VB:
Sub test()
Dim perso As Double
Dim liste As Range
Application.DisplayAlerts = False
    Set liste = Sheets("Données de Base").Range("F1", Sheets("Données de Base").Range("F1").End(xlDown))
    perso = 2
    Do Until perso > liste.Count
        Donnée = Workbooks("Gestion Ukio.xlsm").Sheets("Données de Base").Cells(perso, 6)
        Set Obk = Nothing
        Set Obk = Workbooks.Open("https://swgoh.gg/p/" & Donnée & "/omicrons/")
        'exemple de sheets("Données de Base").cells(perso, 6): 367332181 ou encore 323787692
        Obk.Activate
        'Suppression des liens hypertextes
        Cells.Hyperlinks.Delete
        'Suppression des images et contrôles
        ActiveSheet.Shapes.SelectAll
        Selection.Delete
        Sheets("swgoh").Copy After:=Workbooks("Gestion Ukio.xlsm").Sheets("Global")
        Workbooks("swgoh.gg").Close
        'Là j'ai toute la gestion de la page internet importée
        Sheets("swogh").Delete
        perso = perso + 1
    Loop
Application.DisplayAlerts = True
End Sub
C'est le même que vous sauf que je précise bien le workbook d'où extraire la donnée avec :
Code:
Donnée = Workbooks("Gestion Ukio.xlsm").Sheets("Données de Base").Cells(perso, 6)
Nope désolé, cela ne marche pas.
J'ai intégré ton code dans mon fichier, je l'ai lancé. Il tente d'ouvrir la bonne page, c'est le premier joueur de la liste, mais erreur. Je suis désœuvré :s
bug3.jpg
 

Statistiques des forums

Discussions
312 198
Messages
2 086 140
Membres
103 129
dernier inscrit
Atruc81500