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 :

Error 1004 - Application-defined or object-defined [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Error 1004 - Application-defined or object-defined
    Salut à vous,

    Je suis débutant en VBA et j'ai développé une macro que j'utilise dans le cadre du traitement de données manométriques. Après de longs moments à chercher l'élément qui est la cause des erreurs que j'ai pu rencontré, je me décide à venir vous exposer mon problème. J'ai commencé à construire cette macro sans jamais avoir touché à VBA, ce qui signifie que je n'ai pris aucune précaution quant à la déclaration des variables (que j'ai découverte après coup ) où autre subtilité de programmeur aguéri.

    Les données manométriques dont je dispose sont en évolution constante et le but de ma macro est de pouvoir les mettre à jour régulièrement et interpréter rapidement les résultats liés. Au fur et à mesure du développement de ma macro, je me suis rendu compte qu'il m'était impossible d'exécuter 2 fois la macro sur le même classeur, une erreur (dont je ne me rappelle plus exactement) venant interrompre son bon déroulement. Ma grosse erreur a été de ne pas prendre le temps de modifier la macro pour qu'elle fonctionne correctement. J'ai donc uniquement contourné le problème en exécutant la macro une seule fois par classeur, ce qui fonctionnait très bien.

    Seulement voilà, j'ai voulu la faire tourner il y a quelques jours, comme à chaque fois, mais cette fois-ci j'obtiens un message d'erreur lors de la première exécution de la macro dans le classeur :

    Run-time error 1004 : Application-defined or object-defined error

    Etant donné qu'aucune modif n'a été effectuée sur la macro, je ne comprends pas trop d'où vient le problème.

    Je vous mets le code ci-dessous, de manière à ce que vous puissez avoir un aperçu de la manière (un peu sale, il faut le dire ) dont j'ai codé tout ça, même si c'est pas facile à décrypter.


    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
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
     
    Sub Test()
     
    compteur_echantillon = 0
    compteur_feuilles = 0
     
    For f = 19 To 51
     
        j = 2
     
        pression_totale = 0
     
        nom_feuille = Sheets("INFOS").Cells(f, 1).Value
        Sheets(nom_feuille).Select
        ActiveSheet.ChartObjects.Delete
        nombre_de_lignes = ActiveSheet.UsedRange.Rows.Count
     
     
    If nombre_de_lignes > 50 Then
     
        Cells(1, 6).Value = "Pression totale"
        Cells(1, 7).Value = "Pression totale corrigee"
        Cells(1, 8).Value = "Volume brut produit [ml]"
     
     
        If f > 21 Then
     
            Cells(1, 9).Value = "Volume Moins controle [mL]"
            Cells(1, 10).Value = "Temps [h]"
            Cells(1, 11).Value = "Volume produit [mL/gMS]"
     
        Else
     
            Cells(1, 9).Value = "Temps [h]"
            Cells(1, 10).Value = "Volume produit [mL]"
     
        End If
     
    'Calcul pression totale (non corrigee)
     
        For i = 2 To nombre_de_lignes
     
            If i = 2 Then
     
                Cells(2, 6).Value = Cells(2, 3).Value
                pression_totale = Cells(2, 3).Value
     
            ElseIf Cells(i, 5).Value < 2 Then
     
                'Controle que pas de prise de mesure pendant une ouverture
     
                If Cells(i, 5).Value = 0 And Cells(i - 1, 5).Value = 1 Then
     
                    Cells(i, 6).Value = pression_totale
     
                Else
     
                    pression_totale = pression_totale + (Cells(i, 3).Value - Cells(i - 1, 3).Value)
                    Cells(i, 6).Value = pression_totale
     
                End If
     
            ElseIf Cells(i, 5).Value = 2 Then
     
                Cells(i, 6).Value = pression_totale
     
            End If
        Next
     
    'Calcul pression totale corrigee
     
     
        For i = 2 To nombre_de_lignes
     
            If Cells(i, 5).Value = 0 Then
     
                controle_selectionne = Sheets("Patm").Cells(j, 1).Value
     
                pression_totale_corrigee = Cells(i, 6).Value - controle_selectionne
                Cells(i, 7).Value = pression_totale_corrigee
     
                j = j + 1
     
            ElseIf Cells(i, 5).Value = 1 Then
     
                pression_totale_corrigee = Cells(i, 6).Value - controle_selectionne
                Cells(i, 7).Value = pression_totale_corrigee
     
            ElseIf Cells(i, 5).Value = 2 Then
     
                Cells(i, 7).Value = pression_totale_corrigee
     
            End If
     
        Next
     
    'Calcul volume brut produit
     
        For i = 2 To nombre_de_lignes
     
            volume_du_reacteur = 292
            volume_libre = (volume_du_reacteur - Sheets("INFOS").Cells(f, 4).Value)
     
            pression_en_Pa = Cells(i, 7).Value * 100000
            volume_brut = ((pression_en_Pa * volume_libre * 293) / (308 * 101325))
            Cells(i, 8).Value = volume_brut
     
        Next
     
    'Calcul Temps
     
        For i = 2 To nombre_de_lignes
     
            If f > 21 Then
     
                Cells(i, 10).Value = (Cells(i, 2).Value - Cells(2, 2).Value) / 86400
     
            Else
     
                Cells(i, 9).Value = (Cells(i, 2).Value - Cells(2, 2).Value) / 86400
     
            End If
     
        Next
     
    'Calcul volume/gMS et suppression du volume produit par le controle
     
        j = 2
     
        For i = 2 To nombre_de_lignes
     
            If f > 21 Then
     
                'Suppression controle (Situe dans feuille controle colonne B)
     
     
                If Cells(i, 5).Value = 0 Then
     
     
                    volume_controle = Sheets("controle").Cells(j, 2).Value
                    volume_corrige = Cells(i, 8).Value - volume_controle
                    Cells(i, 9).Value = volume_corrige
     
                    j = j + 1
     
                ElseIf Cells(i, 5).Value = 1 Then
     
                    volume_controle = Sheets("controle").Cells(j, 2).Value
                    volume_corrige = Cells(i, 8).Value - volume_controle
                    Cells(i, 9).Value = volume_corrige
     
                ElseIf Cells(i, 5).Value = 2 Then
     
                    Cells(i, 9).Value = volume_corrige
     
                End If
     
                'Calcul volume/gMS
     
                MS = Sheets("INFOS").Cells(f, 3).Value
                volume_par_gMS = Cells(i, 9).Value / MS
                Cells(i, 11).Value = volume_par_gMS
     
            Else
     
                'Calcul volume/gDCO
     
                Cells(i, 10).Value = Cells(i, 8).Value
     
                'Calcul moyenne /!\ A REVOIR /!\
     
            End If
     
     
        Next
     
    'Generation des graphiques
     
        If f > 21 Then
     
        Charts.Add
        ActiveChart.ChartType = xlXYScatterSmooth
        ActiveChart.Location Where:=xlLocationAsObject, Name:=nom_feuille
     
                With ActiveChart
     
                    .SetSourceData Source:=Range("J2:K" & nombre_de_lignes), PlotBy _
                    :=xlColumns
                    .HasTitle = True
                    .ChartTitle.Characters.Text = "Production de biogaz"
                    .ChartTitle.Font.Size = 18
                    .ChartTitle.Font.FontStyle = "Gras"
                    .Axes(xlCategory, xlPrimary).HasTitle = True
                    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Temps [j]"
                    .Axes(xlValue, xlPrimary).HasTitle = True
     
                    If f > 21 Then
     
                        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Volume [mL/gMS]"
     
                    Else
     
                        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Volume [mL]"
     
                    End If
     
                 End With
     
        Else
     
        Charts.Add
        ActiveChart.ChartType = xlXYScatterSmooth
        ActiveChart.Location Where:=xlLocationAsObject, Name:=nom_feuille
     
                With ActiveChart
     
                    .SetSourceData Source:=Range("I2:J" & nombre_de_lignes), PlotBy _
                    :=xlColumns
                    .HasTitle = True
                    .ChartTitle.Characters.Text = "Production de biogaz"
                    .ChartTitle.Font.Size = 18
                    .ChartTitle.Font.FontStyle = "Gras"
                    .Axes(xlCategory, xlPrimary).HasTitle = True
                    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Temps [j]"
                    .Axes(xlValue, xlPrimary).HasTitle = True
     
                    If f > 21 Then
     
                        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Volume [mL/gMS]"
     
                    Else
     
                        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Volume [mL]"
     
                    End If
     
                 End With
     
        End If
     
     
    'Connaitre le nombre de feuilles contenant des donnees ou non (max = 3)
     
    compteur_echantillon = compteur_echantillon + 1
    compteur_feuilles = compteur_feuilles + 1
     
     
    Else
     
    compteur_feuilles = compteur_feuilles + 1
     
    End If
     
    'Selection de la feuille ou va être affichée la moyenne (et de la colonne ou se trouve le volume)
     
    While ((compteur_feuilles = 3) And (compteur_echantillon > 0))
     
        Select Case (f)
     
            Case 19 To 21
     
                feuille_moyenne = "controle"
                colonne_volume = 10
                colonne_temps = 9
                unite_volume = "Volume moyen [mL]"
     
            Case 22 To 24
     
                feuille_moyenne = "1"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
            Case 25 To 27
     
                feuille_moyenne = "2"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
            Case 28 To 30
     
                feuille_moyenne = "3"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
            Case 31 To 33
     
                feuille_moyenne = "4"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
            Case 34 To 36
     
                feuille_moyenne = "5"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
            Case 37 To 39
     
                feuille_moyenne = "6"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
            Case 40 To 42
     
                feuille_moyenne = "7"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
            Case 43 To 45
     
                feuille_moyenne = "8"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
            Case 46 To 48
     
                feuille_moyenne = "9"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
            Case Else
     
                feuille_moyenne = "10"
                colonne_temps = 10
                colonne_volume = 11
                unite_volume = "Volume moyen [mL / gMS]"
     
        End Select
     
        'Redaction de la feuille de moyenne
     
            'Sélection feuille non vide pour en extraire le temps
     
        For Z = f - 2 To f
     
            Sheets(Sheets("INFOS").Cells(Z, 1).Value).Select
     
            If ActiveSheet.UsedRange.Rows.Count > 50 Then
     
                feuille_temps = Sheets("INFOS").Cells(Z, 1).Value
                Z = 100
     
            End If
     
        Next
     
     
        'Calcul valeurs moyennes
     
        Sheets(feuille_moyenne).Select
        Cells(1, 1).Value = "Temps_moyenne [j]"
        Cells(1, 2).Value = "Volume_moyenne [mL / gMS]"
     
        For i = 2 To nombre_de_lignes
     
            Cells(i, 1).Value = Sheets(feuille_temps).Cells(i, colonne_temps).Value
     
            valeur1 = Sheets(Sheets("INFOS").Cells(f - 2, 1).Value).Cells(i, colonne_volume).Value
            valeur2 = Sheets(Sheets("INFOS").Cells(f - 1, 1).Value).Cells(i, colonne_volume).Value
            valeur3 = Sheets(Sheets("INFOS").Cells(f, 1).Value).Cells(i, colonne_volume).Value
     
            Sheets(feuille_moyenne).Cells(i, 2).Value = (valeur1 + valeur2 + valeur3) / compteur_echantillon
     
        Next
     
        'Calcul données Kaleidagraph (prise de toutes les 100 valeurs)
     
     
        Cells(1, 3).Value = "Temps [j]"
        Cells(1, 4).Value = unite_volume
        Cells(1, 5).Value = "Ecart Type"
     
        For k = 0 To 40
     
            If k * 100 < nombre_de_lignes Then
     
            i = (k * 100) + 2
     
            Cells(k + 2, 3).Value = Sheets(feuille_temps).Cells(i, colonne_temps).Value
     
            valeur1 = Sheets(Sheets("INFOS").Cells(f - 2, 1).Value).Cells(i, colonne_volume).Value
            valeur2 = Sheets(Sheets("INFOS").Cells(f - 1, 1).Value).Cells(i, colonne_volume).Value
            valeur3 = Sheets(Sheets("INFOS").Cells(f, 1).Value).Cells(i, colonne_volume).Value
     
            Sheets(feuille_moyenne).Cells(k + 2, 4).Value = (valeur1 + valeur2 + valeur3) / compteur_echantillon
     
            'Calcul écart type
     
                If valeur1 And valeur2 And valeur3 > 0 Then
     
                Cells(k + 2, 5).Select
                ActiveCell.FormulaLocal = "=StDev(" & valeur1 & ";" & valeur2 & ";" & valeur3 & ")"
     
                ElseIf valeur1 = 0 And valeur2 > 0 And valeur3 > 0 Then
     
                moyenne = (valeur2 + valeur3) / 2
                ecart = Abs(valeur2 - moyenne)
                Cells(k + 2, 5).Value = ecart
     
                ElseIf valeur2 = 0 And valeur1 > 0 And valeur3 > 0 Then
     
                moyenne = (valeur1 + valeur3) / 2
                ecart = Abs(valeur1 - moyenne)
                Cells(k + 2, 5).Value = ecart
     
                ElseIf valeur3 = 0 And valeur1 > 0 And valeur2 > 0 Then
     
                moyenne = (valeur1 + valeur2) / 2
                ecart = Abs(valeur1 - moyenne)
                Cells(k + 2, 5).Value = ecart
     
                Else
     
                Cells(k + 2, 5).Value = 0
     
                End If
     
            'Fin calcul ecart type
     
     
     
            'Derniere valeur kaleidagraph
     
            Else
     
            i = nombre_de_lignes - 5
     
     
    '''''''''''''''''''''''''''''''''''''''''''''''''ERREUR LORS DE L'EXECUTION''''''''''''''''''''''''''''''''''''''''''''  
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''       
            Cells(k + 2, 3).Value = Sheets(feuille_temps).Cells(i, colonne_temps).Value
     
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     
            valeur1 = Sheets(Sheets("INFOS").Cells(f - 2, 1).Value).Cells(i, colonne_volume).Value
            valeur2 = Sheets(Sheets("INFOS").Cells(f - 1, 1).Value).Cells(i, colonne_volume).Value
            valeur3 = Sheets(Sheets("INFOS").Cells(f, 1).Value).Cells(i, colonne_volume).Value
     
            Sheets(feuille_moyenne).Cells(k + 2, 4).Value = (valeur1 + valeur2 + valeur3) / compteur_echantillon
     
            'Calcul écart type
     
            If valeur1 And valeur2 And valeur3 > 0 Then
     
            Cells(k + 2, 5).Select
            ActiveCell.FormulaLocal = "=StDev(" & valeur1 & ";" & valeur2 & ";" & valeur3 & ")"
     
            ElseIf valeur1 = 0 And valeur2 > 0 And valeur3 > 0 Then
     
            moyenne = (valeur2 + valeur3) / 2
            ecart = Abs(valeur2 - moyenne)
            Cells(k + 2, 5).Value = ecart
     
            ElseIf valeur2 = 0 And valeur1 > 0 And valeur3 > 0 Then
     
            moyenne = (valeur1 + valeur3) / 2
            ecart = Abs(valeur1 - moyenne)
            Cells(k + 2, 5).Value = ecart
     
            ElseIf valeur3 = 0 And valeur1 > 0 And valeur2 > 0 Then
     
            moyenne = (valeur1 + valeur2) / 2
            ecart = Abs(valeur1 - moyenne)
            Cells(k + 2, 5).Value = ecart
     
            Else
     
            Cells(k + 2, 5).Value = 0
     
            End If
     
            'Fin calcul ecart type
     
     
            k = 100
     
            End If
     
        Next
     
        'Creation du graphique de moyenne
     
        Charts.Add
        ActiveChart.ChartType = xlXYScatterSmooth
        ActiveChart.Location Where:=xlLocationAsObject, Name:=feuille_moyenne
     
                With ActiveChart
     
                    .SetSourceData Source:=Range("C2:D" & nombre_de_lignes), PlotBy _
                    :=xlColumns
                    .HasTitle = True
                    .ChartTitle.Characters.Text = "Production de biogaz"
                    .ChartTitle.Font.Size = 18
                    .ChartTitle.Font.FontStyle = "Gras"
                    .Axes(xlCategory, xlPrimary).HasTitle = True
                    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Temps [j]"
                    .Axes(xlValue, xlPrimary).HasTitle = True
                    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = unite_volume
     
                 End With
     
        compteur_echantillon = 0
        compteur_feuilles = 0
     
    Wend
     
    While ((compteur_feuilles = 3) And (compteur_echantillon = 0))
     
        compteur_echantillon = 0
        compteur_feuilles = 0
     
    Wend
     
     
    Next
     
    End Sub
    En espérant que ma question n'est pas idiote, et que vous pourrez m'aider à résoudre mon problème...

    Merci beaucoup !

    DaRisK

    J'ai identifié dans le code la ligne qui est à l'origine de l'erreur, j'avais oublié de le préciser !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    '''''''''''''''''''''''''ERREUR LORS DE L'EXECUTION''''''''''''''''''''''''  
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''       
    Cells(k + 2, 3).Value = Sheets(feuille_temps).Cells(i, colonne_temps).Value
     
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    En espérant trouver parmis vous un saint homme capable de me faire comprendre ce charabia


    A+

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Sortie du contexte le code est trop lourd pour être étudié, il te faut faire un breack (touche F9) sur la ligne qui te pose problème et regarder chacune des partie de cette ligne dans la fenetre espion afin de voir quelle partie renvoie l'erreur.
    ++
    Qwaz

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut DaRisK et le forum
    Au fur et à mesure du développement de ma macro, je me suis rendu compte qu'il m'était impossible d'exécuter 2 fois la macro sur le même classeur, une erreur (dont je ne me rappelle plus exactement) venant interrompre son bon déroulement.
    Comme quoi botter en touche n'est jamais une bonne solution!

    Le problème de trouver une erreur sur une macro, peut rarement être résolu si on ne dispose pas des bons éléments : Quelle ligne bloque ? Faits-la pas-à-pas avec F8 et regarde tes variables au moment du blocage.

    En essayant de lire ta macro, ne connaissant pas la structures des données, quelques fonctionnements me "gênes" :
    tu as de multiples boucles de i=2 à nombre_de_lignes
    Pourquoi pas une seule boucle qui fera plusieurs traitements ?

    avec tes if... ifelse... Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If Cells(i, 5).Value = 0 Then
        controle_selectionne = Sheets("Patm").Cells(j, 1).Value
        pression_totale_corrigee = Cells(i, 6).Value - controle_selectionne
        Cells(i, 7).Value = pression_totale_corrigee
        j = j + 1
    ElseIf Cells(i, 5).Value = 1 Then
        pression_totale_corrigee = Cells(i, 6).Value - controle_selectionne
        Cells(i, 7).Value = pression_totale_corrigee
    ElseIf Cells(i, 5).Value = 2 Then
        Cells(i, 7).Value = pression_totale_corrigee
    End If
    si la cellule Cells(i, 5)=0 ou 1, on calcule la valeur qu'on va lui coller. Jusqu'à là, je comprends. Mais si Cells(i, 5)=2 ? On aura 2 valeurs possibles, suivant que la ligne précédement testée avait en E une valeur égale à 0 ou 1. C'est peut-être normal, mais ça me semble bizarre.
    Et comme j'ai la flemme de décrypter toute la macro, ne connaissant pas ce qu'elle doit faire, je n'ai pas cherché plus loin.

    Si tu t'obliges à déclarer tes variables : Excel te préviendra si elle n'est pas déclarrée, ce qui évite les erreurs de frappe.
    À moins de les déclarer en Variant, si tu les déclares dans un type, en règle générale, Excel te prévient que la variable ne correspond pas au type prévu.

    A+
    EDIT
    uelle est la valeur de feuille_temps = Sheets("INFOS").Cells(Z, 1).Value quand ça plante ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Haaaaa vous êtes super. Je ne connaissais pas cette petite fenêtre permettant d'afficher les valeurs des différentes variables !

    Ca m'a permis de me rendre compte que le "i" de la ligne en question vaut en fait -4 ! Ce qui est évidemment problématique pour sélectionner une cellule..

    Gorfael, en ce qui concerne ta remarque sur la structure du code et ses multiples boucles identiques, tu as tout à fait raison, mais c'est vrai que j'ai construit ces lignes sans les optimiser, en rajoutant de temps en temps des bouts de code par ci par là.. j'essaierai d'être plus ordonné pour le prochain fichier.

    si la cellule Cells(i, 5)=0 ou 1, on calcule la valeur qu'on va lui coller. Jusqu'à là, je comprends. Mais si Cells(i, 5)=2 ? On aura 2 valeurs possibles, suivant que la ligne précédement testée avait en E une valeur égale à 0 ou 1. C'est peut-être normal, mais ça me semble bizarre.
    Très bien vu, mais c'est normal, dans la structure de mon fichier, une valeur "2" en colonne 5 suit toujours une valeur "1" à la ligne précédente.

    Un tout grand merci pour votre aide, même si je pense que ce n'est pas la dernière erreur que je vais devoir corriger dans ce fichier !

    A+

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    de rien
    ++
    Qwaz

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

Discussions similaires

  1. [XL-2010] Erreur 1004 : Application-defined or object-defined error
    Par iriben dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 16/07/2014, 12h21
  2. Réponses: 0
    Dernier message: 16/06/2014, 15h55
  3. [XL-2010] Run time error 1004 Application defined or object defined
    Par AmbreM dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/09/2013, 18h00
  4. Application-defined or object-defined error
    Par Vivi127 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/09/2011, 12h42
  5. Réponses: 1
    Dernier message: 20/02/2010, 08h03

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