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?
puis le code de mon main() :
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 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
et ma subroutine recup_euribor12m() :
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 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
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
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
Partager