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 :

Erreur type mismatch


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 4
    Par défaut Erreur type mismatch
    Bonjour a tous, j'ai une erreur que je n'arrive pas a résoudre, j'obtient l'erreur Type Mismatch quand je donne comme parametre une plage de donnees, pouvez-vous m'aider?

    Merci

    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
    Option Compare Binary
    Option Explicit
    Option Base 1
     
    #Const DEBUG_ = False                           'Compilation conditionnelle
    Private Const EPSILON As Double = 0.00000001    'Précision minimale
    Private Const MAX_ITER As Long = 1000           'Nombre maximal d'itérations
    Private Const EM As Double = 0.577215664901533  'La constante d'Euler-Mascheroni
     
    'Cette fonction retourne la valeur de la fonction mathématique digamma (psi):
     
    Private Function digamma(x As Double) As Double
        Dim s As Double, n As Long
     
        For n = 0 To MAX_ITER
            s = s + 1 / (n + 1) - 1 / (n + x)
        Next
     
        digamma = s - EM
    End Function
     
    'Cette fonction retourne la valeur de la fonction mathématique trigamma (psi-prime):
     
    Private Function trigamma(x As Double) As Double
        Dim n As Long, s As Double
     
        For n = 0 To MAX_ITER
            s = s + (n + x) ^ -2
        Next
     
        trigamma = s
    End Function
     
    'Procédure principale:
     
    Public Function calcEMV(ByRef r As Range) As Double()
        Dim p(1 To 2) As Double          'p = (alpha, tau)
        Dim g(1 To 2) As Double          'le gradient
        Dim h(1 To 2, 1 To 2) As Double  'la matrice hessienne
        Dim s(1 To 3) As Double
        Dim c As Long, t As Variant, k As Variant
        Dim n As Long, mu As Double, var As Double
     
        With Application.WorksheetFunction
            n = r.Cells.Count
            s(1) = 0
            s(2) = 0
            s(3) = 0
            For Each k In r.Cells
                s(1) = s(1) + Log(k.Value)
                s(2) = s(2) + Log(k.Value) ^ 2
                s(3) = s(3) + Log(Log(1 / k.Value))
            Next
     
            mu = (-1 / n) * s(1)
            var = (s(2) / n) - mu ^ 2
            p(1) = mu ^ 2 / var 'alpha-MM
            p(2) = mu / var 'tau-MM
     
     
            c = 0
     
            Do
                #If DEBUG_ Then
                'À compléter...
                #End If
     
                c = c + 1
                g(1) = Log(p(2)) - digamma(p(1)) + s(3)
                g(2) = p(1) / p(2) + s(1)
                h(1, 1) = -n * trigamma(p(1))
                h(1, 2) = n / p(2)
                h(2, 1) = h(1, 2)
                h(2, 2) = -n * (p(1) / p(2) ^ 2)
                t = .Transpose(.MMult(.MInverse(h), .Transpose(g)))
                p(1) = p(1) - t(1)
                p(2) = p(2) - t(2)
            Loop Until Sqr(.SumSq(g)) <= EPSILON Or c >= MAX_ITER
        End With
     
        calcEMV = p
        Exit Function
     
    GESTION_ERREUR:
       'À compléter...
    End Function
     
    Sub test111()
        Dim rng As Range
        Set rng = Feuil9.Range("A2:A5")
        calcEMV (rng)
    End Sub

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 161
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    dans ta procédure test111, ta feuille est mal nommée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub test111()
        Dim rng As Range
        Set rng = Sheets("Feuil9").Range("A2:A5")
        calcEMV (rng)
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 4
    Par défaut
    J'obtient maintenant une erreur index out of range mais ma feuille est bien nomée

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par hades777 Voir le message
    J'obtient maintenant une erreur index out of range mais ma feuille est bien nomée
    Oui mais quelle ligne ?

    Si tu cliques sur "Débogage" dans l'InjureBox, tu vas arriver sur la ligne en cause surlignée en rouge.

    Ceci dit, je n'ai pas vérifié en profondeur, mais si tu boucles à partir de 0 et que tu utilises les mêmes indices en même temps pour accéder à des cellules de la feuille de calcul, cela peut très bien arriver. Dans Excel, la colonne a c'est la colonne 1 et la ligne 1, c'est la ligne 1.

    Le message d'erreur "index out of range" est généralement lié à des problèmes de ce genre:

    Avoir des tableaux dimensionnés 1 to 6 et essayer d'atteindre l'élément 0 ou l'élément 7
    Avoir A7 comme dernière cellule et essayer de lire "A8". (C'est le genre de choses qui peut arriver quand on utilise cells() pour boucler un plage.
    Avoir une collection de 10 éléments et essayer d'atteindre le onzième.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 4
    Par défaut
    Il semble y avoir un probleme avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rng = Sheets("Feuil9").Range("A2:A5")

Discussions similaires

  1. - Erreur Type Mismatch - additem Sheets( ).cells( )
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/07/2007, 18h51
  2. Erreur type mismatch
    Par bugland dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/03/2007, 19h54
  3. Erreur : Type mismatch !
    Par Interruption13h dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/01/2007, 21h21
  4. Erreur type Mismatch
    Par bov13 dans le forum Access
    Réponses: 7
    Dernier message: 25/09/2006, 11h22
  5. Erreur : Type Mismatch
    Par ekinoxe dans le forum ASP
    Réponses: 1
    Dernier message: 17/02/2006, 10h51

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