XL 2019 Fermeture intempestive de formulaire

gbinforme

XLDnaute Impliqué
Bonjour à tous,

Je suis confronté à un souci dont je ne comprend pas la cause.
J'ai 2 formulaires assez basiques avec textbox, labels, listbox qui vont chercher des informations
à la fois sur le classeur et sur le web pour documenter la listbox et/ou des labels.

Cela fonctionne très correctement sauf que lorsque le traitement est effectué
le formulaire se ferme sans que l'on puisse faire le traitement sur les données affichées.

Comme dans certains cas le formulaire reste affiché, je ne comprends pas
la fermeture dans la plupart des affichages.
Dans le cas des labels, j'ai résolu le souci en enregistrant les informations sur une feuille
mais je ne peut pas faire de même pour celui avec listbox.

Si quelqu'un a la moindre idée à me proposer je l'en remercie d'avance.
 
Solution
Bonjour,
Le classeur donné n'utilise que la Méthode Post ( donc beaucoup de status > 400 ) et trop d'options setReQuestHeader .
Nota: quand on paramètre certains setReQuestHeader, c'est généralement pour un site prédéfini , ils ne sont pas universels .

Certains sites renvoient des "lignes" > 2047 caractères et de ce fait supérieures à la longueur max d'une colonne de listbox, ce qui a tendance à la faire planter ...

Voyez le classeur joint s'il peut répondre à votre attente .

gbinforme

XLDnaute Impliqué
Bonjour à vous tous et merci d'avoir passé la nuit sur mon souci.

En ce qui me concerne, avec un gros rhume j'ai profité d'un sommeil réparateur
et je vais pouvoir intégrer vos suggestions après les avoir digérées.

Merci de vos connaissances pour améliorer ma méthode de recherche
et faire en sorte que le formulaire ne se dérobe plus.
J'hésitais à poser ma question mais je ne la regrette plus
car j'ai compris que mon code avait des failles que vous m'avaient permis de connaitre.

Super merci à vous tous
 

fanch55

XLDnaute Barbatruc
J'aurais une question : le .Paste est censé paster quoi et surtout où ?
Est-ce le contenu du presse-papier qui est censé être pasté ?

Et autre question : à quoi sert l'assignation de tmp à la ligne juste en-dessous ?
Salut TFB,

Pout un SetData ou un ClearData, la variable retour indique si l'opération s'est bien déroulée ( vrai ou faux ).
le tmp dans le code ne sert à rien car on ne le teste pas,
on peut effectivement le retirer et appeler directement la méthode :
doc.ParentWindow.clipboardData.ClearData "text"

