vba nom ambigu detecté dans un call
bonjour à tous,
J'ai crée une userform qui demande à l'utilisateur de rentrer des parametre ( ici ce sera des dates). Je veux utiliser ces dates dans une subroutine MAIN() qui appelle une autre subroutine recup_euribor12m() (qui se sert de ces dates pour aller sur internet). Mon problème est que je n'arrive pas à utilier cette autre subroutine, j'ai un message d'erreur sur la variable date_versement: "nom ambigu détecté". Je ne vois pas pourquoi j'ai cette erreur alors que j'ai utilisé cette variable dans mon MAIN() pour autre chose...
est-ce que quelqu'un connait ce genre d'erreur et pourrait m'aider svp?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
date_versement = parametres.case_date_versement.Value
date_versement = Format(date_versement, "dd/mm/yyyy")
date_premiere_echeance = parametres.case_date_premiere_echeance.Value
date_date_premiere_echeance = Format(date_premiere_echeance, "dd/mm/yyyy")
date_emission = parametres.case_date_emission.Value
date_emission = Format(date_emission, "dd/mm/yyyy")
'choix de la périodicité
If (choix1 = True) Then
periodicite = 1
ElseIf (choix2 = True) Then
periodicite = 2
ElseIf choix3 = True Then
periodicite = 4
ElseIf choix4 = True Then
periodicite = 12
End If |
puis le code de mon main() :
Code:
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
|
Option Explicit
Public w, date_emission, date_versement, date_premiere_echeance, date_echeance_avant periodicite As Double
Public amortissement, tauxvar As String
Public tauxeuribor12m As Double
Public lienInternet As SHDocVw.InternetExplorer
Public pageInternet As MSHTML.HTMLDocument
Public leTaux As MSHTML.HTMLSpanElement
Public tauxWeb As String
'le userfom renvoie au MAIN
Sub MAIN()
ThisWorkbook.Application.Visible = True
'début du code de la version précédente (modifié)
Dim feuil As Variant
Dim nomonglet As String
nomonglet = feuil.Name
Dim n, i, j, nbre_echeances, duree_i, nbre_iterations, nbre_ech1, nbre_ech2, nbre_ech3 As Integer
dim taux as double
Dim date_avant, date_echeance, date_debut, date_fin As Date
nbre_echeances = nombre_echeances(duree_an, duree_mois, periodicite, x1) ' cette fonction marche
date_fin = DateAdd("m", Val(nbre_echeances * 12 / periodicite), date_versement)
'sur le site, la date de début commence avec un an de décalage, donc on décale aussi
date_debut = DateAdd("m", Val(-12 / periodicite), date_versement)
'MsgBox "la date de début est " & (date_debut)
Call RecupEuribor12M.recup_euribor12m |
et ma subroutine recup_euribor12m() :
Code:
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
Option Explicit
Public date_emission, date_versement, periodicite, nbre_echeances As Double
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub recup_recup_euribor12m()
'Déclaration des variables
Dim IE As New InternetExplorer
Dim pageInternet As Object
Dim login, motDePasse As Object
Dim InputGoogleBouton As Object
Dim lesEntrees As Object
Dim CasedateCotation As Object
Dim i As Integer
Dim dateCotation As String
Dim selectionTaux As Object
Dim CasedateDebut As Object
Dim CasedateFin As Object
Dim boutonPeriodicite As Object
Dim boutonValider As Object
Dim cadreValider As Object
Dim date_debut, date_fin As Date
Dim date_versement_bis As Date
date_versement_bis = date_versement
'ByVal dateEmission As Date, dateDebut As Date, dateFin As Date) As Double 'rajouter la périodicité en parametre
date_fin = DateAdd("m", Val(nbre_echeances * 12 / periodicite), date_versement_bis)
'sur webdette, la date de début commence avec un an de décalage, donc on décale aussi
date_debut = DateAdd("m", Val(-12 / periodicite), date_versement_bis)
'MsgBox "la date de début est " & (date_debut)
'on verifie que la valeur du paramatre est bien une date
If IsDate(date_emission) = True Then
'c'est une date donc on la converti au format attendu
dateCotation = Format(CDate(date_emission), "dd/mm/yyyy")
date_debut = Format(CDate(date_debut), "dd/mm/yyyy")
date_fin = Format(CDate(date_fin), "dd/mm/yyyy")
Else 'ce n'est pas une date
MsgBox "le parametre n'est pas une date "
Exit Sub
End If
'Chargement d'une page web Google
IE.navigate "https://www.seldon-finance.com/seldon/login.html"
'Affichage de la fenêtre IE
IE.Visible = True
'On attend le chargement complet de la page
' WaitIE IE
Sleep 5000
'On pointe le membre Document
Set pageInternet = IE.Document
'AGIR SUR UN BOUTON
'On pointe notre login
Set login = pageInternet.getElementById("IdWebDette")
'On définit le texte que l'on souhaite placer à l'intérieur
login.Value = "chubert"
'On pointe notre mot de passe
Set motDePasse = pageInternet.getElementById("txtPwd_WebDette")
'On définit le texte que l'on souhaite placer à l'intérieur
motDePasse.Value = "baichah2"
'on se connecte a l'espace privé webdette
IE.navigate "https://webdette.seldon-finance.com/WebDette/esp_public/login"
Sleep 5000
'on va dans données de marché -> Visu. Taux Fututrs
IE.navigate " https://webdette.seldon-finance.com/WebDette/esp_privat/visutauxfutur"
Sleep 5000
Set pageInternet = IE.Document
'récupération des objets "input"
Set lesEntrees = pageInternet.getElementsByTagName("input")
'on boucle pour retrouver le champ date de la form
For i = 0 To lesEntrees.Length - 1
'pour la recherche on utilise l'ID
If lesEntrees(i).ID = "date_cotation" Then
'le WaitIE plus haut ne suffit pas à garantir que la page à pris en compte la nouvelle valeur de date
'on vas donc boucler pour verifier
Do
lesEntrees(i).Value = dateCotation
Application.Wait Now + TimeValue("0:00:01")
DoEvents
Loop Until lesEntrees(i).Value = dateCotation
Exit For
End If
Next
'On va sur l'objet qui contient la liste des indices
Set selectionTaux = pageInternet.all("codeTaux1")
'On sélectionne l'indice "EURIBOR12M" via sa valeur unique
selectionTaux.Value = "EURIBOR12M"
'on prend la date de la premiere échéance
Set CasedateDebut = pageInternet.getElementById("date_deb")
CasedateDebut.Value = "01/01/2012" 'mettre dateDebut a la place
'on prend la date de la dernière échéance
Set CasedateFin = pageInternet.getElementById("date_fin")
CasedateFin.Value = "01/01/2020" ' mettre dateFin a la place
'on choisi la periodicité
Set lesEntrees = pageInternet.getElementsByTagName("input")
'on boucle pour retrouver le champ date de la form
For i = 0 To lesEntrees.Length - 1
'pour la recherche on utilise l'ID
If lesEntrees(i).Value = "12" Then
'le WaitIE plus haut ne suffit pas à garantir que la page à pris en compte la nouvelle valeur de date
'on vas donc boucler pour verifier
Do
Set boutonPeriodicite = lesEntrees(i)
boutonPeriodicite.setAttribute "checked", True
Application.Wait Now + TimeValue("0:00:01")
DoEvents
Loop Until lesEntrees(i).Value = "12"
Exit For
End If
Next
Sleep 3000
' on appuie sur le bouton valider
pageInternet.forms(0).submit
'On libère les variables
Set IE = Nothing
Set lesEntrees = Nothing
Set pageInternet = Nothing
End Sub
Sub WaitIE(IE As InternetExplorer)
'On boucle tant que la page n'est pas totalement chargée
Do Until IE.readyState = READYSTATE_COMPLETE
DoEvents
Loop
End Sub |