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

Excel Discussion :

vba nom ambigu detecté dans un call


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 17
    Points : 9
    Points
    9
    Par défaut 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 : 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
    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
    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 : 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

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Bonjour,

    Pas le temps de tester mais il y a un truc qui me chiffonne...

    Dans ton Mail tu appelle la procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call RecupEuribor12M.recup_euribor12m
    Alors que le nom de la sub est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub recup_recup_euribor12m()
    Essaie plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call recup_recup_euribor12m
    A+

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Au vu de ta ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call RecupEuribor12M.recup_euribor12m
    Et du message nom ambigu que tu reçois, j'en conclu que tu as un nom de module qui porte le même nom d'une procédure qui s'y trouve.
    Il faut nommé ton module d'un autre nom que ta procédure.

Discussions similaires

  1. [XL-2002] Erreur nom ambigu detecté a l'ouverture d'un userform
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/12/2014, 19h45
  2. [XL-2010] "Nom ambigu detecté : ~"
    Par julie_ob dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 23/07/2013, 12h09
  3. [VBA]Nom de la requete dans code vb
    Par anisr dans le forum SDK
    Réponses: 1
    Dernier message: 05/02/2007, 17h03
  4. [VBA-E]Liste des noms de classeur dans un dossier
    Par Lexot2 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/09/2006, 21h04
  5. [VBA E] nom de feuille dans une combobox
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 20/06/2006, 19h53

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