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épassement de capacité et oubli des valeurs calculées


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Etudiant géologue (M2)
    Inscrit en
    Octobre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant géologue (M2)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 36
    Par défaut Dépassement de capacité et oubli des valeurs calculées
    Bonjour,

    Je suis en M2 Géosciences et je dois réaliser un programme avec des notions vues en cours.
    Mais là mon programme bug sans que je ne sache pourquoi...

    En faite j'ai plusieurs commandbutton. Dans un "commandbutton" j'ai fait des calculs de moyenne, ecart-type, variance... et ça marche très bien.
    Mais quand dans un autre "commandbutton" je désire utiliser ces valeurs pour faire un graphe avec une droite de régression il me met une erreur "dépassement de capacité", et quand je veux printer dans ce button une des valeurs calculées précedemment il ne print rien...
    Du coup j'ai refait mon programme en y incluant un module où je rends toutes ces valeurs publiques mais rien à faire ça ne marche toujours pas !!!

    Cela pourrait venir de quoi ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par LudOL56 Voir le message
    Cela pourrait venir de quoi ?
    De la qualité de ma boule de cristal.
    On fait comment pour deviner le problème sans code, message d'erreur, etc. ?


    Et merci de mettre un titre plus adéquat avec la question, celui-ci est trop généraliste et ne cerne pas le problème. De plus le mot Help est inutile, on s'en doute.

    Philippe

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant géologue (M2)
    Inscrit en
    Octobre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant géologue (M2)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 36
    Par défaut
    Le problème c'est que mon code est un peu long...

    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
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    Private Sub Command1_Click()
     
    Dim NOM_FICHIER As String
    Dim FICHIER As String
    Dim a As Integer
    Dim n°obj(1 To 1000) As Integer
    Dim xc(1 To 1000) As Integer
    Dim yc(1 To 1000) As Integer
    Dim s(1 To 1000) As Integer
    Dim d(1 To 1000) As Integer
    Dim xx(1 To 1000) As Integer
    Dim yy(1 To 1000) As Integer
    Dim class(1 To 1000) As Integer
    Dim angle°(1 To 1000) As Integer
    Dim ligne As String
    Dim moyenne1 As Integer
    Dim moyenne2 As Integer
    Dim moyenne3 As Integer
    Dim moyenne4 As Integer
    Dim moyenne5 As Integer
    Dim moyenne6 As Integer
    Dim moyenne7 As Integer
    Dim variance1 As Integer
    Dim variance2 As Integer
    Dim variance3 As Integer
    Dim variance4 As Integer
    Dim variance5 As Integer
    Dim variance6 As Integer
    Dim variance7 As Integer
    Dim Ecart_type1 As Integer
    Dim Ecart_type2 As Integer
    Dim Ecart_type3 As Integer
    Dim Ecart_type4 As Integer
    Dim Ecart_type5 As Integer
    Dim Ecart_type6 As Integer
    Dim Ecart_type7 As Integer
     
     
    CHEMIN$ = File1.Path
    FICHIER$ = File1.filename
    NOM_FICHIER = CHEMIN$ + "\" + FICHIER$
    'Print NOM_FICHIER
     
    somme = 0
                Open NOM_FICHIER For Input As #1
                Input #1, TOTAL
                Line Input #1, ligne2
                'Print ligne1
                'Print ligne2
                'Print ligne3
                'Print TOTAL; " DONNÉES"
     
                Print
     
    'Calcul des Moyennes
     
                For n = 1 To TOTAL
                Input #1, n°obj(n), xc(n), yc(n), s(n), d(n), xx(n), yy(n), angle°(n)
                somme = somme + angle°(n)
                Next n
                moyenne1 = somme / TOTAL
                Print "la moyenne des angles est de "; moyenne1; "degrés"
     
                somme = 0
     
                For n = 1 To TOTAL
                somme = somme + xc(n)
                Next n
                moyenne2 = somme / TOTAL
                Print "la moyenne des xc est de "; moyenne2
     
                somme = 0
     
                For n = 1 To TOTAL
                somme = somme + yc(n)
                Next n
                moyenne3 = somme / TOTAL
                Print "la moyenne des yc est de "; moyenne3
     
                somme = 0
     
                For n = 1 To TOTAL
                somme = somme + s(n)
                Next n
                moyenne4 = somme / TOTAL
                Print "la moyenne des s est de "; moyenne4
     
                somme = 0
     
                For n = 1 To TOTAL
                somme = somme + d(n)
                Next n
                moyenne5 = somme / TOTAL
                Print "la moyenne des d est de "; moyenne5
     
                somme = 0
     
                For n = 1 To TOTAL
                somme = somme + xx(n)
                Next n
                moyenne6 = somme / TOTAL
                Print "la moyenne des xx est de "; moyenne6
     
                somme = 0
     
                For n = 1 To TOTAL
                somme = somme + yy(n)
                Next n
                moyenne7 = somme / TOTAL
                Print "la moyenne des yy est de "; moyenne7
     
                Print
     
    ' Calcul des écarts-types
     
                For n = 1 To TOTAL
                som_ET = som_ET + ((angle°(n) - moyenne1) ^ 2)
                Next n
                Ecart_type1 = Sqr((1 / TOTAL) * som_ET)
                Print "L'écart-type des angles est de "; Ecart_type1
     
                som_ET = 0
     
                For n = 1 To TOTAL
                som_ET = som_ET + ((xc(n) - moyenne2) ^ 2)
                Next n
                Ecart_type2 = Sqr((1 / TOTAL) * som_ET)
                Print "L'écart-type des xc est de "; Ecart_type2
     
                som_ET = 0
     
                For n = 1 To TOTAL
                som_ET = som_ET + ((yc(n) - moyenne3) ^ 2)
                Next n
                Ecart_type3 = Sqr((1 / TOTAL) * som_ET)
                Print "L'écart-type des yc est de "; Ecart_type3
     
                som_ET = 0
     
                For n = 1 To TOTAL
                som_ET = som_ET + ((s(n) - moyenne4) ^ 2)
                Next n
                Ecart_type4 = Sqr((1 / TOTAL) * som_ET)
                Print "L'écart-type des s est de "; Ecart_type4
     
                som_ET = 0
     
                For n = 1 To TOTAL
                som_ET = som_ET + ((d(n) - moyenne5) ^ 2)
                Next n
                Ecart_type5 = Sqr((1 / TOTAL) * som_ET)
                Print "L'écart-type des d est de "; Ecart_type5
     
                som_ET = 0
     
                For n = 1 To TOTAL
                som_ET = som_ET + ((xx(n) - moyenne6) ^ 2)
                Next n
                Ecart_type6 = Sqr((1 / TOTAL) * som_ET)
                Print "L'écart-type des xx est de "; Ecart_type6
     
                som_ET = 0
     
                For n = 1 To TOTAL
                som_ET = som_ET + ((yy(n) - moyenne7) ^ 2)
                Next n
                Ecart_type7 = Sqr((1 / TOTAL) * som_ET)
                Print "L'écart-type des yy est de "; Ecart_type7
     
                Print
     
    'Calcul des variances
                Var = 0
     
                For n = 1 To TOTAL
                Var = Var + ((angle°(n) - moyenne1) ^ 2)
                Next n
                variance1 = Var / TOTAL
                Print "la Variance des angles est de "; variance1
     
                Var = 0
     
                For n = 1 To TOTAL
                Var = Var + ((xc(n) - moyenne2) ^ 2)
                Next n
                variance2 = Var / TOTAL
                Print "la Variance des xc est de "; variance2
     
                Var = 0
     
                For n = 1 To TOTAL
                Var = Var + ((yc(n) - moyenne3) ^ 2)
                Next n
                variance3 = Var / TOTAL
                Print "la Variance des yc est de "; variance3
     
                Var = 0
     
                For n = 1 To TOTAL
                Var = Var + ((s(n) - moyenne4) ^ 2)
                Next n
                variance4 = Var / TOTAL
                Print "la Variance des s est de "; variance4
     
                Var = 0
     
                For n = 1 To TOTAL
                Var = Var + ((d(n) - moyenne5) ^ 2)
                Next n
                variance5 = Var / TOTAL
                Print "la Variance des d est de "; variance5
     
                Var = 0
     
                For n = 1 To TOTAL
                Var = Var + ((xx(n) - moyenne6) ^ 2)
                Next n
                variance6 = Var / TOTAL
                Print "la Variance des xx est de "; variance6
     
                Var = 0
     
                For n = 1 To TOTAL
                Var = Var + ((yy(n) - moyenne7) ^ 2)
                Next n
                variance7 = Var / TOTAL
                Print "la Variance des yy est de "; variance7
     
    Close #1
    End Sub
    --------------------------------------------------------------------
    Private Sub Command2_Click()
     
    Dim NOM_FICHIER As String
    Dim FICHIER As String
    Dim a As Integer
    Dim n°obj(1 To 1000) As Integer
    Dim xc(1 To 1000) As Integer
    Dim yc(1 To 1000) As Integer
    Dim s(1 To 1000) As Integer
    Dim d(1 To 1000) As Integer
    Dim xx(1 To 1000) As Integer
    Dim yy(1 To 1000) As Integer
    Dim class(1 To 1000) As Integer
    Dim angle°(1 To 1000) As Integer
    Dim ligne As String
    Dim moyenne1 As Integer
    Dim moyenne2 As Integer
    Dim moyenne3 As Integer
    Dim moyenne4 As Integer
    Dim moyenne5 As Integer
    Dim moyenne6 As Integer
    Dim moyenne7 As Integer
    Dim variance1 As Integer
    Dim variance2 As Integer
    Dim variance3 As Integer
    Dim variance4 As Integer
    Dim variance5 As Integer
    Dim variance6 As Integer
    Dim variance7 As Integer
    Dim Ecart_type1 As Integer
    Dim Ecart_type2 As Integer
    Dim Ecart_type3 As Integer
    Dim Ecart_type4 As Integer
    Dim Ecart_type5 As Integer
    Dim Ecart_type6 As Integer
    Dim Ecart_type7 As Integer
     
    CHEMIN$ = File1.Path
    FICHIER$ = File1.filename
    NOM_FICHIER = CHEMIN$ + "\" + FICHIER$
    Print NOM_FICHIER
     
                Open NOM_FICHIER For Input As #1
                Input #1, TOTAL
                Line Input #1, ligne2
                'Print ligne1
                'Print ligne2
                'Print ligne3
                'Print TOTAL; " DONNÉES"
     
                Print
     
    'Calcul de la covariance
     
     
                For n = 1 To TOTAL
                sigmaxy = (sigmaxy + ((s(n) - moyenne4)) * ((d(n) - moyenne5)) / TOTAL)
                Next n
     
                Print sigmaxy
     
    'Calcul du coefficient de corrélation
     
        'Calcul du dividande
                For n = 1 To TOTAL
                haut = haut + sigmaxy
                Next n
     
        'Calcul du diviseur
                For n = 1 To TOTAL
                bas = bas + (Sqr(variance5) * Sqr(variance4))
                Next n
     
     
        'Formule du coefficient de corrélation complète
                r_p = haut / bas
                Print "le coefficient de corrélation est de "; rp
     
    'Tracage des axes
    origine_x = 6000
    origine_y = 5000
    'Line (1, origine_y)-(origine_x * 2, origine_y)
    'Line (origine_x, 1)-(origine_x, (origine_y) * 2)
    rotv = 10        'rotation miroir verticale
    roth = -1000       'rotation miroir horizontale
    gainy = 1 / 300
    gainx = 10
        'Points
                For n = 1 To TOTAL
                new_x = (d(n) * rotv * gainx) + origine_x
                new_y = (roth * s(n) * gainy) + origine_y
               ' PSet (new_x, new_y), RGB(0, 0, 0)
                Next n
        'Droite de régression
        a = rp * (Ecart_type4 / Ecart_type5)
        x = n
        b = moyenne4 - a * moyenne5
        y = b + a * x
        'Print "a vaut"; a
        'Print "b vaut"; b
     
        'Print y
    debut = 0
    Max = 100
     
                For n = debut To Max
                new2_x = (n * rotv * gainx) + origine_x
                new2_y = (roth * (n * a) * gainy) + origine_y + b
                'PSet (new2_x, new2_y), RGB(255, 0, 0)
                Next n

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Déjà premier réflexe, tu rajoutes au début de chaque module de code
    Comme ça tu seras obligé de déclarer des variables et de t'interroger sur le fait que telle ou telle procédure y ait accès.

    Ensuite quand tu parles de variables globales, je ne les vois pas dans ton code. (Je ne l'ai pas trop regardé car comme tu dis, il est très long. Je pense que ça aurait pu être beaucoup plus clair en utilisant des sous-procédures ou sous-fonctions). Et pour info, il me semble que les variables globales ne marchent pas trop si elles sont placées sur le code d'une feuille et non d'un module.

    Pour ce qui est du dépassement de capacité, tu déclares toutes tes variables en Integer. Des moyennes, ecart-types et autres sont souvent plutôt des nombres réels et peuvent être supérieurs à la valeur maximale contenu dans un entier (37000 et quelques je crois). Essaie avec des Single ou des Double

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 980
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 980
    Par défaut
    Kie,

    Oh le vilain code ! (pris au sens : très mal conçu)

  6. #6
    Membre averti
    Homme Profil pro
    Etudiant géologue (M2)
    Inscrit en
    Octobre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant géologue (M2)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 36
    Par défaut
    Tout d'abord merci de ta réponse.
    J'ai effectivement essayé de replacer le Integer par Long et du coup ça me supprime mon problème de dépassement de capacité...
    Mais j'ai toujours le problème que le logiciel ne mémorise pas mes calculs de moyenne, variance... du commandbutton précédent...

    Citation Envoyé par droggo Voir le message
    Kie,

    Oh le vilain code ! (pris au sens : très mal conçu)
    Je suis entièrement d'accord avec toi mais je suis pas du tout dans l'informatique donc j'ai pas forcément pris les meilleures habitudes lol

  7. #7
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    En passant sur des Long, ça reste des entiers, donc il doit y avoir des arrondis quelque part.

    Sinon tu dis que tu as essayé avec des variables globales, lesquels et tu les as mises ou ?

  8. #8
    Membre averti
    Homme Profil pro
    Etudiant géologue (M2)
    Inscrit en
    Octobre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant géologue (M2)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 36
    Par défaut
    Qu'entends tu par variables globales ?

  9. #9
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    J'ai regardé un peu ton code quand même.
    Pour ton bouton Command1, sache qu'il existe déjà dans Excel des fonctions pour calculer la moyenne et l'écart-type, mais ce n'était sans doute pas le but de ton exercice. En revanche, tu pouvais créer une fonction moyenne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Function Moyenne(tab() As Double) as Double
      Dim somme As Double
      somme = 0
      Dim i As Integer
      For i = 0 To Ubound(tab)
        somme = somme + tab(i)
      Next i
      Moyenne = somme / (Ubound(tab) + 1)
    End Function
    et appliquer par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim angle°() As Double
    '... récupération de TOTAL
    Redim angle°(TOTAL - 1)
    '... récupération des tableaux
    moyenne1 = Moyenne(angle°)
    et faire pareil pour l'écart-type

    Ensuite dans le code de ton deuxième bouton, tu peux tout enlever jusqu'à la ligne 287, je ne sais pas pourquoi tu l'as recopié.

    Par contre, il aurait mieux valu placer ces codes dans la procédure d'un module, appelé par le bouton. Et déclarer en Public les variables que tu réutilises au début du module (en dehors de la procédure).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Public moyenne1 As Integer
     
    Public Sub ActionBouton1()
    '...
    End Sub

  10. #10
    Membre averti
    Homme Profil pro
    Etudiant géologue (M2)
    Inscrit en
    Octobre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant géologue (M2)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 36
    Par défaut
    En faite en cours on nous a appris à faire des calculs avec le moins de d'instructions possibles...mon programme dans l'ensemble, même si je peux comprendre que ça puisse choquer un puriste, il est comme il voudrais qu'on le lui rende (mon prof). Ce que je cherche juste à savoir c'est comment je peux dans mon second bouton, utiliser les moyennes et variances calculées dans le premier bouton ? Parceque là quand je demande au logiciel de me printer une des moyennes calculées il me dit "La moyenne de ... vaut 0"...

  11. #11
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Regarde la dernière partie de mon message dans ce cas, et reviens-moi s'il y a quelque chose que tu n'as pas compris.

  12. #12
    Membre averti
    Homme Profil pro
    Etudiant géologue (M2)
    Inscrit en
    Octobre 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant géologue (M2)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 36
    Par défaut
    Citation Envoyé par ZebreLoup Voir le message
    Regarde la dernière partie de mon message dans ce cas, et reviens-moi s'il y a quelque chose que tu n'as pas compris.
    J'ai pas tout compris en faite :/
    Voici ce que j'ai dans mon module:
    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
     
    Public NOM_FICHIER As String
    Public FICHIER As String
    Public a As Integer
    Public n°obj As Integer
    Public xc As Integer
    Public yc As Integer
    Public s As Integer
    Public d As Integer
    Public xx As Integer
    Public yy As Integer
    Public angle° As Integer
    Public moyenne_1 As Long
    Public moyenne_2 As Long
    Public moyenne_3 As Long
    Public moyenne_4 As Long
    Public moyenne_5 As Long
    Public moyenne_6 As Long
    Public moyenne_7 As Long
    Public variance_1 As Long
    Public variance_2 As Long
    Public variance_3 As Long
    Public variance_4 As Long
    Public variance_5 As Long
    Public variance_6 As Long
    Public variance_7 As Long
    Public Ecart_type_1 As Long
    Public Ecart_type_2 As Long
    Public Ecart_type_3 As Long
    Public Ecart_type_4 As Long
    Public Ecart_type_5 As Long
    Public Ecart_type_6 As Long
    Public Ecart_type_7 As Long

  13. #13
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Pour le message initial, voici un exemple pour toi LudOL56 :
    (Par contre, j'ai du mal à comprendre comment ton code actuel fonctionnait correctement, par endroit, ça ressemble à d'autres langages que du VBA)

    Dans ta feuille tu mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Command1_Click()
        ActionBouton1
    End Sub
     
    Private Sub Command2_Click()
        ActionBouton2
    End Sub
    et dans un module

    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
    Option Explicit
     
    Public nobj() As Long
    Public xc() As Long
    Public yc() As Long
    Public s() As Long
    Public d() As Long
    Public xx() As Long
    Public yy() As Long
    Public angle() As Long
     
    Public moyenne1 As Double
    Public moyenne2 As Double
    Public moyenne3 As Double
    Public moyenne4 As Double
    Public moyenne5 As Double
    Public moyenne6 As Double
    Public moyenne7 As Double
    Public variance1 As Double
    Public variance2 As Double
    Public variance3 As Double
    Public variance4 As Double
    Public variance5 As Double
    Public variance6 As Double
    Public variance7 As Double
    Public Ecart_type1 As Double
    Public Ecart_type2 As Double
    Public Ecart_type3 As Double
    Public Ecart_type4 As Double
    Public Ecart_type5 As Double
    Public Ecart_type6 As Double
    Public Ecart_type7 As Double
     
    Private Sub CalculMoyenneEcartType(ByRef monTab() As Long, ByRef moy As Double, ByRef ectyp As Double)
        Dim somme As Double
        Dim i As Integer
     
        somme = 0
     
        For i = 0 To UBound(monTab)
            somme = somme + monTab(i)
        Next i
     
        moy = somme / (UBound(monTab) + 1)
     
        somme = 0
     
        For i = 0 To UBound(monTab)
            somme = somme + (monTab(i) - moy) ^ 2
        Next i
     
        ectyp = Sqr(somme / (UBound(monTab) + 1))
    End Sub
     
    Public Sub ActionBouton1()
        'Ouverture du fichier et récupération des données
        Dim NOM_FICHIER As String
        Dim FICHIER As String
        Dim TOTAL As Integer
        Dim tmp As String
        Dim n As Integer
     
        'Mis en commentaire car je ne sais pas ce qu'est File1 et je n'utilise pas habituellement les $
    '    CHEMIN$ = File1.Path
    '    FICHIER$ = File1.Filename
    '    NOM_FICHIER = CHEMIN$ + "\" + FICHIER$
     
        Open NOM_FICHIER For Input As #1
        Input #1, tmp
        TOTAL = CInt(tmp)
        Line Input #1, tmp 'ligne suivante
     
        ReDim n°obj(TOTAL - 1)
        ReDim xc(TOTAL - 1)
        ReDim yc(TOTAL - 1)
        ReDim s(TOTAL - 1)
        ReDim d(TOTAL - 1)
        ReDim xx(TOTAL - 1)
        ReDim yy(TOTAL - 1)
        ReDim angle°(TOTAL - 1)
     
        For n = 0 To TOTAL - 1
            Input #1, nobj(n), xc(n), yc(n), s(n), d(n), xx(n), yy(n), angle(n)
        Next n
     
        Close #1
     
        Debug.Print
     
        'Calcul des Moyennes et des écart-types
        CalculMoyenneEcartType angle, moyenne1, Ecart_type1
        CalculMoyenneEcartType xc, moyenne2, Ecart_type2
        CalculMoyenneEcartType yc, moyenne3, Ecart_type3
        CalculMoyenneEcartType s, moyenne4, Ecart_type4
        CalculMoyenneEcartType d, moyenne5, Ecart_type5
        CalculMoyenneEcartType xx, moyenne6, Ecart_type6
        CalculMoyenneEcartType yy, moyenne7, Ecart_type7
     
        'Affichage
        Debug.Print "la moyenne des angles est de " & moyenne1 & "degrés"
        Debug.Print "la moyenne des xc est de " & moyenne2
        Debug.Print "la moyenne des yc est de " & moyenne3
        Debug.Print "la moyenne des s est de " & moyenne4
        Debug.Print "la moyenne des d est de " & moyenne5
        Debug.Print "la moyenne des xx est de " & moyenne6
        Debug.Print "la moyenne des yy est de " & moyenne7
     
        Debug.Print "L'écart-type des angles est de " & Ecart_type1
        Debug.Print "L'écart-type des xc est de " & Ecart_type2
        Debug.Print "L'écart-type des yc est de " & Ecart_type3
        Debug.Print "L'écart-type des s est de " & Ecart_type4
        Debug.Print "L'écart-type des d est de " & Ecart_type5
        Debug.Print "L'écart-type des xx est de " & Ecart_type6
        Debug.Print "L'écart-type des yy est de " & Ecart_type7
     
        Debug.Print
     
        'Calcul des variances
        variance1 = Ecart_type1 ^ 2
        variance2 = Ecart_type2 ^ 2
        variance3 = Ecart_type3 ^ 2
        variance4 = Ecart_type4 ^ 2
        variance5 = Ecart_type5 ^ 2
        variance6 = Ecart_type6 ^ 2
        variance7 = Ecart_type7 ^ 2
     
        'Affichage
        Debug.Print "la Variance des angles est de " & variance1
        Debug.Print "la Variance des xc est de " & variance2
        Debug.Print "la Variance des yc est de " & variance3
        Debug.Print "la Variance des s est de " & variance4
        Debug.Print "la Variance des d est de " & variance5
        Debug.Print "la Variance des xx est de " & variance6
        Debug.Print "la Variance des yy est de " & variance7
    End Sub
     
    Public Sub ActionBouton2()
        'Calcul de la covariance
        Dim sigmaxy As Double
        Dim i As Integer
     
        sigmaxy = 0
        For i = 0 To UBound(s)
            sigmaxy = (sigmaxy + ((s(n) - moyenne4)) * ((d(n) - moyenne5)) / TOTAL)
        Next i
     
        Debug.Print sigmaxy
     
        'Etc...
    End Sub

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/09/2014, 12h30
  2. Recupérer des valeurs calculées dans une boucle
    Par Medoou dans le forum MATLAB
    Réponses: 40
    Dernier message: 23/07/2009, 15h12
  3. Réutiliser des valeurs calculées
    Par boux2 dans le forum Excel
    Réponses: 2
    Dernier message: 12/06/2007, 18h12
  4. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 17h29
  5. Réponses: 6
    Dernier message: 22/11/2005, 18h08

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