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 d'execution '13' : incompatibilité de type


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    Par défaut erreur d'execution '13' : incompatibilité de type
    bonjour,
    j'ai le message d'erreur d'execution '13' : incompatibilité de type dans mon code, et je ne comprends pas pourquoi, surtout qu'il me semble qu'il marchait à un moment...
    l'erreur se situe dans mon module fonction à la ligne du calcul du facteur d'actualisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function facteur_actualisation(TEG As Variant, duree As Variant) As Variant
     
        facteur_actualisation = 1 / ((1 + TEG) ^ duree)
     
    End Function
    et voici 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
    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
     
    Sub MAIN()
     
    Dim feuil As Variant
    Dim nomonglet As String
     
    ' Message box
    'Dim annee As String
    'annee_s = InputBox(vbCrLf & vbCrLf & "Année de référence?")
     
    For Each feuil In Worksheets
       If feuil.Name = "TEG" Then
        nomonglet = feuil.Name
     
        Dim n, x, i, j, duree_i, nbre_echeances As Integer
        Dim TEG, CRD_i, capital_i, interets_i, echeance_i, facteur_actualisation_i, echeance_actualisee_i, taux_i, taux_amortissement, flux_debit, flux_credit, flux_nul, frais As Double
     
     
    'nom de la feuille recup correspondante à nomonglet
    Sheets(nomonglet).Select
     
     
    ' initialisation
    n = Range("C65536").End(xlUp).Row
    x = Range("IV19").End(xlToLeft).Column
    j = 2
    nbre_echeances = 17
     
    'initialisation de la premiere ligne
        TEG = Sheets(nomonglet).Cells(2, 7).Value
        frais = Sheets(nomonglet).Cells(2, 5).Value
        taux_amortissement = Sheets(nomonglet).Cells(3, 5).Value
     
        duree_i = 0
        CRD_i = Sheets(nomonglet).Cells(6, 4).Value
        capital_i = 0
        interets_i = 0
        taux_i = Sheets(nomonglet).Cells(6, 3).Value
        echeance_i = echeance(capital_i, interets_i)
        facteur_actualisation_i = facteur_actualisation(TEG, duree_i)
        echeance_actualisee_i = echeance_actualisee(echeance_i, facteur_actualisation_i)
        flux_credit = 0
     
     
        flux_credit = CRD_i + frais
     
        For i = 7 To 23
            duree_i = duree_i + 1
            taux_i = Sheets(nomonglet).Cells(i, 3).Value
            interets_i = interets(taux_i, duree_i, CRD_i)
     
            If i = 7 Then
            capital_i = capital_initial(taux_amortissement, CRD_i, nbre_echeances)
     
            Else
            capital_i = capital(taux_amortissement, capital_i)
     
            End If
     
            CRD_i = CRD_i - capital_i
            echeance_i = echeance(capital_i, interets_i)
            facteur_actualisation_i = facteur_actualisation(TEG, duree_i)
            echeance_actualisee_i = echeance_actualisee(echeance_i, facteur_actualisation_i)
     
            flux_debit = flux_debit + echeance_actualisee_i
     
     
        Sheets(nomonglet).Cells(i, 4) = CRD_i
        Sheets(nomonglet).Cells(i, 5) = capital_i
        Sheets(nomonglet).Cells(i, 6) = interets_i
        Sheets(nomonglet).Cells(i, 7) = echeance_i
        Sheets(nomonglet).Cells(i, 8) = facteur_actualisation_i
        Sheets(nomonglet).Cells(i, 9) = echeance_actualisee_i
     
        Next
     
        flux_nul = flux_debit - flux_credit
     
       Sheets(nomonglet).Cells(25, 9) = flux_debit
       Sheets(nomonglet).Cells(26, 9) = flux_credit
       Sheets(nomonglet).Cells(27, 9) = flux_nul
     
        End If
    Next
     
    End Sub

    merci encore pour votre aide !!!

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Par défaut
    Bjr,

    Pourquoi mettre des variants partout ????

    Je vous conseille ce code , plus propre ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function facteur_actualisation(TEG As Double, duree As Integer) As Double
     
        facteur_actualisation = 1 / ((1 + TEG) ^ duree)
     
    End Function
    A vous d'adapter le reste du code , attribuez un type pertinent pour chaque variable

    bon courage

  3. #3
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    En cas de déclaration de plusieurs variables avec le même Dim, vous devez préciser le type de donnée pour chaque variable.
    voir :
    Utiliser les variables en VBA Excel

    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

Discussions similaires

  1. Erreur d'execution 13 : incompatibilité de type
    Par forum2015 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 31/07/2014, 18h05
  2. [XL-2010] erreur d'execution 13 incompatibilité de type
    Par rattus34 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/05/2012, 15h08
  3. erreur d'exécution 13 incompatibilité de type
    Par glamgeek dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/03/2009, 12h03
  4. "erreur d'exécution 13 : incompatibilité de type"
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 19/07/2007, 15h47
  5. erreur d'exécution 13, incompatibilité de type
    Par PHPdudimanche dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/06/2007, 15h20

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