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 :

Valeurs non prise en comptes [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut Valeurs non prise en comptes
    Bonjour,

    j'ai developpé un code pour calculer plusieurs valeurs en fonction de différents taux:

    j'explique:

    si la cellule Bi par exemple contient un taux=13.76%
    ALORS la cellule AEi se calcule ainsi (Ji+Mi)*22.38% et la cellule BKi=(Ji+Mi)*77.62%

    Dans la 1ère partie du code Bi= celpourcent Ji et Mi sont respectivement cel1 et cel2 et p est dans chaque cas le pourcentage par lequel on multiplie Ji+Mi
    Ainsi de suite pour les différents taux qui sont enumérés
    Dans le seconde partie du code

    il ya juste un paramètre de plus pour lequel on a les valeurs 993 ou 997.


    Seulement le code tourne très bien pour la plus part des valeurs sauf 3 valeurs qui ne sont pas calculées du ce sont les valeurs 0.074; 0.0912;0.137

    j'ai fouillé mais je ne comprends pourquoi. je ne sais pas si quelqu'un a t il eu dejà à faire à ce type de problème ou certaines valeurs ne sont pas calculées et d'autres le sont correctement ?
    je précise bien que les fonctions sont séparées les unes des autres ensuite les valeurs qui ne sont pas calculées sont case 0.0137 soit 13.70% en suite le 0.074 soit 7.40% , le 0.0912 soit 9.12%

    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
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    Function MaFonction(CelPourcent As Range, Cel1 As Range, Cel2 As Range)
    Dim p As Single
     
    Select Case CelPourcent
        Case 0.113: p = 0.1095
        Case 0.1135: p = 0.1119
        Case 0.114: p = 0.1143
        Case 0.115: p = 0.119
        Case 0.121: p = 0.1476
        Case 0.122: p = 0.1524
        Case 0.127: p = 0.1762
        Case 0.1275: p = 0.1786
        Case 0.128: p = 0.181
        Case 0.1315: p = 0.1976
        Case 0.1326: p = 0.2029
        Case 0.134: p = 0.2095
        Case 0.135: p = 0.2143
        Case 0.137: p = 0.2238
        Case 0.1375: p = 0.2262
        Case 0.1376: p = 0.2267
        Case 0.1389: p = 0.2329
        Case 0.139: p = 0.2333
        Case 0.1391: p = 0.2338
        Case 0.1405: p = 0.2405
        Case 0.1414: p = 0.2448
        Case 0.142: p = 0.2476
        Case 0.1421: p = 0.2481
        Case 0.1432: p = 0.2533
        Case 0.145: p = 0.2619
        Case 0.1453: p = 0.2633
        Case 0.1454: p = 0.2638
        Case 0.1458: p = 0.2657
        Case 0.1468: p = 0.2705
        Case 0.147: p = 0.2714
        Case 0.1473: p = 0.2729
        Case 0.1474: p = 0.2733
        Case 0.1479: p = 0.2757
        Case 0.1485: p = 0.2786
        Case 0.1487: p = 0.2795
        Case 0.1489: p = 0.2805
        Case 0.1492: p = 0.2819
        Case 0.1495: p = 0.2833
        Case 0.15: p = 0.2857
        Case 0.1505: p = 0.2881
        Case 0.1509: p = 0.29
        Case 0.1514: p = 0.2924
        Case 0.155: p = 0.3095
        Case 0.1567: p = 0.3176
        Case 0.158: p = 0.3238
        Case 0.1586: p = 0.3267
        Case 0.1597: p = 0.3319
        Case 0.1609: p = 0.3376
        Case 0.1616: p = 0.341
        Case 0.164: p = 0.3524
        Case 0.165: p = 0.3571
        Case 0.1671: p = 0.3671
        Case 0.169: p = 0.3762
        Case 0.1696: p = 0.379
        Case 0.1716: p = 0.3886
        Case 0.1725: p = 0.3929
        Case 0.173: p = 0.3952
        Case 0.1738: p = 0.399
        Case 0.174: p = 0.4
        Case 0.1894: p = 0.4733
        Case 0.193: p = 0.4905
        Case 0.197: p = 0.5095
        Case 0.201: p = 0.5286
        Case 0.2025: p = 0.5357
        Case 0.21: p = 0.5714
        Case 0.216: p = 0.6
        Case 0.238: p = 0.7048
        Case 0.2494: p = 0.759
        Case 0.257: p = 0.7952
        Case 0.262: p = 0.819
        Case 0.2685: p = 0.85
        Case 0.27: p = 0.8571
        Case 0.2775: p = 0.8929
        Case 0.2832: p = 0.92
        Case 0.3: p = 1
     
     
     
        'etc... autant de conditions que tu veux
    End Select
     
    MaFonction = (Cel1 + Cel2) * p
     
    End Function
    Function Fonction(CelPourcent As Range, Cel1 As Range, Cel2 As Range, cel3 As Range)
     
    Dim p As Single
     
     
     
     
    Select Case CelPourcent
     
     
         Case 0.044: p = 1
         Case 0.45: p = 1
         Case 0.0716: p = 0.08
         Case 0.074: p = 0.2
         Case 0.077: p = 0.35
         Case 0.08: p = 0.5
         Case 0.085: p = 0.75
         Case 0.0852: p = 0.76
         Case 0.09: p = 1
         Case 0.0906: p = 1
         Case 0.0912: p = 1
         Case 0.095: p = 1
         Case 0.102: p = 1
         Case 0.113: p = 0.8905
         Case 0.1135: p = 0.8881
         Case 0.114: p = 0.8857
         Case 0.115: p = 0.881
         Case 0.121: p = 0.8524
         Case 0.122: p = 0.8476
         Case 0.127: p = 0.8238
         Case 0.1275: p = 0.8214
         Case 0.128: p = 0.819
         Case 0.13: p = 0.8095
         Case 0.1315: p = 0.8024
         Case 0.1326: p = 0.7971
         Case 0.134: p = 0.7905
         Case 0.135: p = 0.7857
         Case 0.137: p = 0.7762
         Case 0.1375: p = 0.7738
         Case 0.1376: p = 0.7733
         Case 0.1389: p = 0.7671
         Case 0.139: p = 0.7667
         Case 0.1391: p = 0.7662
         Case 0.1405: p = 0.7595
         Case 0.1414: p = 0.7552
         Case 0.142: p = 0.7524
         Case 0.1421: p = 0.7519
         Case 0.1432: p = 0.7467
         Case 0.145: p = 0.7381
         Case 0.1453: p = 0.7367
         Case 0.1454: p = 0.7362
         Case 0.1458: p = 0.7343
         Case 0.1468: p = 0.7295
         Case 0.147: p = 0.7286
         Case 0.1473: p = 0.7271
         Case 0.1474: p = 0.7267
         Case 0.1479: p = 0.7243
         Case 0.1485: p = 0.7214
         Case 0.1487: p = 0.7205
         Case 0.1489: p = 0.7195
         Case 0.1492: p = 0.7181
         Case 0.1495: p = 0.7167
         Case 0.15: p = 0.7143
         Case 0.1505: p = 0.7119
         Case 0.1509: p = 0.71
         Case 0.1514: p = 0.7076
         Case 0.152: p = 0.7048
         Case 0.1527: p = 1
         Case 0.155: p = 0.6905
         Case 0.1567: p = 0.6824
         Case 0.158: p = 0.6762
         Case 0.1586: p = 0.6733
         Case 0.1597: p = 0.6681
         Case 0.1609: p = 0.6624
         Case 0.1616: p = 0.659
         Case 0.164: p = 0.6476
         Case 0.165: p = 0.6429
         Case 0.1671: p = 0.6329
         Case 0.169: p = 0.6238
         Case 0.1696: p = 0.621
         Case 0.1716: p = 0.6114
         Case 0.1725: p = 0.6071
         Case 0.173: p = 0.6048
         Case 0.1738: p = 0.601
         Case 0.174: p = 0.6
         Case 0.1894: p = 0.5267
         Case 0.193: p = 0.5095
         Case 0.197: p = 0.4905
         Case 0.201: p = 0.4714
         Case 0.2025: p = 0.4643
         Case 0.21: p = 0.4286
         Case 0.216: p = 0.4
         Case 0.238: p = 0.2952
         Case 0.2494: p = 0.241
         Case 0.257: p = 0.2048
         Case 0.262: p = 0.181
         Case 0.2685: p = 0.15
         Case 0.27: p = 0.1429
         Case 0.2775: p = 0.1071
         Case 0.2832: p = 0.08
     
        End Select
     
    Fonction = Cel1 * p + Cel2 * p
     
     
     
     Select Case cel3.Value
     
     Case 993, 997
     
     
     Fonction = (Cel1 + Cel2) * 0
     
     
     End Select
     
     
     
    End Function
    Sub ventilation()
     
    Dim i As Integer, ColDep As Integer, ColFin As Integer, LigDep As Integer, DerLig As Integer
     
    ColDep = 15 '<-- colonne de départ O
    ColFin = 125 '<-- colonne de fin = DU
    LigDep = 5 '<-- première ligne
    DerLig = Cells(Rows.Count, 1).End(xlUp).Row '<-- dernière ligne
     
    Application.ScreenUpdating = False
    For i = ColDep To ColFin
        Cells(LigDep, i).AutoFill Destination:=Range(Cells(LigDep, i), Cells(DerLig, i)), Type:=xlFillDefault
    Next
     
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Difficile de te répondre sans savoir quelle fonction ne tourne pas.
    En effet tu as 2 fonctions l'une se nomme maFonction et l'autre fonction.
    Si c'est la deuxième, il me semble que tu as déjà posé la question il y a quelques jours et l'on t'a répondu qu'à cette ligne (201), il y avait une erreur Fonction = (Cel1 + Cel2) * 0, le résultat étant forcément toujours 0
    En passant, évite de donner une nom avec une telle ambiguïté entre le nom réservé Function et le nom que tu donnes Fonction.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Pour rebondir sur corona, si tu veux réaliser l'opération suivante :
    "si dans Cel3 j'ai la valeur 993 ou 997 alors je retourne 0"
    => je te propose plutot de mettre :
    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
    Function Fonction(CelPourcent As Range, Cel1 As Range, Cel2 As Range, Cel3 As Range)
    Dim p As Single
     
    If Cel3.Value = 993 or Cel3.Value = 997 Then
        Fonction = 0
     
    Else
        Select Case CelPourcent.Value
     
            Case ##: p=##
     
        End Select
     
    Fonction = (Cel1.Value * p) + (Cel2.Value * p)
    End If
     
    End Function

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    Oui en fait les deux fonctions tournent bien mais le seul problème ce sont les valeurs que j'ai indiquées:

    le traitemnt de ces valeurs concernent les deux fonctions.

    0.074
    0.0912
    0.137

    Tout le rest marche bien

    il n'y a aucun problème au niveau des cas 9993 et 997 cette partie du problème est resolue

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    Oui en fait les deux fonctions tournent bien mais le seul problème ce sont les valeurs que j'ai indiquées:

    0.074
    0.0912
    0.137



    le traitement de ces valeurs concernent les deux fonctions.

    Tout le reste marche bien

    il n'y a aucun problème au niveau des cas 9993 et 997 cette partie du problème est resolue

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    As-tu essayé le mode pas à pas pour ces valeurs ?

    Es-tu sûr que les données d'entrées sont vraiment égales aux valeurs 0.074, 0.0912, 0.137 ? (virgules à la place de points ou inversement)

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    Bonjour,

    il n'y a pas d'erreur sur les valeurs 0.074;0.0912 et 0.137

    Ces valeurs sont telles qu'elles apparaissent dans le code dans mon 1er message. le mode pas à pas ne donne pas grand chose toujours le même résultat: en fait ce que je ne comprends pas c'est que certaines valeurs sont correctement calculées alors que d'autres non.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par jeandani2012 Voir le message
    Bonjour,
    il n'y a pas d'erreur sur les valeurs 0.074;0.0912 et 0.137
    Ces valeurs sont telles qu'elles apparaissent dans le code dans mon 1er message. le mode pas à pas ne donne pas grand chose toujours le même résultat: en fait ce que je ne comprends pas c'est que certaines valeurs sont correctement calculées alors que d'autres non.
    Il y a forcément une explication. Le mode pas à pas ne sert pas uniquement à vérifier s'il y a une erreur mais permet aussi de vérifier le contenu des variables et arguments passés à la procédure. Place un espion sur les arguments et variables avec le debogueur ainsi tu pourras vérifier pas à pas s'il y a changement et quand.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par jeandani2012 Voir le message
    Oui en fait les deux fonctions tournent bien mais le seul problème ce sont les valeurs que j'ai indiquées:
    le traitemnt de ces valeurs concernent les deux fonctions.
    0.074
    0.0912
    0.137
    Tout le rest marche bien
    il n'y a aucun problème au niveau des cas 9993 et 997 cette partie du problème est resolue
    Bon alors, j'ai testé tes 2 fonctions (maFonction et Fonction) avec comme paramètres les 3 valeurs dont tu parles plus haut.
    L'une renvoie 0 et l'autre un message d'erreur #VALEUR ce qui est normal parce-que Fonction attends 4 paramètres et pas 3, merci d'envoyer des codes correctement terminé.
    La première renvoie 0 à cause du fait que dans le Select Case il n'y a pas de test sur 0.074.
    Si j'ajoute en première ligne Case 0.074: p = 10 cela fonctionne parfaitement.
    Vu le nombre incalculable de données que tu testes dans ton Select Case, pour ma part, j'utiliserais une table dans une feuille [Paramètres]
    ce qui limiterais ton test à 1 ligne, te permettrait si tu persistes à faire du VBA de tester tout de même avec un simple RECHERCHEV si le calcul se fait correctement.
    Si l'on utilises une table sur 2 colonnes contenant toutes les données de ton Select case (Plage I3:J78)
    Je place tes 3 valeurs en A7, B7, C7, voici une petite formule d'une ligne en Excel qui renvoie exactement le même résultat que la fonction VBA maFonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =(B7 + C7) * RECHERCHEV(A7;$I$3:$J$78;2;0)
    La plage I3:J78 que tu peux bien entendu placer sur une autre feuille et aussi la nommer.
    Formule que tu peux transposer en VBA en utilisant la table en lieu et place d'un Select Case totalement indigeste à lire et surtout la maintenance sera plus aisée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =(B7 + C7) * RECHERCHEV(A7;$I$3:$J$78;2;0)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    En fait dans mafonction il ya 3 paramètres

    Bi, Ji et Mi representés par celpourcent, cel1 et cel2


    Dans Fonction il ya 4 paramètres qui sont celpourcent, cel1, cel2 et cel3

    Bi Ji Mi et Gi juste pour faire le caclcul au cas où Gi prends les valeurs 993 ou 997.


    je ne comprends pas quand tu me dis que dans le select case il n'y pas de test sur le 0.074 pourtant ça fait bien partie de la liste à tester .

  11. #11
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une remarque à part, ta fonction MaFonction étant linéaire peut s'écrire simplement comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function MaFonction(ByVal CelPourcent As Double, ByVal Cel1 As Double, ByVal Cel2 As Double) As Double
     
    MaFonction = (Cel1 + Cel2) * (4.761825312 * CelPourcent - 0.428561486)
    End Function

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Citation Envoyé par mercatog Voir le message
    Une remarque à part, ta fonction MaFonction étant linéaire peut s'écrire simplement comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function MaFonction(ByVal CelPourcent As Double, ByVal Cel1 As Double, ByVal Cel2 As Double) As Double
    MaFonction = (Cel1 + Cel2) * (4.761825312 * CelPourcent - 0.428561486)
    End Function
    La tête dans le capot, je n'avais vu que les données étaient linéaires .
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  13. #13
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    Rebonjour corona ,

    j'ai analysé les formules que tu as données mais ça ne correspond pas vraiement à ce que je veux faire parce qu'en fait:

    pour la 1ère partie des formules (B7+C7) c'est bien;mais la recherche v va ramener le taux qui est en A7 or ce n'est pas ce taux qui multiplie les valeurs

    exemple pour ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Case 0.113: p = 0.1095
        Case 0.1135: p = 0.1119
    pour un taux B7 =0.113 (b7+c7) sera multiplié par 0.1095
    et pour le taux de 0.1135 (B7+C7) sera multiplié par 0.1119

    alors que la recherche v va ramener le taux en A7

    je ne comprends pas la fonction linéaire vous pouvez expliquez un peu le code ?

    Merci d'avance

  14. #14
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Dans ton code initial, si tu avais tracé p en fonction de CelPourcent, tu aurais remarqué que c'est une droite d'équation p=a*CelPourcent + b.
    Il suffisait de trouver a et b (par exemple par la formule droitereg)


    EDIT

    Je rejoins Philippe sur la méthodologie. Au lieu d'écrire en dur les correspondants de chaque taux, il suffit de l'écrire dans une feuille à part et de rapatrier les données à l'aide d'une simple rechercheV.
    C'est mieux pour la maintenance.

  15. #15
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    j'ai essayé la recherchev mais le problème qui se pose c'est que toute les valeur Bi n'appartiennet pas à la plage alors il me ramène des N/A pour ces valeurs

  16. #16
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Si tes données sont triés et si le 4ème argument de RechercheV est omis ou VRAI, RechercheV rapporte la valeur immédiatement inférieure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(0.1136;A1:B76;2)
    donne 0.1119

  17. #17
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    En fait ici il ne s'agit pas de prendre une valeur proche:
    si la valeur appartient à la plage ramener la valeur correspondante, sinon zéro et avec la recherchev on ne peut avoir que la valeur proche au lieu de zéro ce qui n'est ce que je recherche!

  18. #18
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Excel 2007 et plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(RECHERCHEV(I2;A1:B76;2;FAUX);0)
    Excel 2003 et précédents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNA(RECHERCHEV(I2;A1:B76;2;FAUX));0;RECHERCHEV(I2;A1:B76;2;FAUX))

  19. #19
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    Pour le moment j'obtiens le même résultat avec la formule qu'avec vba

    il ya toujours trois valeurs qui ne sont pas correctement calculées mais je penses que les methodes sont bonnes: j'ai chargé une nouvelle plage et tous les calculs sont bons

  20. #20
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    apparement les valeurs non prises sont du à un pb de formatage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeur au clavier non prise en compte
    Par benstan dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 03/06/2011, 12h39
  2. Valeur champs non prise en compte
    Par alexking2005 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/11/2009, 12h56
  3. Réponses: 1
    Dernier message: 06/08/2008, 16h58
  4. getchar et scanf : valeur non prise en compte
    Par Angelina007 dans le forum C
    Réponses: 8
    Dernier message: 25/10/2007, 14h47
  5. [VBA-A] valeur non prise en compte par un composant
    Par robert_trudel dans le forum VBA Access
    Réponses: 4
    Dernier message: 01/07/2006, 23h25

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