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 :

Manipulation de string après import de données du web [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2018
    Messages : 6
    Par défaut Manipulation de string après import de données du web
    Bonjour,

    Un sujet "presque en or"

    Dans le cadre de mon travail je dois récupérer chaque jour sur un site internet les cours de métaux et la parité €/$.
    Comme c'est fastidieux et que le site où les données se trouvent est stable... j'essaye d'écrire un programme pour récupérer ces données.

    Ce qui fonctionne :
    • Récupérer toutes les données de la page internet sur une page temporaire
    • Isoler dans une colonne de la page temporaire les données qui m'intéressent et qui sont des strings type "Or - 1er fixing : 34424,40 €/ kg - 2è fixing : 34347,24 €/ kg"
    • Spliter chaque string en fonction des espaces et inscrire les données splitées dans les cellules adjacentes.


    Question 1 :
    J'ai un problème à l'importation de la donnée "Parité €/$" : La donnée sur le web est du type 1,1234
    A l'import, en bon Américain, Excel le colle comme le nombre 12345... donc sans la virgule (Voir feuille "Temporaire")
    A noter que certains jours, il n'y a pas 4 chiffres après la virgule mais seulement 3 et alors Excel le reconnaitra par exemple pour 1,123 comme étant bien 1,123...
    D'où ma question --> Est-ce qu'il est possible pour que dès l'import, peu importe les "n" chiffres après la virgule Excel reconnaisse bien cette donnée comme un chiffre à virgule ?

    Question 2 :
    Comment récupérer dans un tableau les données aux bons formats ? ça me semblait être le plus simple et pourtant... je sèche et me mélange les pinceaux avec les différents formats et avec la recherche de données dans ma feuille
    Voilà la liste de ce que je veux récupérer (Ebauche de tableau final sur la feuille "Accueil") :
    • La date qui est importée en format texte (15/03/18) à mettre dans une cellule au format "jj/mm/aaaa" --> 15/03/2018
    • Le cours des 4 métaux précieux qui ont chacun soit 1 fixing (Argent) ou 2 fixings (Or, Platine, Palladium) par jour à récupérer dans des cellules au format " type "# ##0,00 €" (éventuellement "# ##0,00 €/kg") --> 34 347,24 € (ou 34 347,24 €/kg)
    • La parité €/$ au format numérique "0,0000"


    Merci d'avance pour votre aide

    Edit message : Fichier d'origine supprimé... tout est dans les réponses de Marc-L et PatrickToulon

  2. #2
    Expert éminent
    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
    Par défaut
    Bonjour !

    Rappel :   Important : Fichiers joints dans les discussions   …

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub DemoQ1()
        S$ = "1,234"
        [B2].Value = S
        [B4].FormulaLocal = S
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub DemoQ2()
        S$ = "15/03/18"
        [D2].Value = S
        [D4].FormulaLocal = S
    End Sub
    ___________________________________________________________________________________________________________

         Merci de cliquer sur en bas à droite de chaque message ayant aidé …

  3. #3
    Expert éminent
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub DemoQ2bis()
        S$ = "01/03/18"
        [D2].Value = S
        [D4].FormulaLocal = S
    End Sub
    ___________________________________________________________________________________________________________

         Merci de cliquer sur en bas à droite de chaque message ayant aidé …

  4. #4
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2018
    Messages : 6
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour !

    Rappel :   Important : Fichiers joints dans les discussions   …
    Merci pour cette info, j'ai supprimé l'adresse où je récupérais les données même si c'est un site et des données public et donc j'ai créé une page web perso avec les mêmes données et modifié mon fichier Excel en conséquence.
    L'avantage c'est qu'en plus maintenant je peux tester plein de chiffres différents...

    Merci aussi pour les codes, je ne connais pas cette syntaxe, je vais regarder ça de plus prêt dans la soirée... Faut déjà que je trouve où insérer ces codes

  5. #5
    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
    bonsoir

    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
    Sub test()
        Dim Oor, or1, or2, platine, paL1, paL2, argent, argent1
        URL = "http://www.cookson-clal.com/mp/rss_mpfr_cdl.jsp"
        With CreateObject("microsoft.xmlhttp")
            .Open "get", URL, False: .send: code = .responsetext
        End With
        Oor = Split(code, "<title>Or")(1)
        or1 = Split(Split(Oor, "1er fixing : ")(1), "/")(0)
        or2 = Split(Split(Oor, "2è fixing : ")(1), "/")(0)
        platine = Split(code, "<title>Platine")(1)
        plat1 = Split(Split(platine, "1er fixing : ")(1), "/")(0)
        plat2 = Split(Split(platine, "2è fixing : ")(1), "/")(0)
        argent = Split(code, "<title>Argent")(1)
        argent1 = Split(Split(argent, "1er fixing : ")(1), "/")(0)
        palladium = Split(code, "<title>Palladium")(1)
        paL1 = Split(Split(palladium, "1er fixing : ")(1), "/")(0)
        paL2 = Split(Split(palladium, "2è fixing : ")(1), "/")(0)
        parité = Split(Split(code, "Parité €/$  : ")(1), vbCrLf)(0)
     
        Debug.Print "pour l'or c'est : " & or1 & " et " & or2
        Debug.Print "pour platine  c'est : " & plat1 & " et " & plat2
        Debug.Print "pour le palladium   c'est : " & paL1 & " et " & paL2
        Debug.Print "pour l argent  c'est : " & argent1
        Debug.Print "pour parité  c'est : " & parité
    End Sub
    etc.....etc....
    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

  6. #6
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2018
    Messages : 6
    Par défaut
    Merci à vous deux ! ça fonctionne parfaitement, testé dans Excel 10 et 13

  7. #7
    Expert éminent
    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
    Par défaut Des fonctionnalités internes d'Excel …
    Citation Envoyé par Ludo5550 Voir le message
    Un sujet "presque en or"

    Question 1 : Est-ce qu'il est possible pour que dès l'import, peu importe les "n" chiffres après la virgule
    Excel reconnaisse bien cette donnée comme un chiffre à virgule ?

    Question 2 : Comment récupérer dans un tableau les données aux bons formats ?
    ça me semblait être le plus simple et pourtant...
    Citation Envoyé par Marc-L Voir le message
    la voie fonctionnant quelle que soit la configuration régionale
    Oui un sujet d'école, Excel disposant déjà de tout le nécessaire en interne pour répondre au besoin
    et ce, sans se prendre la tête, quelle que soit la configuration régionale de Windows !

    Déjà l'unique instruction VBA XmlImport chargeant le fichier xml directement dans une feuille de calculs,
    comme la ligne n°6 du code suivant …

    Pour transformer du texte en données exploitables de type nombre & date, là encore c'est
    facile via la fonctionnalité d'Excel Convertir comme dans les lignes n°19 & 23 ci-dessous …

    Tout le reste du code étant de la cosmétique de présentation des cellules !

    La matrice du code a été générée via l'Enregistreur de macro, donc à la portée d'un débutant.
    Évidemment je l'ai quelque peu remanié pour le rendre plus propre, sans sélection, …

    Procédure à coller dans le module d'une feuille (Feuil1) :
    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
    Sub DemoXML()
        V = 36 + ([B7].Interior.ColorIndex = 36)
        Application.ScreenUpdating = False
        Me.UsedRange.Clear
        On Error Resume Next
        ThisWorkbook.XmlImport "http://www.cookson-clal.com/mp/rss_mpfr_cdl.jsp", Nothing, True, [A2]
        If Err.Number Then MsgBox "Problème réseau !", vbCritical, "        Import XML": Exit Sub
        ThisWorkbook.XmlMaps(1).Delete
        On Error GoTo 0
        [A2].ListObject.Unlist
        [A1:I1,L1:O1].EntireColumn.Delete
        [B5].Copy [B2]
        [B10].Cut [B3]
        Me.UsedRange.Columns(1).Clear
        Me.UsedRange.Replace " : ", vbTab, xlPart
        Me.UsedRange.Replace "- 1er fixing", "", xlPart
        Me.UsedRange.Replace "  - 2è fixing", "", xlPart
        Me.UsedRange.Replace " €/ kg", "", xlPart
        Me.UsedRange.TextToColumns Tab:=True, DecimalSeparator:=","
        Me.UsedRange.VerticalAlignment = xlCenter
        Columns(1).ColumnWidth = Me.StandardWidth
        [A2:A3,A5:A9].RowHeight = 18
        [B2].TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array([{0, 1}], [{9, 4}])
        [B5:D5].Value = [{"","1er fixing","2ème fixing"}]
        [C2:C3,C5:D5].HorizontalAlignment = xlCenter
        [C6:D9].NumberFormat = "#,##0.00 ""€/ kg""_-"
        [B2:B3,C5:D5,B6:B9].Font.Bold = True
        [B2:B3,B6:B9].IndentLevel = 1
        Me.UsedRange.Columns.AutoFit
        [B7:C7,B9:D9].Interior.ColorIndex = V
        Application.Goto [A1], True
        Application.ScreenUpdating = True
    End Sub
    ___________________________________________________________________________________________________________

         Merci de cliquer sur en bas à droite de chaque message ayant aidé …

  8. #8
    Expert éminent
    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
    Par défaut
    Citation Envoyé par Ludo5550 Voir le message
    La donnée sur le web est du type 1,1234
    A l'import, en bon Américain, Excel le colle comme le nombre 12345... donc sans la virgule
    Tu as décris le classique souci de la configuration régionale de Windows au format français
    tant pour les nombres comme pour les dates JJ/MM/AA, d'où l'astuce dans mes p'tites démonstrations …
    Attention cette astuce ne fonctionne que pour cette configuration régionale, en aucun cas pour celles anglo-saxonnes !

    Donc il y a deux voies possibles : la voie franco française réservée uniquement à notre configuration régionale
    et la voie internationale à l'anglo-saxonne mais fonctionnant quelle que soit la configuration régionale,
    de laquelle as-tu réellement besoin ?


    Citation Envoyé par Ludo5550 Voir le message
    éventuellement "# ##0,00 €/kg" --> 34 347,24 €/kg
    Comme les données sont toujours importées au même endroit, il est inutile d'alourdir le code
    car il suffit juste une fois pour toute de formater manuellement en catégorie personnalisée les cellules …

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Connexion à Share Point après importation de données Excel
    Par Nico820 dans le forum VBA Access
    Réponses: 7
    Dernier message: 30/03/2018, 15h05
  2. [XL-2007] Créer une fonction pour importer une donnée du web
    Par tomatotep dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/02/2016, 18h41
  3. [XL-2010] "Out of memory" à la fin d'une routine manipulant des "string" importants
    Par langeard dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2015, 10h20
  4. Manipulation de SQLITE , import de donnée avec parametre CSV
    Par IPreferCSharp dans le forum SQLite
    Réponses: 0
    Dernier message: 13/10/2013, 22h43
  5. Réponses: 16
    Dernier message: 07/05/2009, 13h23

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