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 :

Lenteur de ma macro (9 fois sur 10) malgré optimisation


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
    Chargé d'affaire
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Par défaut Lenteur de ma macro (9 fois sur 10) malgré optimisation
    Bonjour,

    Je me suis bidouillé une macro qui me permet d'aller récupérer des données sur des pages web.
    De temps en temps ma macro s'effectue très rapidement (2 minutes) et parfois non (+30min).

    Pour faire simple ma macro fait appel à une fonction qui teste l'adresse du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function IsURLGood(url As String) As Boolean
        Dim request As New WinHttpRequest
     
        On Error GoTo IsURLGoodError
        request.Open "HEAD", url
        request.Send
    [...]
    End Function
    Pour accélérer le tout dans ma macro j'ajoute au début :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Application.ScreenUpdating = False
    ThisWorkbook.Windows(1).Visible = False
    UserForm1.Show 0     'Avec une progress bar
    Application.DisplayAlerts = False
    J'ouvre des pages web avec la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open ("http/mapageweb.html")
    Je fais attention à n'avoir qu'un seul classeur excel ouvert, word fermé ...
    Je lance la macro 10 fois ca lance la macro lentement, je referme le fichier, le ré-ouvre relance plusieurs fois et là ca se lance rapidement.

    Je voulais donc avoir votre avis sur l'endroit d'où pouvait venir se problème.

    Dans les 2 cas ce qui s'affiche sur l'écran c'est mon fichier excel (là ou il y a le bouton qui lance ma macro).
    Quand ca marche lentement j'ai une petite fenêtre qui dit ouverture de "ma page web" ... Même en ajoutant la ligne suivante au début de la fonction ca ne change rien c'est lent mais sans affichage de la fenêtre "ouverture" de la page web (qui elle dans tout les cas ne s'affiche jamais)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    Quand ca marche rapidement elle ne s'affiche pas...

    Espérant ne pas avoir été trop flou... Merci par avance pour vos conseils !

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    c'est ca qui est long!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open ("http/mapageweb.html")
    en plus que fait ta fonction urlgood dans l'etat elle sert a rien du tout ca c'est sur
    voila comment on fait une requette avec l'object xmlhttp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sub test
    dim REQ,URL
    url="http mapage........html"
    REQ.open"POST",URL,false 
    ' ici peut etre que  le header de la requete sera necessaire 
    REQ.send 
    msgbox REQ.responsetext
    end sub
    1 POST =pour telecharger les données fraiche sur la page eb et non dans le cache ( tous les sites ne l'accepte pas)
    2 ulr = la page demandée
    3 false =(syncro) equivalent de la fonction d'attente de IE attendre que la page soit chargée
    4 REQ.responsetext = le code html de la page chargée
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Par défaut
    Salut,

    Merci pour ton aide.
    Comme je dis la fonction est du style (j'avais mis [...] pour indiquer que je l'avais tronquée volontairement), tout marche normalement hormis la lenteur à 90% du temps.

    Ma fonction est en fait :

    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
    Public Function IsURLGood(url As String) As Boolean
     
        Dim request As New WinHttpRequest
     
        On Error GoTo IsURLGoodError
        request.Open "HEAD", url
        request.Send
        If request.Status = 200 Then
            IsURLGood = True
        Else
            IsURLGood = False
        End If
        Exit Function
     
    IsURLGoodError:
        IsURLGood = False
     
    End Function
    Ce qui fait le job.

    Pour ce qui est de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open ("http/mapageweb.html")
    Ce n'est pas réellement la page que j'essaie d'ouvrir

    La page s'ouvre bien, tout se déroule comme je veux, ça va chercher ce que je veux sur la page, ça copie, c'est parfait.
    Mais c'est lent ...

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    bon je répète
    je n'ai jamais vu ouvrir une requete comme ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.Open "HEAD", url
    il y a que 2 methodes a ma connaissance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.Open "POST", url'page eb absolument
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.Open "get", url'utilisation du cache si la page est presente
    maintenant ceci ne fera jamais ce que tu demande a moins d'avoir un ordi a processeur quantique et encore
    cela doit se mettre dans une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        If request.Status = 200 Then
            IsURLGood = True
        Else
            IsURLGood = False
        End If
    maintenant pour remplacer le status 200
    il y a tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    request.Open "POST", url,false
        request.Send
    apres je suppose que IsURLGood est sensé dire que l'url est bonne
    et bien non!!

    cela tu peut le determiner qu'en examinant le responsetext car meme si ton url n'est pas valide la requete te renvoie quand meme quelque chose
    donc ta fonction IsURLGood en l'etat ne te sert a rien car elle s'apuie sur le fait que une url pourait declancher une erreur et c'est pas le cas tu peut lancer une requet avec "https:/truc/bidulechouette mapage.html" la requette te donnera good
    a partir du moment ou l'url es bien structurée

    enfin bref elle ne sert a rien du tout et en plus elle te donnerait un résultat faux en cas d'url comme je viens de citer
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Lancer macro 1 seul fois sur activation feuille
    Par zeralium dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 09/09/2008, 18h12
  2. Macro fonctionnant 1 fois sur 2
    Par yamat dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 31/07/2008, 18h13
  3. [MySQL] changer de style une fois sur 2 après requête
    Par mussara dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/12/2005, 21h55
  4. le sous formulaire s'affiche une fois sur deux
    Par Math dans le forum Access
    Réponses: 16
    Dernier message: 10/10/2005, 15h25
  5. Pb : malloc qui marche une fois sur deux .... ?
    Par guillaume_pfr dans le forum C
    Réponses: 14
    Dernier message: 21/07/2003, 09h52

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