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 :

Débogage fonction VBA Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut Débogage fonction VBA Excel
    Bonjour,


    J'ai écrit une fonction nommé 'FY' sous VBA; afin de la rentrer dans une cellule du classeur. Après avoir tapé "=FY(X,Y,Z)" dans ma cellule, une erreur de type #VALEUR s'affiche.
    J'aurais donc aimé savoir comment trouver d'ou vient l'erreur...

    J'ai vu plusieurs méthodes pour débugger sur le net, mais elles s'appliquent au débogage de "Sub" et non de "Function"... Je suis un peu perdu, et un coup de main serait le bienvenue!

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Les méthodes de débogages marche sur une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     sub test()
    Debug.print FY(X,Y,Z)
    End sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut
    Merci pour la réponse!

    En effet cela marche. Lorsque j'exécute mon code, une erreur de type 13 apparait. En fait, j'utilise en valeur d'entrée un tableau "DONNEES" rentré dans le tableur, et je récupère les valeurs de ce tableau en déclarant des variables du type:
    a=DONNEES(1)
    b=DONNEES(2)
    Etc....

    L'erreur apparait à ce niveau là.

    Pour être plus parlant, voici mon code:

    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
    Function Acc(PNEU, DONNEES, RAYON, ALPHA, BETA) As Double
    
    'Récupération données véhicule
    
    
    MasseMs = DONNEES(1) %Apparition de l'erreur 13
    CentrageM = DONNEES(2)
    MasseMnSAV = DONNEES(3)
    MasseMnSAR = DONNEES(4)
    Massepilote = DONNEES(5)
    HcdGMnS = DONNEES(6)
    ZHcdGMS = DONNEES(7)
    Voieavant = DONNEES(8)
    Voiearriere = DONNEES(9)
    empattement = DONNEES(10)
    RaideurressortAV = DONNEES(11)
    RaideurressortAR = DONNEES(12)
    RaideurBARAV = DONNEES(13)
    RaideurBARAR = DONNEES(14)
    RaideurPNEU = DONNEES(15)
    InertieTanguage = DONNEES(16)
    ButeedetenteOhlins = DONNEES(17)
    ButeecompressionOhlins = DONNEES(18)
    PackersAV = DONNEES(19)
    CdRAV = DONNEES(20)
    CdRAR = DONNEES(21)
    OuvertureD = DONNEES(22)
    OuvertureG = DONNEES(23)
    CarossageD = DONNEES(24)
    CarossageG = DONNEES(25)
    HdCD = DONNEES(26)
    HdCG = DONNEES(27)
    MRRAV = DONNEES(28)
    MRRAR = DONNEES(29)
    MRARBAV = DONNEES(30)
    
    
    'Initialisation Accélération LAT
    Ayinit = 1
    
    'Calcul du poids au roue inital
    MasseTot = Massepilote + MasseMs + MasseMnSAV + MasseMnSAR
    FZAvd = MasseTot * (1 - CentrageM) / 4
    FZAvg = MasseTot * (1 - CentrageM) / 4
    FZArd = MasseTot * CentrageM / 4
    FZArg = MasseTot * CentrageM / 4
    
    
    'Calcul Vitesse liénaire/lacet initiale
    V = Sqr(RAYON * Ayinit)
    Vlacet = Ayinit / V
    
    For i = 1 To 3
    
    
    'Calcul des angles de dérives
    
    'FRONT
    
    'Geometric
    VRF = RAYON * Vlacet
    VYRFGeom = VRF * Sin(Atn(ALPHA - RAYON * Sin(BETA) / (Vlacet * Cos(BETA) - Voieavant / 2)))
    VXRFGeom = VRF * Cos(Atn(ALPHA - RAYON * Sin(BETA) / (Vlacet * Cos(BETA) - Voieavant / 2)))
    Debug.Print VXRFGeom
    
    'From Yaw Speed
    VXRFYawSpeed = (Sqr(Voieavant / 2 + (CentrageM) * empattement) * Vlacet * Cos(Atn(Voieavant / 2 / ((CentrageM) * empattement))))
    VYRFYawSpeed = (Sqr(Voieavant / 2 + (CentrageM) * empattement) * Vlacet * Sin(Atn(Voieavant / 2 / ((CentrageM) * empattement))))
    
    VYRF = VYRFGeom + VYRFYawSpeed
    VXRF = VXRFGeom + VXRFYawSpeed
    
    'Final value for front (Approximation Slipangle avant droite = slip angle avant gauche)
    SlipAngleRF = Atn(VYRF / VXRF)
    SlipAngleLF = SlipAngleRF
    
    'REAR
    
    'Geometric
    VRR = RAYON * Vlacet
    VYRRGeom = VRR * Sin(Atn(RAYON * Sin(BETA) / (Vlacet * Cos(BETA) - Voiearriere / 2)))
    VXRRGeom = VRR * Cos(Atn(RAYON * Sin(BETA) / (Vlacet * Cos(BETA) - Voiearriere / 2)))
    
    'From Yaw Speed
    VXRRYawSpeed = (Sqr(Voiearriere / 2 + (1 - CentrageM) * empattement) * Vlacet * Cos(Atn(Voiearriere / 2 / ((1 - CentrageM) * empattement))))
    VYRRYawSpeed = (Sqr(Voiearriere / 2 + (1 - CentrageM) * empattement) * Vlacet * Sin(Atn(Voiearriere / 2 / ((1 - CentrageM) * empattement))))
    
    VYRR = VYRRGeom + VYRRYawSpeed
    VXRR = VXRRGeom + VXRRYawSpeed
    
    'Final value for front (Approximation Slipangle avant droite = slip angle avant gauche)
    SlipAngleRR = Atn(VYRR / VXRR)
    SlipAngleLR = SlipAngleRR
    
    
    FYAvd = 2 * FZAvd + SlipAngleRF + CarossageD
    FYAvg = FZAvg + SlipAngleLF + CarossageG
    FYArd = FZArd * SlipAngleRR * CarossageD
    FYArg = FZArg + SlipAngleLR + CarossageG + 0.1
    
    'Calcul de l'Ay correspondant
    Acc = (FYAvd + FYAvg + FYArd + FYArg) / MasseTot
    
    'Calcul de l'angle de roulis
    RaideurRoulisPneuAV = RaideurPNEU * Voieavant * Voieavant / 2
    RaideurRoulisPneuAR = RaideurPNEU * Voiearriere * Voiearriere / 2
    RaideurRoulisPneu = RaideurRoulisPneuAV + RaideurRoulisPneuAR
    RaideurRoulisBARAV = RaideurBARAV * MRARBAV * MRARBAV
    RaideurRoulisBARAR = RaideurBARAR * MRARBAR * MRARBAR
    RaideurRoulisBAR = RaideurRoulisBARAV + RaideurRoulisBARAR
    RaideurRoulisRessortAV = RaideurressortAV * (3.14 / 180) * 0.5 / (MRRAV * MRRAV) * Voieavant * Voieavant
    RaideurRoulisRessortAR = RaideurressortAR * (3.14 / 180) * 0.5 / (MRRAR * MRRAR) * Voiearriere * Voiearriere
    RaideurRoulisRessort = RaideurRoulisRessortAV + RaideurRoulisRessortAR
    AntiRollTorqueFront = (RaideurRoulisRessortAV + RaideurRoulisBARAV) * RaideurRoulisPneuAV / (RaideurRoulisRessortAV + RaideurRoulisBARAV + RaideurRoulisPneuAV)
    AntiRollTorqueRear = (RaideurRoulisRessortAR + RaideurRoulisBARAR) * RaideurRoulisPneuAR / (RaideurRoulisRessortAR + RaideurRoulisBARAR + RaideurRoulisPneuAR)
    RollAngle = (MasseMs * Acc * (CdG - ((CdRAV + CdRAR) / 2))) / (RaideurRoulisPneu + RaideurRoulisBAR + RaideurRoulisRessort)
    
    
    'Calcul des nouveaux transferts de charge
    SElasticWTfront = MasseMs * (1 - CentrageM) * Acc * (CdG - CdRAV) / Voieavant * (AntiRollTorqueFront / (AntiRollTorqueFront + AntiRollTorqueRear))
    SElasticWTrear = MasseMs * CentrageM * Acc * (CdG - CdRAR) / Voiearriere * (AntiRollTorqueRear / (AntiRollTorqueFront + AntiRollTorqueRear))
    LatGeoWT = MasseMs * Acc * CdRAV / ((Voieavant + Voiearriere) / 2)
    LatNsWT = ((MasseMnSAV + MasseMnSAR) / 2 * Acc * HcdGMnS) / ((Voieavant + Voiearriere) / 2)
    
    
    'Calcul du poids au roues
    FZAvd = MasseTot * (1 - CentrageM) / 4 + SElasticWTfront + LatGeoWT + LatNsWT
    FZAvg = MasseTot * (1 - CentrageM) / 4 - SElasticWTfront - LatGeoWT - LatNsWT
    FZArd = MasseTot * CentrageM / 4 + SElasticWTrear + LatGeoWT + LatNsWT
    FZArg = MasseTot * CentrageM / 4 - SElasticWTrear - LatGeoWT - LatNsWT
    
    'Calcul de la nouvelle vitesse
    V = Sqr(RAYON * Acc)
    Vlacet = Acc / V
    
    Next
    
    End Function

    Mon code n'est pas très compliqué, juste un enchainement de calculs un peu lourd... Mais n'ayant pas trop l'habitude du VBA, je n'arrive pas à trouver l'erreur.


    Une idée?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Ton tableau est très certainement du type variant et si ta variable qui reçoit la valeur est numérique Err.
    mynum=cdbl(T(1))

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2015
    Messages : 20
    Par défaut
    Désolé de mon ignorance, mais que signifie

    mynum=cdbl(T(1)) ?

    Ou dois je le placer?

  6. #6
    Invité
    Invité(e)
    Par défaut
    MasseMs = Cdbl(DONNEES(1) )

Discussions similaires

  1. [XL-2007] fonction vba excel problème avec hh:mm:ss
    Par chantalina dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/01/2010, 15h47
  2. [XL-2002] Fonctions Vba Excel
    Par Floriang33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/07/2009, 16h04
  3. [VBA-E] Calcul fonction VBA-excel
    Par I folima Elda dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/04/2008, 20h39
  4. Exécution d'une fonction VBA excel
    Par jekixu dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/12/2007, 09h39
  5. [VBA-E] Fonction VBA EXCEL Subtotal
    Par CléoB dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/09/2007, 16h32

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