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 :

conflit entre routines [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Par défaut conflit entre routines
    Re bonjour !

    J'ai un probleme de conflit entre 2 routines (et non fonction ).
    En effet, mon code utilise la routine "double-clic" et est appelante.
    J'ai donc des routines "appelées" et d'autres "appelantes" (un GRAND merci à Mercatog sans qui je serais au même point depuis 3 jours !!! ).

    Mon soucis est que j'appelle 2 "sous-routines" sur la même plage de cellule et que cela crée un conflit car, du coup aucun ne fonctionne alors que indépendamment elles fonctionnent.

    Bon, un code vaut mieux qu'un long discours....

    Code fonctionnel:
    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
    '------------fonction_origine/appelée----------------------------
     
    Sub Test_ORIGINE(origine As Range) '0,1
     
        origine.Value = IIf(origine.Value = 0, 1, 0) 'evite le if/then/elseif
     
    End Sub
     
    '------------fonction double_clic/appelante----------------------
    '---------------------------------------------------------------
     
    '------------Origine--------------------------------------------
    Sub worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
            If Not Intersect(target,     Range("E10:E59,H10:H59,K10:K59,N10:N59,Q10:Q59,T10:T59,W10:W59,Z10:Z59,AC10:AC59,AF10:AF59,AI10:AI59,AK10:AK59")) Is Nothing Then 'selection des colonnes activent
            Call Test_ORIGINE(target)
            Cancel = True
     
        End If
     
    End Sub
    Code non-fonctionnel:

    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
    '------------------fonction Calcul_Somme/appelée-----
    Sub Calcul_Somme(calc As Range)
     
        If calc.Value = 0 Then
        Range("E60").Select
        ActiveCell.FormulaR1C1 = "=SUM(R[-50]C:R[-1]C)"
        End If
     
    End Sub
     
    '------------------fonction_origine/appelée------------
    Sub Test_ORIGINE(origine As Range) '0,1
     
        origine.Value = IIf(origine.Value = 0, 1, 0) 'evite le if/then/elseif/then/else...
     
    End Sub
     
    '------------------fonction_Double_clic/appelante------
    '------------------------------------------------------
    Sub worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
     
    '------------------calcul_somme----------------------
     If Not Intersect(target, Range("E10:E59")) Is Nothing Then
            Call Calcul_Somme(target) 'appelle la macro Calcul_Somme
            Cancel = True 'desactive la saisie au double-clic
     
    '------------------origine-----------------------------
    If Not Intersect(target, Range("E10:E59,H10:H59,K10:K59,N10:N59,Q10:Q59,T10:T59,W10:W59,Z10:Z59,AC10:AC59,AF10:AF59,AI10:AI59,AK10:AK59")) Is Nothing Then 'selection des colonnes activent
            Call Test_ORIGINE(target)
            Cancel = True
     
        End If
     
    End Sub
    Le conflit se situe donc dans le fait que les deux routines utilisent la même plage.
    Comment peut-on faire pour palier à ce conflit?

    J'espere avoir été assez claire...

    Merci d'avance pour votre aide et vos commentaires.

    n.b:je signal que la totalité du code se situe dans"feuil1" et pas dans differents modules (car trop compliqué pour moi).

    Cordialement

    Manu

  2. #2
    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
    Y a pas de conflit; tu as oublié un endif
    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
    '------------------fonction_Double_clic/appelante------
    Sub worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
     
    '------------------calcul_somme----------------------
    If Not Intersect(target, Range("E10:E59")) Is Nothing Then
        Call Calcul_Somme(target)                         'appelle la macro Calcul_Somme
        Cancel = True                                     'desactive la saisie au double-clic
    End If
    '------------------origine-----------------------------
    If Not Intersect(target, Range("E10:E59,H10:H59,K10:K59,N10:N59,Q10:Q59,T10:T59,W10:W59,Z10:Z59,AC10:AC59,AF10:AF59,AI10:AI59,AK10:AK59")) Is Nothing Then    'selection des colonnes activent
        Call Test_ORIGINE(target)
        Cancel = True
    End If
     
    End Sub
    par contre cette procédure est incompréhensible et qu'est ce qu'elle est censé faire (qu'on pourra écrire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '------------------fonction Calcul_Somme/appelée-----
    Sub Calcul_Somme(calc As Range)
     
    If calc.Value = 0 Then Range("E60").Formula = "=SUM(E10:E59)"
     
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Par défaut
    Bonjour Mercatog, (décidement toujours la pour m'aider)

    En fait j'ai simplement oublié de metre le "end if" quand j'ai recopier le code (car plein de petit bout).

    Clairement:
    -La routine "origine" met la valeur 1 ou 0 dans les colonnes "E,H,K,N,Q,T,W,Z,AC,AF,AI,etAK" de la ligne 10 a la ligne 59.
    -La routine "calcul-somme" doit calculer le nombre de 1 présent dans chaque colonne est affiché le résultat a la ligne 60 de ces colonnes. Le probleme est que je ne maitrise pas du tout les calculs en VBA (surtout que les exemple que je trouve sur le net sont des routines à executer manuelement et que je veux qu'elle se mette à jour dès qu'il y a une action sur le tableau (double_clic)).

    En fait je cherche a faire ceci, car a terme je compte incrementer les cellules des lignes 60 des colonnes citées plus haut.

    Clairement:
    Le but finale est de pouvoir afficher dans la ligne 60 des colonnes "e,f,h,i,kl,,n,o,q,r,t,u,w,x,z,aa,ac,ad,af,ag,ai,et ak" la somme des cellules de chaques colonnes (de la ligne 10 a la ligne 59)ayant une valeur "differente" de zero (car parfois des 1 et parfois des expressions comme "HS" ou autres par exemple.

    C'est pourquoi j'ai voulu creer une fonction qui s'execute a chaque double clic (même si elle est incomprehensible du coup....).

    Je joints le code complet de mon programme (qui grace a tes explications et aides est fonctionnel )(même si il est un peu long) car ça peut être plus "clair" que mes explication un peu "tordu"...

    Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    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
    527
    528
    529
    530
    531
    532
    533
    534
    535
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION CALCUL_SOMME-------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
    'Sub Calcul_Somme(calc As Range)
     
       ' If calc.Value = 0 Then
       ' Range("E60").Select
       ' ActiveCell.FormulaR1C1 = "=SUM(R[-50]C:R[-1]C)"
       ' End If
     
    'End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION TYPE---------------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_TYPE(typ As Range) 'SAS,S.E,LT,EXT,BUR,VV,CMP,CAF,RIEN
     
        If typ.Value = "" Then
        typ.Value = "SAS"
     
        ElseIf typ.Value = "SAS" Then
        typ.Value = "S.E"
     
        ElseIf typ.Value = "S.E" Then
        typ.Value = "LT"
     
        ElseIf typ.Value = "LT" Then
        typ.Value = "EXT"
     
        ElseIf typ.Value = "EXT" Then
        typ.Value = "BUR"
     
        ElseIf typ.Value = "BUR" Then
        typ.Value = "VV"
     
        ElseIf typ.Value = "VV" Then
        typ.Value = "CMP"
     
        ElseIf typ.Value = "CMP" Then
        typ.Value = "CAF"
     
        Else: typ.Value = "CAF"
        typ.Value = ""
     
        End If
     
    End Sub
     
     
     
     
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION PPV----------------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_PPV(ppv As Range) 'PPV1,PPV2,RIEN
     
        If ppv.Value = "" Then
        ppv.Value = "PPV1"
     
        ElseIf ppv.Value = "PPV1" Then
        ppv.Value = "PPV2"
     
        Else: ppv.Value = "PPV2"
        ppv.Value = ""
     
        End If
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION ORIGINE------------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_ORIGINE(origine As Range) '0,1
     
        origine.Value = IIf(origine.Value = 0, 1, 0) 'evite le if/then/elseif/then/else...
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION BATI/VENTAIL_EQUIP-------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_BA_Equip(ba As Range) '0,HS
     
        ba.Value = IIf(ba.Value = 0, "HS", 0)
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION PAUMELLES_EQUIP----------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    'Sub Test_PA_EQUIP(pa As Range) '0,HS,BG,AS,SE,MQT
     
        'If pa.Value = 0 Then
       ' pa.Value = "HS"
     
       ' ElseIf pa.Value = "HS" Then
       ' pa.Value = "BG"
     
       ' ElseIf pa.Value = "BG" Then
       ' pa.Value = "AS"
     
       ' ElseIf pa.Value = "AS" Then
       ' pa.Value = "SE"
     
       ' ElseIf pa.Value = "SE" Then
       ' pa.Value = "MQT"
     
       ' Else: pa.Value = "MQT"
       ' pa.Value = "0"
     
       ' End If
     
    'End Sub
     
    Sub Test_PA(rng As Range)
    Dim Tbl As Variant
    Dim i As Byte
     
    Tbl = Array(0, "HS", "BG", "AS", "SE", "MQT", 0)
    For i = LBound(Tbl) To UBound(Tbl) - 1
        If rng.Value = Tbl(i) Then
            rng.Value = Tbl(i + 1)
            Exit For
        End If
    Next i
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION FERME-PORTE_EQUIP--------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_FP_EQUIP(fp As Range) '0,HS,RE,SE,FIX,MQT
     
        If fp.Value = 0 Then
        fp.Value = "HS"
     
        ElseIf fp.Value = "HS" Then
        fp.Value = "RE"
     
        ElseIf fp.Value = "RE" Then
        fp.Value = "SE"
     
        ElseIf fp.Value = "SE" Then
        fp.Value = "FIX"
     
        ElseIf fp.Value = "FIX" Then
        fp.Value = "MQT"
     
        Else: fp.Value = "MQT"
        fp.Value = "0"
     
        End If
     
    End Sub
     
    '-------------------------------------------FONCTION FERME-PORTE--------------------------------------------------
    Sub Test_FP(xfp As Range)
     
        xfp.Value = IIf(xfp.Value = "FP", "", "FP")
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION COFFRE_EQUIP-------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
    Sub Test_CO_EQUIP(co As Range) '0,HS,FIX,MQT
     
        If co.Value = 0 Then
        co.Value = "HS"
     
        ElseIf co.Value = "HS" Then
        co.Value = "FIX"
     
        ElseIf co.Value = "FIX" Then
        co.Value = "MQT"
     
        Else: co.Value = "MQT"
        co.Value = "0"
     
        End If
     
    End Sub
     
    '-------------------------------------------FONCTION COFFRE--------------------------------------------------------
    Sub Test_CO(xco As Range) 'CO,BP,RIEN
     
        If xco.Value = "CO" Then
        xco.Value = "BP"
     
        ElseIf xco.Value = "BP" Then
        xco.Value = ""
     
        Else: xco.Value = ""
        xco.Value = "CO"
     
        End If
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION BEQUILLE_EQUIP-----------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_BQ_EQUIP(bq As Range) '0,HS,JI,FIX,MQT
     
        If bq.Value = 0 Then
        bq.Value = "HS"
     
        ElseIf bq.Value = "HS" Then
        bq.Value = "JI"
     
        ElseIf bq.Value = "JI" Then
        bq.Value = "FIX"
     
        ElseIf bq.Value = "FIX" Then
        bq.Value = "MQT"
     
        Else: bq.Value = "MQT"
        bq.Value = "0"
     
        End If
     
    End Sub
     
    '-------------------------------------------FONCTION BEQUILLE-----------------------------------------------------
    Sub Test_BQ(xbq As Range)
     
        xbq.Value = IIf(xbq.Value = "BQ", "", "BQ")
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION BUTEE_EQUIP--------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_BU_EQUIP(bu As Range) '0,HS,SE,MQT
     
        If bu.Value = 0 Then
        bu.Value = "HS"
     
        ElseIf bu.Value = "HS" Then
        bu.Value = "SE"
     
        ElseIf bu.Value = "SE" Then
        bu.Value = "MQT"
     
        Else: bu.Value = "MQT"
        bu.Value = "0"
     
        End If
     
    End Sub
     
    '-------------------------------------------FONCTION BUTEE--------------------------------------------------------
    Sub Test_BU(xbu As Range)
     
        xbu.Value = IIf(xbu.Value = "BU", "", "BU")
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION COMMANDE_EQUIP-----------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_CD_EQUIP(cd As Range) '0,HS,MQT
     
        If cd.Value = 0 Then
        cd.Value = "HS"
     
        ElseIf cd.Value = "HS" Then
        cd.Value = "MQT"
     
        Else: cd.Value = "MQT"
        cd.Value = "0"
     
        End If
     
    End Sub
     
    '-------------------------------------------FONCTION COMMANDE-----------------------------------------------------
    Sub Test_CD(xcd As Range)
     
        xcd.Value = IIf(xcd.Value = "CD", "", "CD")
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION CREMONE-POMPIER_EQUIP----------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_CP_EQUIP(cp As Range) '0,HS,FIX,MQT
     
        If cp.Value = 0 Then
        cp.Value = "HS"
     
        ElseIf cp.Value = "HS" Then
        cp.Value = "FIX"
     
        ElseIf cp.Value = "FIX" Then
        cp.Value = "MQT"
     
        Else: cp.Value = "MQT"
        cp.Value = "0"
     
        End If
     
    End Sub
     
    '-------------------------------------------FONCTION CREMONE-POMPIER----------------------------------------------
    Sub Test_CP(xcp As Range)
     
        xcp.Value = IIf(xcp.Value = "CP", "", "CP")
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION SELECTEUR_EQUIP----------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_SL_EQUIP(sl As Range) '0,HS,RE,FIX,MQT
     
        If sl.Value = 0 Then
        sl.Value = "HS"
     
        ElseIf sl.Value = "HS" Then
        sl.Value = "RE"
     
        ElseIf sl.Value = "RE" Then
        sl.Value = "FIX"
     
        ElseIf sl.Value = "FIX" Then
        sl.Value = "MQT"
     
        Else: sl.Value = "MQT"
        sl.Value = "0"
     
        End If
     
    End Sub
     
    '-------------------------------------------FONCTION SELECTEUR---------------------------------------------------
    Sub Test_SL(xsl As Range)
     
        xsl.Value = IIf(xsl.Value = "SL", "", "SL")
     
    End Sub
     
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION JOINT_EQUIP--------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub Test_JT_EQUIP(jt As Range) '0,HS,MQT
     
        If jt.Value = 0 Then
        jt.Value = "HS"
     
        ElseIf jt.Value = "HS" Then
        jt.Value = "MQT"
     
        Else: jt.Value = "MQT"
        jt.Value = "0"
     
        End If
     
    End Sub
     
    '-------------------------------------------FONCTION JOINT--------------------------------------------------------
    Sub Test_JT(xjt As Range)
     
        xjt.Value = IIf(xjt.Value = "JT", "", "JT")
     
    End Sub
    'test
    Sub calnt(y As Range)
    ' calculeent Macro
    If y.Value = 0 Then
        Range("AN60").Select
        ActiveCell.FormulaR1C1 = "=SUM(R[-50]C:R[-1]C)"
        End If
    End Sub
    'test
     
    '-----------------------------------------------------------------------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
    '-------------------------------------------FONCTION DOUBLE-CLIC/APPELANTE----------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
    '-----------------------------------------------------------------------------------------------------------------
     
    Sub worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean) 'fonction double-clic
     
        '-------------------------------------------------------------
        '--------------------BLOCAGE_CELLULE--------------------------
        '-------------------------------------------------------------
        If Not Intersect(target, Range("D10:D59,G10:G59,AH10:AH59,AJ10:AJ59,A9:AK9,A60:AK60")) Is Nothing Then 'cette fonction a pour but de geler les cellules non-interactives avec l'utilisateur
            Cancel = True 'desactive la fonction seletion au double-clic
     
        '-------------------------------------------------------------
        '--------------------CALCUL_SOMME-----------------------------
        '-------------------------------------------------------------
       ' ElseIf Not Intersect(target, Range("E10:E59")) Is Nothing Then
          '  Call Calcul_Somme(target) 'appelle la macro Test_TYPE
           ' Cancel = True
        '-------------------------------------------------------------
        '--------------------TYPE-------------------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("B10:B59")) Is Nothing Then
            Call Test_TYPE(target) 'appelle la macro Test_TYPE
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------PPV--------------------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("C10:C59")) Is Nothing Then
            Call Test_PPV(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------ORIGINE----------------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("E10:E59,H10:H59,K10:K59,N10:N59,Q10:Q59,T10:T59,W10:W59,Z10:Z59,AC10:AC59,AF10:AF59,AI10:AI59,AK10:AK59")) Is Nothing Then 'selection des colonnes activent
            Call Test_ORIGINE(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------BATI/VENTAIL_EQUIP-----------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("F10:F59")) Is Nothing Then
            Call Test_BA_Equip(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------PAUMELLES_EQUIP--------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("I10:I59")) Is Nothing Then
            Call Test_PA(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------FERME-PORTE_EQUIP------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("L10:L59")) Is Nothing Then
            Call Test_FP_EQUIP(target)
            Cancel = True
        '--------------------FERME-PORTE------------------------------
        ElseIf Not Intersect(target, Range("J10:J59")) Is Nothing Then
            Call Test_FP(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------COFFRE_EQUIP-----------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("O10:O59")) Is Nothing Then
            Call Test_CO_EQUIP(target)
            Cancel = True
        '--------------------COFFRE-----------------------------------
        ElseIf Not Intersect(target, Range("M10:M59")) Is Nothing Then
            Call Test_CO(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------BEQUILLE_EQUIP---------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("R10:R59")) Is Nothing Then
            Call Test_BQ_EQUIP(target)
            Cancel = True
        '--------------------BEQUILLE---------------------------------
        ElseIf Not Intersect(target, Range("P10:P59")) Is Nothing Then
            Call Test_BQ(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------BUTEE_EQUIP------------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("U10:U59")) Is Nothing Then
            Call Test_BU_EQUIP(target)
            Cancel = True
        '--------------------BUTEE------------------------------------
        ElseIf Not Intersect(target, Range("S10:S59")) Is Nothing Then
            Call Test_BU(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------COMMANDE_EQUIP---------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("X10:X59")) Is Nothing Then
            Call Test_CD_EQUIP(target)
            Cancel = True
        '--------------------COMMANDE---------------------------------
        ElseIf Not Intersect(target, Range("V10:V59")) Is Nothing Then
            Call Test_CD(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------CREMONNE-POMPIER_EQUIP-------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("AA10:AA59")) Is Nothing Then
            Call Test_CP_EQUIP(target)
            Cancel = True
        '--------------------COMMANDE---------------------------------
        ElseIf Not Intersect(target, Range("Y10:Y59")) Is Nothing Then
            Call Test_CP(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------SELECTEUR_EQUIP--------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("AD10:AD59")) Is Nothing Then
            Call Test_SL_EQUIP(target)
            Cancel = True
        '--------------------COMMANDE---------------------------------
        ElseIf Not Intersect(target, Range("AB10:AB59")) Is Nothing Then
            Call Test_SL(target)
            Cancel = True
     
        '-------------------------------------------------------------
        '--------------------JOINT_EQUIP------------------------------
        '-------------------------------------------------------------
        ElseIf Not Intersect(target, Range("AG10:AG59")) Is Nothing Then
            Call Test_JT_EQUIP(target)
            Cancel = True
        '--------------------JOINT------------------------------------
        ElseIf Not Intersect(target, Range("AE10:AE59")) Is Nothing Then
            Call Test_JT(target)
            Cancel = True
     
         'obligé de mettre else if not then, au lieu de elsenot car plantage, le dernier else n'est pas obligatoire
        End If
     
    End Sub
    n.b:en piece jointe le tableau en question avec les macros je crois (qui sert de relevé de controle de l'état de portes en entreprise (via pc tactile) <-- voila pour l'objectif)
    pour etre clair voici la signification des termes:
    BA:bati
    PA;paumelle
    FP:fermeporte
    CO:coffre
    etc...
    Comme ça au moins tu sais sur quoi je bosse

    Donc on peut oublié la fonction "somme", car c'est plutot la fonction"incrementer" avec des "differents de" qui m'interesse.

    Merci d'avance encore une fois pour ton aide.

    Remarque:je ne te fournis pas mon code pour que tu me le fasses,ou que je te demande de me faire mon programme (ça ne se fait pas et à aucun interet si je ne comprend pas...)
    Je demande simplement ton aide sur des points que je ne comprends ou connais pas...) <-- petite précision


    Cordialement

    Manu
    Fichiers attachés Fichiers attachés

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Par défaut
    Re!
    Tout d'abord j'ai abandonné le coup de l'incrémentation pour l'instant (comprends pas...).


    Du coup, pour la fonction "somme"

    Alors après tests et recherches, j'ai d'abord essayé ceci:
    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
    'Sub calcul_Somme()
     
       ' 
       ' Range("E60").FormulaLocal = "=Somme(E1:E59)"
       ' Range("H60").FormulaLocal = "=Somme(H1:H59)"
       ' Range("K60").FormulaLocal = "=Somme(K1:K59)"
       ' Range("N60").FormulaLocal = "=Somme(N1:N59)"
       ' Range("Q60").FormulaLocal = "=Somme(Q1:Q59)"
       ' Range("T60").FormulaLocal = "=Somme(T1:T59)"
       ' Range("W60").FormulaLocal = "=Somme(W1:W59)"
       ' Range("Z60").FormulaLocal = "=Somme(Z1:Z59)"
       ' Range("AC60").FormulaLocal = "=Somme(AC1:AC59)"
       ' Range("AF60").FormulaLocal = "=Somme(AF1:AF59)"
       ' Range("AI60").FormulaLocal = "=Somme(AI1:AI59)"
       ' Range("AK60").FormulaLocal = "=Somme(AK1:AK59)"
     
    'End Sub
    Ce code, malgrès la première ligne"Application.Calculation = xlCalculationAutomatic" ne fonctionne pas en continu (ou plutot a chaque changement de valeur d'une cellule de la meme colonne.

    -->donc pas bon!!

    Ensuite j'ai cherché un moyen d'utiliser"formula.local" en mettant ma fonction en worksheet, j'ai donc ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Worksheet_Change(ByVal Target As Range)
     
        If Not Intersect(Target, Range("N10:N59,AK1:AK59")) Is Nothing Then
        Range("N60").FormulaLocal = "=Somme(N1:N59)"
        Range("AK60").FormulaLocal = "=Somme(AK1:AK59)"
        End If
     
    End Sub
    Et là, miracle cela fonctionne !!!.
    Donc c'est quasiment la première fonction que je fais qui fonctionne !!!(enfin!!).
    Conclusion, il faut que j'utilise:
    "Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("N10:N59,AK1:AK59")) Is Nothing Then"
    pour que la macro soit active en continu....(découverte pour moi!).

    Me reste plus qu'à faire la même chose pour une incrementation ou bien la somme de cellule "n'étant pas égale à zero" !!

    Je vous tiens au courant .

    Cordialement

  5. #5
    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
    tu mets simplement sur ta feuille excel sur la ligne 60 la formule basique =Somme(E10:E59)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Par défaut
    Oui, j'ai compris ça....

    Mais en fait, je veux que toute l'interface de la feuille soit codé en macro, c'est pour ça que je me suis prie la tête à créer le code VBA .

    Reste à faire la même chose avec une "somme des cellules non egale à zero"


    Cordialement

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Une chose me choque dans ton code.
    Tu reprends plusieurs fois une même structure qui se termine sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Else: typ.Value = "CAF"
        typ.Value = ""
    En écrivant de cette façon, dans le cas du Else, tu commences par écrire la valeur "CAF" dans la cellule typ, puis tu la mets à blanc.
    Quelle est l'utilité de cette façon de faire?
    Le double point derrière une instruction permet décrire une autre instruction sur la même ligne.
    Le code ci-dessus pourrait s'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Else
        typ.Value = "CAF"
        typ.Value = ""
    De plus, lorsqu'on utilise une série de ElseIf, il vaut mieux passer par un Select Case.
    Exemple:
    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
    Sub Test_TYPE(typ As Range) 'SAS,S.E,LT,EXT,BUR,VV,CMP,CAF,RIEN
     
      Select Case typ.value
     
        Case "" 
          typ.Value = "SAS"
     
        Case "SAS"
          typ.Value = "S.E"
     
        Case "S.E"
          typ.Value = "LT"
     
        Case "LT"
          typ.Value = "EXT"
     
        Case "EXT"
          typ.Value = "BUR"
     
        Case "BUR"
          typ.Value = "VV"
     
        Case "VV" Then
          typ.Value = "CMP"
     
        Case "CMP"
          typ.Value = "CAF"
     
        Case Else
          typ.Value = ""
     
      End Select
     
    End Sub
    Edit:
    Ceci dit, Il n'est jamais bon de "hard coder" des valeurs qui risquent d'évoluer.
    Il eut été plus sage de prévoir une feuille paramètres où tu écrirais les différents code avec leur code correspondant.
    Ca évite de devoir faire appel au programmeur si les valeurs changent.
    Et au programmeur de devoir chercher dans tout le code où sont les valeurs qui doivent être modifiées.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 71
    Par défaut
    Bonjour Alain,

    Dans le cas du "else:":je ne savais pas que cela permettais d'écrire une autre instruction sur la même ligne. Et comme mon code fonctionne ainsi je n'ai pas cherché beaucoup plus loin...(je note ça afin d'appilquer les modifs à mon code).
    Dans le cas du "Select Case":Je sais que l'on peut également utiliser cette instruction pour une suite de "elseif" (cf:post de Mercatog de la veille), mais comme le "elseif" me convenais...Cependant, si cela ne se fait pas ou n'est pas propre; alors je modifierai mon code avec des "Select Case".

    Sinon:
    "En écrivant de cette façon, dans le cas du Else, tu commences par écrire la valeur "CAF" dans la cellule typ, puis tu la mets à blanc.
    Quelle est l'utilité de cette façon de faire?"

    Je ne comprends pas la question?

    Enfin, une question:
    Selon vous ,est-il possible d'utiliser la l'objet "FormulaLocal" et de préciser qu'il faut faire simplement la somme des cellules differentes de zero?
    code:
    Range("F60").FormulaLocal = "=Somme(E1:E59)for(E1:E59<>0)"

    Bon je me doute que ce code est une aberration, mais l'idée y est...

    Merci d'avance

    Cordialement

  9. #9
    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
    la somme des cellules differentes de zero
    cest la somme des cellules tout court

  10. #10
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Citation Envoyé par nunnu27 Voir le message
    Sinon:
    "En écrivant de cette façon, dans le cas du Else, tu commences par écrire la valeur "CAF" dans la cellule typ, puis tu la mets à blanc.
    Quelle est l'utilité de cette façon de faire?"

    Je ne comprends pas la question?
    Vu que je t'ai dit que ce que tu as écrit est équivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Else
        typ.Value = "CAF"
        typ.Value = ""
    Tu écris "CAF" dans la cellule typ puis, immédiatement après, tu la mets à blanc (chaine vide).
    Il y a donc une opération inutile.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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

Discussions similaires

  1. Conflit entre javascript et script ASP
    Par Mvu dans le forum ASP
    Réponses: 2
    Dernier message: 22/02/2005, 16h28
  2. Possibles conflits entre GL, GLAUX et GLUT
    Par barthelv dans le forum GLUT
    Réponses: 1
    Dernier message: 19/11/2004, 12h31
  3. Conflit entre bases de données
    Par BRODU dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/10/2004, 11h40
  4. conflit entre couleurs
    Par khayyam90 dans le forum OpenGL
    Réponses: 2
    Dernier message: 03/07/2004, 18h00
  5. [Technique] Conflits entre plusieurs requêtes
    Par Neowile dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/03/2003, 09h37

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