Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA-Récupération automatique taux de change sur web

alexos

XLDnaute Nouveau
Bonjour tout le monde,

Je suis en train de travailler sur une fonction qui me permettrait de récupérer automatiquement un taux de change sur le web en fonction d'une date donnée, à partir d'un fichier xml.

Le fichier xml est le suivant, actualisé tous les jours :

https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml?b23f48754f2aee6a789698825f3b7217

Je suis parti d'une base trouvée sur ce forum :

Récupération automatique tx de change sur web

Cependant je bloque sur l'adaptation du code, étant donné que je souhaite avoir le taux correspondant à une date donnée qui s'affiche dans ma textbox "DateSaisie" (j'ai du adapter le format de date pour qu'il retrouve dans le fichier xml d'ailleurs)

Voici où j'en suis :

Code:
Function ImportXmlEurofXref()

Dim xmlDoc As DOMDocument, xmlCube As IXMLDOMNode, xmlNode As IXMLDOMNode, xmlNodeTime As IXMLDOMNode

Dim strCur As String, strRate As String, curRate As Currency
Dim strDecCar As String, strThCar As String, strTstFmt As String

strTstFmt = Format(1234.5678, "#,##0.0000")
If Len(strTstFmt) = 10 Then
   strThCar = Mid(strTstFmt, 2, 1)
Else
   strThCar = ""
End If
strDecCar = Mid(strTstFmt, Len(strTstFmt) - 4, 1)

Set xmlDoc = New DOMDocument
' Charge fichier xml
xmlDoc.Load "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml?b23f48754f2aee6a789698825f3b7217"

' Attendre que le document soit interprété
While (xmlDoc.parsed = False)
    DoEvents
Wend
 
' Format fichier xml :
' ---------------------------------------------------
'   <Cube>
'       <Cube time="2016-04-18">
'           <Cube currency="USD" rate="1.2555"/>
'           ....
'           <Cube currency="ZAR" rate="13.2079"/>
'       </Cube>
'   </Cube>
 
' Obtenir premier élément "Cube" dans le document
Set xmlCube = xmlDoc.DocumentElement.SelectSingleNode("Cube")

 For Each xmlNodeTime In xmlCube.ChildNodes

' Elément "Cube" de niveau inférieur
'Set xmlNodeTime = xmlCube.SelectSingleNode("Cube")

'Adaptation du format de date pour le retrouver dans le doc xml
 If DateSaisie.Value = formatDate(xmlNodeTime.Attributes.getNamedItem("time").NodeValue, "dd/mm/yyyy") Then
 
' Boucler sur les noeuds inférieurs (<Cube currency="CCC" rate="n.nnnn"/>)
'  et récupérer les attributs "time", "currency" et "rate".
'  Le taux est EUR/DEVISE (1 EUR = n.nnnn CCC)
    For Each xmlNode In xmlNodeTime.ChildNodes
        
        If Devise.Value = xmlNode.Attributes.getNamedItem("currency").NodeValue Then

        
            strCur = xmlNode.Attributes.getNamedItem("currency").NodeValue
            strRate = xmlNode.Attributes.getNamedItem("rate").NodeValue
            strRate = Replace(strRate, ".", strDecCar)
            curRate = CCur(strRate)
            
        
        End If
 
    'Debug.Print "1 EUR = " & curRate & " " & strCur, strRate
 
    ' Rechercher la devise l'insérer dans la textbox



    Next
End If
Next

ENDP:

 
Set xmlCube = Nothing
Set xmlDoc = Nothing
 
End Function

L'objectif final est d'afficher dans la textbox appelée "TauxDev" le taux récupéré sur le site en fonction du code de devise (ex : GBP, USD) de la textbox "Devise" et en fonction du jour récupéré grâce à la date dans la textbox "DateSaisie"

Si quelqu'un pouvait m'aider à avancer ça serait top même si j'ai conscience que c'est difficile à comprendre sans fichier (que je ne peux pas mettre malheureusement, il s'agit d'un fichier d'entreprise...)

Un grand Merci à ceux qui prendront le temps de me lire !
 
Dernière modification par un modérateur:

alexos

XLDnaute Nouveau
Re : Récupération automatique taux de change sur web

Voilà à quoi ressemble mon UserForm ! (Les noms des textbox sont ceux inscrits au dessus)



Le code Devise s'affiche automatiquement en fonction du pays sélectionné

Merci !
 

Pièces jointes

  • Untitled.png
    7.5 KB · Affichages: 96
Dernière modification par un modérateur:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…