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

Contribuez Discussion :

Automatiser l'ouverture d'un fichier compatible Excel depuis le Web (téléchargement)


Sujet :

Contribuez

  1. #1
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut Automatiser l'ouverture d'un fichier compatible Excel depuis le Web (téléchargement)

    Bonjour !

    • Pour appréhender le sujet, consulter l'excellent tutoriel Interaction avec Internet Explorer via VBA Excel

    • Cas d'itwoo dans sa discussion Pilotage Internet Explorer (entamée il y a plus d'un an !) :
    une page du site Euronext dispose d'un lien pour télécharger un fichier texte .csv …

    Ce lien n'est pas un accès direct au fichier à télécharger : il ouvre une page secondaire de paramétrage
    à valider mais encore faut-il attendre l'affichage d'un bandeau afin de confirmer son ouverture …

    • Cette contribution va évoluer par étape (trois de prévues) afin de laisser itwoo la suivre à son rythme …
    Merci d'attendre la fin de la dernière étape avant d'intervenir dans cette contribution.

    Pour tout sujet similaire, créez votre discussion dans le forum dédié Macros et VBA Excel,
    là où il y a le plus d'intervenants et forcément avec le plus de chances d'obtenir une solution …


    Première étape : le pilotage semi-automatique d'Internet Explorer.

    Appel direct de la page de paramétrage, choix des options puis validation de la page.
    L'utilisateur doit confirmer le téléchargement du fichier en cliquant dans le bandeau sur le bouton Ouvrir
    Les données sont collées dans la première feuille de calculs (CodeName Feuil1) du classeur contenant le code.

    Le code comportant des lignes vides en prévision de l'étape suivante est scindé en deux parties :

    • la procédure DemoEuroNextCSV amenant l'utilisateur à confirmer le téléchargement;

    • l'évènement Workbook_Deactivate détectant l'ouverture du fichier téléchargé
    puis copiant et mettant en page les données.

    Code à coller dans le module ThisWorkbook d'un nouveau classeur :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Const URL = "https://www.euronext.com/fr/popup/data/download?ml=nyx_pd_stocks&cmd=default&formKey=nyx_pd_filter_values%3A1006ef55d4998cc0fad71db6a6f38530"
    Dim OK%
     
     
    Sub DemoEuroNextCSV()
        Const EG = "edit-go"
     
     
        With CreateObject("InternetExplorer.Application")
            .Navigate URL
            While .Busy Or .ReadyState < 4:  DoEvents:  Wend
               OK = IsObject(.Document.all(EG))
     
            If OK Then
                With Application
                   DS$ = IIf(.UseSystemSeparators, .International(xlDecimalSeparator), .DecimalSeparator)
                End With
                                            .Document.all("edit-format-2").Checked = True
                If DS = "," Then .Document.all("edit-decimal-separator-2").Checked = True
                .Document.all(EG).Click
                Application.Wait Now + 0.00008:   .Visible = True
     
     
            Else
                .Quit:  Beep
            End If
     
     
        End With
    End Sub
     
     
    Private Sub Workbook_Deactivate()
        Dim oWin As Object
     
        If OK And ActiveWorkbook.Name Like "NYX_Equities_EU_*.csv" Then
           OK = 0:  Application.ScreenUpdating = False
     
            With ActiveWorkbook
                With .ActiveSheet.Cells(1).CurrentRegion
                    Feuil1.Name = .Cells(2, 1).Value & " " & .Cells(3, 1).Value
                    .Cells(4, 1).Clear:             Feuil1.UsedRange.Clear
                    .Cells(5, 1).CurrentRegion.Copy Feuil1.Cells(2, 2)
     
                    With Feuil1.Cells(2, 2).CurrentRegion
                        Union(.Columns(5), .Columns(11)).HorizontalAlignment = xlCenter
                           Union(.Columns("F:I"), .Columns(13)).NumberFormat = "#,##0.000 "
                                                   .Columns(12).NumberFormat = "#,##0 "
                         .Columns("A:D").AutoFit:  .Columns(10).AutoFit:  .Columns(13).AutoFit
                    End With
     
                    .Rows(1).Copy Feuil1.Cells(2)
                End With
     
                .Close False
            End With
     
            With Feuil1
                .[G1:N1].HorizontalAlignment = xlCenter
                .Cells(2).CurrentRegion.Columns(4).Replace "é", "é", xlPart
                .Activate:  Cells(2, 1).Select:  ActiveWindow.FreezePanes = True
            End With
     
            For Each oWin In CreateObject("Shell.Application").Windows
                  If oWin.LocationURL = URL Then oWin.Quit: Set oWin = Nothing: Exit For
            Next
        End If
    End Sub
    Précisions :

    • Ligne n°21 : après le paramétrage et la validation de la page,
    une pause est effectuée pour attendre l'apparition du bandeau avant d'afficher la page …

    • Ligne n°60 : conversion des caractères accentués.

    • Lignes n°64 à 66 : fermeture de la page du navigateur.


    itwoo
    , j'attends donc ton retour avant de passer à l'étape suivante,
    l'automatisation de la confirmation du téléchargement …

    _________________________________________________________________________________________________
    Si déboguer est l’art de corriger les bogues, alors programmer est l’art d’en faire !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  2. #2
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Marc,

    Merci de ta gentillesse
    Test rapide à l'instant cela marche bien semble-t-il (aprés clic sur ouvrir comme indiqué) et trés vite en plus. BRAVO
    Par contre je ne peux pas étudier tout ton code avant l'année prochaine...

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    J'ai oublié initialement de préciser : j'effectue principalement des tests sous Seven et IE9,
    la version d'Excel ne rentrant quasiment pas en ligne de compte.

    Le code ne devrait pas poser de problème pour les versions plus récentes d'IE
    mais pourrait ne pas fonctionner tel quel avec les versions antérieures …


    Deuxième étape : le pilotage d'Internet Explorer avec confirmation automatique d'ouverture du fichier.


    Cette astuce est née de l'observation suite à une erreur de manipulation et aussi au coup de chance
    d'avoir basculé de Firefox vers IE juste pour tester car, en restant sous Firefox, je n'aurais rien vu …

    Vis à vis du code de l'étape précédente, il manque juste la simulation de la frappe au clavier afin de confirmer l'ouverture.
    (L'autre voie serait de simuler le click sur le bouton, au moins deux méthodes mais moins simples à mettre en œuvre …)

    Oui itwoo, il est bien question de SendKeys mais beaucoup restent au pied de ce mur à franchir …

    Observation : le focus peut être déplacé grâce à la touche de tabulation.
    Soit calculer le nombre de tabulation nécessaire pour se positionner sur le bouton Ouvrir
    soit un peu plus finement donner le focus à un élément de la page principale au plus près du bandeau …


    Modifications du code de l'étape précédente :

    • Ligne n°20 : With .Document.all(EG): .Focus: .Click: End With (conserver l'indentation pour la lisibilité)

    En pilotant Internet Explorer, cliquer sur un bouton ne lui donne pas forcément le focus. Maintenant, c'est fait …

    • Ligne n°21 : élévation du temps de pause à 0.00011

    C'est le point le plus sensible dans l'automatisme désiré ! Manuellement après le click sur le bouton Go,
    il faut observer le temps moyen avant l'apparition du bandeau pour la confirmation du téléchargement.
    Ce temps varie selon la puissance de l'ordinateur, la célérité du réseau et surtout celle du site !
    Depuis une quinzaine le site Euronext est plus lent, nécessitant donc d'augmenter cette pause …

    Pour ceux pas doués avec l'arithmétique, consulter alors l'exemple de l'aide VBA de la méthode Wait
    afin d'ajouter un temps exprimé en secondes …

    Pour les autres, l'unité de temps "1" d'Excel vaut un jour, soit 24h x 60mn x 60s = 86 400 secondes.
    Par exemple une pause de 0.00008 est environ égale à 7 secondes (.00008 x 86400) …

    • La ligne vide n°22 devient CreateObject("WScript.Shell").SendKeys "{Tab 2}~"

    Grâce à la ligne n°20 donnant le focus au bouton Go, il suffit juste de deux touches de tabulation
    puis la touche Entrée pour confirmer l'ouverture du fichier.
    VBA dispose aussi d'une instruction SendKeys mais elle a la fâcheuse tendance à désactiver
    le verrouillage numérique du clavier ! D'où ma préférence d'utiliser un ActiveX

    • La ligne vide n°23 devient Application.Wait Now + 0.00001

    Sans cette pause inférieure à une seconde, le fichier ne s'ouvre pas !

    • La ligne n°25 est réduite à Beep (voir la modification suivante)

    • La ligne vide n°28 devient .Quit: AppActivate Application.Caption

    Comme c'est une version automatique, pas besoin de conserver la fenêtre d'IE !
    L'instruction AppActivate ne doit plus être nécessaire à partir de la version 2007 d'Excel …

    • Suite à cette dernière modification, les lignes n°63 à 66 deviennent inutiles, à supprimer !
    • Tout comme les lignes n°34 & 35, la variable objet oWin n'étant plus utilisée …

    • Enfin, la constante URL n'apparaissant plus que dans la procédure DemoEuroNextCSV,
    la ligne n°1 peut être déplacée dans l'entête de cette procédure …


    Lors de vos tests, si le fichier n'est pas ouvert, augmenter alors la pause de la ligne n°21 …

    Il est aussi possible que ce temps de pause ne soit plus suffisant lorsque le site rame,
    ma préférence allant alors au code de la version semi-automatique …

    itwoo, j'attends ton retour (t'en es-tu sorti, quelle pause en ligne 21 ?) avant de publier l'ultime étape bonus !

    _________________________________________________________________________________________________
    Le progrès : trop robot pour être vrai. (Jacques Prévert)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Marc,

    Bonne année

    Ok ok je regarde tout ca bientôt en détail et reviens vers toi...(d'ici fin semaine prochaine probablement)
    Par contre pour tes abeilles trés trés bonne nouvelle cela semble marcher droit à 100% maintenant (tests toujours en cours)...

  5. #5
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Marc,

    Décidément tu m'épates à chaque fois et grâce à toi je découvre et apprends plein de choses sur les mécanismes et le code...
    En cours d'étude de ton code masi peux tu déjà préciser le point suivant stp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DS$ = IIf(.UseSystemSeparators, .International(xlDecimalSeparator), .DecimalSeparator)
                '.UseSystemSeparators = Vrai
                '.International(xlDecimalSeparator)= ","
                'xlDecimalSeparator = 3
                '.DecimalSeparator= ","
    .International(xlDecimalSeparator)= "," et .DecimalSeparator= "," ont l'air identique sur mon ordi est ce normal?

    Etude de ton code en cours
    Bon WE

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut





    Oui c'est normal car par défaut Excel est configuré selon les paramètres régionaux de Windows …


    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    d'accord ( à noter que je m'y perds toujours un peu entre excel, windows...).

    Sinon ici Feuil1.Name = ...maintenant message d'erreur (surement 2 fois rien sur le nom)
    erreur d'exécution 1004
    Vous avez tapé un nom de feuille ou de graphique non valide. Vérifiez les points suivants:
    *le nom ne dépasse pas 31 caractéres
    *le nom ne contient aucun des caractéres suivants : \ / ? * [ ou ]
    *le nom du champ n'est pas vide

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Je viens de tester et de mon côté non plus cela ne marche plus ! Pourtant j'avais testé, il y a dû y avoir une modification …

    Correction de la ligne n°41 : remplacer le dernier .Value par .Text





    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour,

    oui en effet il y a dû y avoir une modification car cela marchait avant lors d'un test rapide...
    l'erreur vient de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cells(3,1).Value = 13/01/2015 
    cells(3,1).Text = 13-janv-15
    or les / sont interdits pour nommer un fichier
    C'est un petit détail que tu as corrigé cela marche...

    sinon tu utilises pour fermer l'activeworkbook: .Close False ca c'est ok, mais si .Close True et bien je n'arrive pas à trouver l'emplacement de sauvegarde du fichier téléchargé, où va t'il se trouver sauvegardé car même l'explorateur ne le trouve pas...

    a bientôt

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Le fichier est téléchargé dans un dossier temporaire lié à la session, celui indiqué par la variable d'environnement TEMP.

    En général c'est dans C:\Users\{Nom de l'utilisateur}\AppData\Local\Temp

    AppData étant un dossier caché, dans l'Explorateur Windows, soit taper directement
    le chemin dans la barre d'adresse, soit activer l'affichage des dossiers / fichiers cachés …

    Tu aurais pu penser à insérer une ligne dans le code avant de fermer le fichier : Debug.Print .Path
    Et là je m'aperçois que c'est dans les fichiers temporaires d'Internet Explorer :

    C:\Users\{Nom de l'utilisateur}\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\


    Sinon j'ai un doute, t'en es où ? C'est bon pour la deuxième étape ?
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Marc,

    Merci de ton explication mais malgré tout il faut que tu me détailles un peu plus la situation sur le TEMP stp:

    oui j'ai bien vu que le fichier s'enregistrait ca pas de soucis...
    voici son reper d'enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reper ="C:\Users\maxime\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\62XDQCDG"
    le fichier s'appelle NYX*.csv

    tout d'abord ce matin en faisant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ChDir reper
    flna =  Dir("NYX*.csv")
    et bien il n'y avait plus rien!!!comme si le fichier avait disparu effacé=> le Temp efface les fichiers? si oui aprés combien de temps car il y a plein de fichiers dedans qui ont l'air bien vieux?

    le fichier NYX*.csv n'apparait pas même s'il existe bien, puisqu'il fait partie d'un répertoire caché c'est bien ca?

    Pour le faire apparaitre tu indiques soit:
    *activer l'affichage des dossiers/fichiers cachés (comment fait on cela stp?)
    *coller le reper dans la barre d'adresse là c'est ok en collant C\...62XDQCDG et bien cela méne au répertoire ...en effet, mais si je tape le nom du fichier dans l'explorateur (en haut à gauche) une fois dans ce répertoire toujours rien (le fichier est il lui aussi en masqué? pourtant en parcourant ce répertoire le fichier est bien là) et en cliquant dessus il s'ouvre bien à l'écran...

    De plus lorsque j'essaie de retrouver en descendant l'arborescence pas à pas AppData apparait bien mais plus loin à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Users\maxime\AppData\Local\Microsoft\Windows
    il n'y a plus rien Temporary Internet Files semble ne pas exister lui il est totalement caché (pas comme le fichier NYX qui lui apparait)...mais en effet en tapant son chemin dans l'explorateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Users\maxime\AppData\Local\Microsoft\Windows\Temporary Internet Files
    il est bien là avec tous ses fichiers...mais pas ses répertoires...comme Content.IE5 il suffit de recommencer la manip comme pour Temporary pour Content.IE5
    Désolé si je ne suis pas 100% clair je suis un peu perdu mais déjà en sachant afficher/déafficher les fichiers cachés ca sera plus clair (j'espére)
    Merci de m'indiquer comment faire activer l'affichage des dossiers/fichiers cachés stp et tous ses fichiers dans TEMP et est ce possible de les effacer?

    Pour le reste, suis en retard (actualité chargée) viens juste de finir ton code (il y a 50% du code que tu m'as appris!!!) étude en cours de ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateObject("Shell.Application").Windows
    'c'est un peu comme le gestionnaire de tache?
    A bientôt

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Activer l'affichage des dossiers et fichiers cachés de l'Explorateur Windows via le menu Outils, Options des Dossiers, Affichage

    Le dernier répertoire de l’arborescence (celui dans Content.IE5) est supprimé après la fermeture du fichier téléchargé,
    cela c'est vraiment du temporaire !

    Les autres fichiers qui ont l'air bien vieux sont ceux utilisés par les précédentes sessions d'IE :
    dans ses options, on peut le paramétrer pour tout supprimer lors de sa fermeture …

    Le CreateObject sert à appeler un API de Windows afin de voir les fenêtres ouvertes d'IE.

    Le site Euronext rame bien en ce moment, ne pas hésiter à augmenter la temporisation de la deuxième étape !

    En attente de ton feu vert pour l'étape suivante …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Marc,

    C'est super Bravo quel pas en avant voici une autre façon trés trés rapide et efficace de récupérer les infos!!!TOP TOP ce que tu viens de faire
    Oui l'étape 2 marche test ce matin avec les paramétres suivants (possible réglage plus rapide mais c'est pas évident à tester):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With .Document.all(EG): .Focus: .Click: End With
     
                Application.Wait Now + 0.00008:   .Visible = True
     
                CreateObject("WScript.Shell").SendKeys "{Tab 2}~"
     
                Application.Wait Now + 0.00001
    Donc tu peux passer à l'étape bonus...
    étude de ton code en cours...pour finir de te poser quelques questions

    Par contre désolé de revenir un peu hors sujet mais il faut que tu m'expliques un point de manière plus précise stp:
    voila lorsque tu tapes:
    C:\Users\maxime\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5 et bien Content.IE5 n'affiche que 3 répertoires par exemple mais parmi ses 3 répertoires il n'y a pas celui de l'ActiveworkBook.Path par exemple appelé 62XDQCDG
    pour le faire apparaitre il faut le taper/coller
    C:\Users\maxime\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\62XDQCDG
    et là il apparait avec en plus des centaines de fichiers anciens!!!
    Mais surtout si relance de la macro par exemple le .Path change est devient:
    C:\Users\maxime\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\ VGOBDB3Z
    idem il n'apparait pas, il faut donc le taper/coller et là surprise il y a denouveau des centaines de fichiers anciens!!!

    Pourrais tu me dire comment faire apparaitre ces répertoires type 62XDQCDG ou VGOBDB3Z si je ne connais pas leurs noms (l'option affichage semble pourtant activée dans Document, organiser, option des dossiers, affichage, Fichiers et dossiers cachés puis coché la case Afficher les dossiers et fichiers cachés) car actuellement impossible de les voir....
    Je me demande combien il y en a, la taille qu'ils font et ce qu'ils contiennent!!!

    En tous les cas CHAPEAU pour ce que tu as fait c'est du grand art
    Bonne journée

    PS: désolé pour le retard mais ca prend du temps d'étudier ton/le code...

  14. #14
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Comme ce sont non seulement des dossiers cachés mais aussi des dossiers système,
    il faut dans les options d'Affichage de l'Explorateur Windows décocher la case
    Masquer les fichiers protégés du système d'exploitation


    Le mieux est dans les Options Internet d'Internet Explorer de cocher la case
    Supprimer l'historique de navigation en quittant le navigateur puis de paramétrer les cases via le bouton Supprimer :

    Conserver les données des sites Web favoris : les goûts, les couleurs, perso je la décoche …
    Cocher les cases Fichiers Internet temporaires, Cookies, les Historique et les Données de formulaires.

    Les cases suivantes là aussi c'est aussi une affaire de goût : Mots de passe (cochée),
    Données de protection contre le tracking (décochée) …

    Ensuite via le bouton Paramètres à côté du précédent bouton Supprimer,
    l'Espace disque à utiliser peut être réduit à 50 Mo puis paramétrer à zéro
    les Jours pendant lesquels ces pages sont conservées

    Les deux boutons Afficher sont intéressants : on peut y supprimer des fichiers résiduels …


    Si ce n'est pas trop long, je peux patienter pour la dernière étape car le code n'ayant plus rien à voir,
    cela évitera des questions croisées sinon il faudra bien préciser l'étape afférente à chaque question posée, dis-moi ?

    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #15
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Marc,

    D'accord merci pour les explications détaillées .
    Ca ne sera pas trop long étude de la fin de ton code cette semaine...c'est en effet mieux de ne pas croiser les questions.
    Bon dimanche.
    Maxime

  16. #16
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    Bonjour Marc,

    Ta version automatique marche à merveille...étude d'un dernier petit point en cours sur le AppActivate Application.Caption...(sur ce point l'ordre chronologique des événements me sidére...)
    contre toute attente le AppActivate Application.Caption semble inutile...en effet l'activation reste sur le classeur d'origine tout le temps jusqu'au end sud de la sub DemoEuroNextCSV!!! cela se voit en mettant des Debug.Print "fenêtre active i" & Application.Caption...ce n'est qu'ensuite que le classeur téléchargé devient actif, en activant la sub workbook_deactivate puis aprés le .close de ce classeur est bien plus rien n'actif!!!
    Mais par contre si l'on met des F8 et bien cette fois cette le classeur NYX* qui est actif au moment de son téléchargement soit juste avant le .Quit....c'est surement parce que F8 faisant du pas à pas bloque sur une étape intermédiaire gérée par IE (et non excel) qui demande temporairement à excel d'ouvrir en arrière plan un 2° classeur excel non actif...
    Avant je croyais que le workbook_deactivate se lancer au moment du téléchargement...et que dans la sub workbook_deactivate il y avait alternance entre les 2 classeur actifs en fonction de la sélection avec les . et Feuil1...mais non.

    Sinon peux tu me dire où je fais une erreur de raisonnement sur ce point et comment la corriger:
    reper est le chemin d'accés au répertoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set fso = CreateObject("scripting.filesystemobject")
    Set f = fso.GetFolder(reper)
    MsgBox "Il y a " & f.subfolders.Count & " répertoires"
    MsgBox "Il y a " & f.Files.Count & " fichiers"
    puis ici ce code fonctionne bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set test_subfolders = f.subfolders
    s = ""
    For Each fld In test_subfolders
    s = s & fld.Name & vbCrLf
    Next
    MsgBox "Liste des répertoires " & s
    mais pas celui ci pourquoi? (même malgré ajout dans option, référence, Microsoft scripting runtime)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set test_fld = f.subfolders
    For i = 1 To test_fld.Count 
    Set fld = test_fld.Item(i) 'erreur d'exécution 5 argument ou appel de procédure incorrect
    Set fld = test_fld(i) 'erreur d'exécution 5 argument ou appel de procédure incorrect
    next
    Merci et bonne journée

  17. #17
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Avec la version 2003 d'Excel sous Seven en pilotant IE, surtout en devenant visible,
    Excel n'est donc plus l'application active mais en quittant IE Excel ne le redevient pas.
    Comme je l'ai déjà indiqué dans l'étape 2, cela semble réglé à partir de la version 2007 …

    Pointer une feuille de calculs par With évite de devoir l'activer rendant plus efficace le code.
    Du reste juste pour figer les volets le code active la feuille en ligne n°61 …

    Tels quels, les codes de chaque étape fonctionnent sur Excel 2003 comme sur la version 2007.
    Donc en exécution normale même avec la version 2010 tu ne devrais pas rencontrer de souci
    sauf en cas de ralentissement du site avec une temporisation devenue insuffisante …

    Comme j'évite d'utiliser FSO (car la fonction VBA interne Dir étant souvent bien plus rapide !),
    je me demande si ce n'est pas l'histoire commune d'une collection dont le premier élément
    a pour indice zéro et non 1 et donc, de facto, le dernier élément a pour indice .Count - 1 d'où l'erreur ? …

    Je commence à rédiger l'étape suivante en attendant ton feu vert …

    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  18. #18
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut re
    oui merci pour tout tu peux passer à l'étape 3...(c'est vrai que suivant les versions d'excel, j'avais oublié ca )
    Mais l'étape 2 automatisée marche nickel encore bravo!!!

    Pour Count-1 c'est fort possible mais pour l'instant pas pu passer l'étape initialisation i=0 ou i=1...la 1° boucle avec le for each marche, la 2° for i=0 ou i=1 to count ou count-1 ne veut pas s'initialiser...

    Idem d'accord avec toi, j'utilise Dir aussi, mais Dir ne donne que les fichiers du répertoire étudié...comment faire Dir pour afficher aussi les répertoires présents dans le répertoire étudié?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ChDir reper 'pour aller dans le répertoire
    flna = Dir("*.*") 'flna = 1° fichier du répertoire
    If flna = "" Then MsgBox "Il n'y a pas de fichiers pour ce répertoire"
    Do While flna <> "" 'boucle tant que flna <> soit tant qu'il y a des fichiers
    MsgBox "Affichage des fichiers" & flna
    flna = Dir 'pour passer au fichier suivant du répertoire
    Loop

  19. #19
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Pour clore le hors sujet concernant la fonction Dir, voir mes démonstrations de la discussion

    Utilisation de la Fonction DIR dans une double boucle, de quoi occuper tes longues soirées d'hiver !




    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  20. #20
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Être fixé sur l'idée d'un automatisme pilotant Internet Explorer est souvent la solution la moins bonne !

    Utiliser l'outil d'inspection d'un navigateur (exemple en page 8 post #152 de la discussion d'itwoo) afin
    de vérifier si la page Web effectue une requête pour charger les données avant d'enregistrer le fichier car
    piloter IE ne s'avère alors plus du tout nécessaire ! Une requête étant bien plus rapide, sans temporisation …

    Consulter le tutoriel VBA et développement Web comme les exemples dans les discussions de ce forum.
    Certes ce n'est plus du niveau débutant, mais une fois passé le cap de la création de sa première requête …


    Troisième et ultime étape bonus : charger directement les données via une requête !

    Coller cette fois le code dans le module de la feuille de calculs recevant les données :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Sub DemoEuroNextUltimateCSV()
        Const URL = "https://www.euronext.com/fr/popup/data/download?ml=nyx_pd_stocks&cmd=default&formKey=nyx_pd_filter_values%3A1006ef55d4998cc0fad71db6a6f38530"
        Dim SP$()
     
        With CreateObject("WinHttp.WinHttpRequest.5.1")
            .Open "POST", URL, False
            .SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
            .SetRequestHeader "DNT", "1"
            On Error Resume Next
            .Send "format=2&layout=2&decimal_separator=1&date_format=2&op=Go&form_build_id=form-012b89570ed12b8fd45fd8a762dbabc9&form_id=nyx_download_form"
            If .Status <> 200 Then MsgBox "Erreur de connexion !", 16, Space(9) & Split(URL, "/")(2): Exit Sub
            On Error GoTo 0
            SP = Split(.ResponseText, vbLf)
        End With
     
        If InStr(SP(0), """ISIN""") = 0 Then MsgBox "Données indisponibles", 48, Space(10) & Split(URL, "/")(2): Exit Sub
         Application.ScreenUpdating = False:     Me.UsedRange.Clear
        [G1:N1].HorizontalAlignment = xlCenter
                                 L& = UBound(SP) - (SP(UBound(SP)) > "")
        With Cells(2).Resize(L)
            .Value = Application.Transpose(SP)
            .TextToColumns Semicolon:=True, DecimalSeparator:="."
        End With
     
        Me.Name = Cells(2, 2).Value & " " & Cells(3, 2).Text:  Cells(3, 2).Clear
     
        With Cells(4, 14).Resize(L - 3)
            If Application.CountIf(.Cells, "-") Then .AutoFilter 1, "-": _
                     .SpecialCells(xlCellTypeVisible).EntireRow.Delete Else .Rows(1).Delete
        End With
     
        With Cells(4, 2).CurrentRegion
            Union(.Columns(5), .Columns(11)).HorizontalAlignment = xlCenter
               Union(.Columns("F:I"), .Columns(13)).NumberFormat = "#,##0.000 "
                                       .Columns(12).NumberFormat = "#,##0 "
            .Columns("A:D").AutoFit:   .Columns(10).AutoFit:   .Columns(13).AutoFit
        End With
     
        Rows("2:3").Delete
        Cells(1).CurrentRegion.Columns(5).Replace "é", "é", xlPart
        Me.Activate:  Cells(2, 1).Select:  ActiveWindow.FreezePanes = True
    End Sub
     
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
                                           Static COL&
        With Cells(1).CurrentRegion
            If Target.Value > "" And Not Intersect(.Rows(1), Target) Is Nothing Then
                Cancel = True:     COL = IIf(Target.Column = COL, 0, Target.Column)
                .Sort Target, 2 + (COL > 0), Header:=xlYes
            End If
        End With
    End Sub
    • Lignes n°5 à 14 : bloc de la requête chargeant directement en mémoire les données !
    La ligne n°13 sépare les données par ligne dans une variable tableau

    • Ligne n°20 à 23 : transfert des lignes de données de la variable tableau vers la feuille de calculs.

    • Ligne n°27 à 30 : c'est comme l'effet Kiss Cool, un p'tit bonus dans le bonus, la suppression des lignes sans capitaux !

    • Et c'est pas fini ! Encore un bonus avec l'évènement Worksheet_BeforeDoubleClick afin de trier une colonne !
      Lors de tests courant décembre, le fichier étant soudainement livré en vrac, j'ai ajouté un tri dans la procédure.
      Puis le fichier a de nouveau été trié …
      L'avantage du code de cet évènement est de pouvoir trier n'importe quelle colonne en double-cliquant sur son titre !
      Et en double-cliquant encore sur le titre de la même colonne, le tri est alors inversé !

    • La ligne n°40 s'occupe de l'unique caractère accentué à décoder.
      Dans le cas d'une kyrielle de caractères à convertir, c'est vite fastidieux de construire une table d'équivalence !
      Soit utiliser une fonction de conversion, j'en ai développé une petite couvrant les caractères français courants
      pouvant être prise en défaut pour d'autres langues, voir aussi les exemples dans les discussions de ce forum
      mais en général ce sont de grosses Bertha, soit enregistrer quand même les données dans un fichier local puis
      l'ouvrir via l'ActiveX ADODB.Stream en paramétrant sa propriété Charset en utf-8 pour assurer la conversion …

    • La procédure peut aussi être située dans un module normal, cependant ne pas oublier alors de
      respecter la hiérarchie d'Excel en précisant bien dans le code la feuille recevant les données …


    Et merci de ne pas oublier le guide en votant pour chaque post contribuant à l'enrichissement de vos connaissances !

    _________________________________________________________________________________________________
    La meilleure façon de ne pas avancer est de suivre une idée fixe. (Jacques Prévert)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. Forcer l'ouverture d'un fichier avec Excel
    Par Cda01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2011, 16h47
  2. [XL-2003] Ouverture d'un fichier par excel en 3 exemplaires
    Par basto dans le forum Excel
    Réponses: 1
    Dernier message: 25/08/2009, 18h05
  3. ouverture d'un fichier avec excel sous vs.net 2003
    Par lesultan2007 dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/07/2009, 16h46
  4. Telecharger un fichier excel depuis le web via PERL
    Par ptimos93800 dans le forum Web
    Réponses: 3
    Dernier message: 19/03/2009, 19h38
  5. [vbexcel]automatiser l'ouverture d'un fichier
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2005, 18h33

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