on colle le contenu du presse papier rempli par clipboardData.setdata
le .paste concerne la cellule active en destination ( on l'a activée en début de with ),
en codage rigoureux et bien explicite, cela donne :
Worksheets("mots").Paste Worksheets("mots").Range("A1")

tu comprendras qu'en développement rapide, on préfère le codage court implicite ;)
 

gbinforme

XLDnaute Impliqué
Bonjour à tous,

Voilà j'ai mis en place vos remarques judicieuses et je pensais mes soucis résolus mais c'est loin d'être parfait.

@ toofatboy
Le mode modal est plus stable mais ne convient pas bien à mon traitement.
J'ai supprimé les deux WITH qui n'était pas imbriqués mais successifs car inutiles
et j'espère que tu auras toujours des fermetures du UserForm... ;)

@gege-45550
Il n'y a plus de Cancel et le code est plus simple

@fanch55
"WinHttp.WinHttpRequest.5.1" à la place de "microsoft.xmlhttp" ne fonctionne pas sur certains sites que j'utilise et j'ai mis la procédure en option.
J'ai bien le test R_Q.Status < 400
modifié le .Paste comme recommandé
et le GET ne fonctionne pas sur certains sites que j'utilise.

Je vous ai mis une série de sites à choisir pour que vous puissiez constater qu'il doit y avoir encore des failles quelque part car le formulaire se dérobe certes moins systématiquement mais il le fait alors que les données sont bien récupérées avec test du status.

Si vous découvrez une parade qui permet de stabiliser le formulaire, je vous en remercie d'avance car j'ai bien sûr d'autres objets et traitements à rajouter.

Bonne soirée à tous
 

Pièces jointes

  • test.xlsm
    64 KB · Affichages: 5

TooFatBoy

XLDnaute Barbatruc
J'ai supprimé les deux WITH qui n'était pas imbriqués mais successifs car inutiles
Ils étaient bien imbriqués puisqu'il y avait le .Paste après le premier End With. 😉


et j'espère que tu auras toujours des fermetures du UserForm... ;)
En fait, ce que je voulais dire c'est que je voulais avoir le même comportement de la macro que chez les autres intervenants.
Mais il n'en est rien puisque chez moi le UserForm ne se fermait pas mais se ferme avec la version #32, alors que chez les autres testeurs c'est l'inverse... 🙃

Je vais tester ta nouvelle version.👍
 

gbinforme

XLDnaute Impliqué
Ils étaient bien imbriqués puisqu'il y avait le .Paste après le premier End With. 😉
Pourtant il y a bien fin du premier avant le second sinon tu avais raison cela ne peux pas fonctionner.
VB:
    With doc
        .body.innerhtml = R_Q.responsetext
        tmp = .ParentWindow.clipboardData.SetData("text", .body.innerhtml)
    End With
______________________________
    With wj
        .Activate
        .Cells(1, 1).Activate
        .Paste
        tmp = doc.ParentWindow.clipboardData.ClearData("text")
        DoEvents
        For Each img In .Shapes
            img.Delete
        Next img
    End With
En fait, ce que je voulais dire c'est que je voulais avoir le même comportement de la macro que chez les autres intervenants.
C'est bien ce que j'avais compris et c'est pour cela que j'avais rajouté un sourire ;)
Reste à voir si la nouvelle version aura aussi un comportement différent chez toi.
Cela m'interpelle d'ailleurs que le fonctionnement puisse différer selon les postes.
 

TooFatBoy

XLDnaute Barbatruc
Pourtant il y a bien fin du premier avant le second sinon tu avais raison cela ne peux pas fonctionner.
Oui, il y a fermeture du second WITH (celui imbriqué dans le premier), et c'est justement ce qu'on appelle "imbriqués". ;)

En revanche, je me suis juste posé la question de la possibilité de faire ça. Je n'ai pas dit que ça ne fonctionnait pas, et d'ailleurs ça fonctionne comme dit en #49.

Je vais tester #50, probablement demain. ;)
 

Gégé-45550

XLDnaute Accro
Éh, 15 ans que je dompte la bête, elle sait que si elle plante je la remplace de suite... 😅

Windows 10 Pro 22H2 et Excel 2016.



Et toi Gégé-45550, quelle(s) URL ferme(nt) le UserForm ?
Voici mes résultats :
Capture d’écran 2023-02-11 122315.png

[EDIT] : en fait, le site de Gerbeaud lance un script et si l'on arrête le script, l'usf se ferme
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Bonjour,
Le classeur donné n'utilise que la Méthode Post ( donc beaucoup de status > 400 ) et trop d'options setReQuestHeader .
Nota: quand on paramètre certains setReQuestHeader, c'est généralement pour un site prédéfini , ils ne sont pas universels .

Certains sites renvoient des "lignes" > 2047 caractères et de ce fait supérieures à la longueur max d'une colonne de listbox, ce qui a tendance à la faire planter ...

Voyez le classeur joint s'il peut répondre à votre attente .
 

Pièces jointes

  • test Gbinforme F55.xlsm
    46.3 KB · Affichages: 6

Discussions similaires

Réponses
27
Affichages
1 K

Statistiques des forums

Discussions
315 098
Messages
2 116 190
Membres
112 679
dernier inscrit
Yupanki