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 :

Optimisation Bloc ElseIF


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 10
    Par défaut Optimisation Bloc ElseIF
    Bonjour à tous,

    Je me permet de vous demander un petit coup de pouce sur un problème surement très simple pour vous.

    j'ai un petit bout de code qui me permet de savoir quel semaine doit s'effectuer une tâche:

    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
    Dim s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31, s32, s33, s34, s35, s36, s37, s38, s39, s40, s41, s42, s43, s44, s45, s46, s47, s48, s49, s50, s51, s52
     
    s1 = Sheets("donner").Range("H2").Value
    s2 = s1 + Sheets("donner").Range("H3").Value
    s3 = s2 + Sheets("donner").Range("H4").Value
    s4 = s3 + Sheets("donner").Range("H5").Value
    s5 = s4 + Sheets("donner").Range("H6").Value
    s6 = s5 + Sheets("donner").Range("H7").Value
    s7 = s6 + Sheets("donner").Range("H8").Value
    s8 = s7 + Sheets("donner").Range("H9").Value
    s9 = s8 + Sheets("donner").Range("H10").Value
    s10 = s9 + Sheets("donner").Range("H11").Value
    s11 = s10 + Sheets("donner").Range("H12").Value
    s12 = s11 + Sheets("donner").Range("H13").Value
    s13 = s12 + Sheets("donner").Range("H14").Value
    s14 = s13 + Sheets("donner").Range("H15").Value
    s15 = s14 + Sheets("donner").Range("H16").Value
    s16 = s15 + Sheets("donner").Range("H17").Value
    s17 = s16 + Sheets("donner").Range("H18").Value
    s18 = s17 + Sheets("donner").Range("H19").Value
    s19 = s18 + Sheets("donner").Range("H20").Value
    s20 = s19 + Sheets("donner").Range("H21").Value
    s21 = s20 + Sheets("donner").Range("H22").Value
    s22 = s21 + Sheets("donner").Range("H23").Value
    s23 = s22 + Sheets("donner").Range("H24").Value
    s24 = s23 + Sheets("donner").Range("H25").Value
    s25 = s24 + Sheets("donner").Range("H26").Value
    s26 = s25 + Sheets("donner").Range("H27").Value
    s27 = s26 + Sheets("donner").Range("H28").Value
    s28 = s27 + Sheets("donner").Range("H29").Value
    s29 = s28 + Sheets("donner").Range("H30").Value
    s30 = s29 + Sheets("donner").Range("H31").Value
    s31 = s30 + Sheets("donner").Range("H32").Value
    s32 = s31 + Sheets("donner").Range("H33").Value
    s33 = s32 + Sheets("donner").Range("H34").Value
    s34 = s33 + Sheets("donner").Range("H35").Value
    s35 = s34 + Sheets("donner").Range("H36").Value
    s36 = s35 + Sheets("donner").Range("H37").Value
    s37 = s36 + Sheets("donner").Range("H38").Value
    s38 = s37 + Sheets("donner").Range("H39").Value
    s39 = s38 + Sheets("donner").Range("H40").Value
    s40 = s39 + Sheets("donner").Range("H41").Value
    s41 = s40 + Sheets("donner").Range("H42").Value
    s42 = s41 + Sheets("donner").Range("H43").Value
    s43 = s42 + Sheets("donner").Range("H44").Value
    s44 = s43 + Sheets("donner").Range("H45").Value
    s45 = s44 + Sheets("donner").Range("H46").Value
    s46 = s45 + Sheets("donner").Range("H47").Value
    s47 = s46 + Sheets("donner").Range("H48").Value
    s48 = s47 + Sheets("donner").Range("H49").Value
    s49 = s48 + Sheets("donner").Range("H50").Value
    s50 = s49 + Sheets("donner").Range("H51").Value
    s51 = s50 + Sheets("donner").Range("H52").Value
    s52 = s51 + Sheets("donner").Range("H53").Value
     
    If datetemp <= s1 Then
    semaine = 1
     ElseIf datetemp <= s2 Then
    semaine = 2
    ElseIf datetemp <= s3 Then
    semaine = 3
    ElseIf datetemp <= s4 Then
    semaine = 4
    ElseIf datetemp <= s5 Then
    semaine = 5
    ElseIf datetemp <= s6 Then
    semaine = 6
    ElseIf datetemp <= s7 Then
    semaine = 7
    ElseIf datetemp <= s8 Then
    semaine = 8
    ElseIf datetemp <= s9 Then
    semaine = 9
    ElseIf datetemp <= s10 Then
    semaine = 10
    ElseIf datetemp <= s11 Then
    semaine = 11
    ElseIf datetemp <= s12 Then
    semaine = 12
    ElseIf datetemp <= s13 Then
    semaine = 13
    ElseIf datetemp <= s14 Then
    semaine = 14
    ElseIf datetemp <= s15 Then
    semaine = 15
    ElseIf datetemp <= s16 Then
    semaine = 16
    ElseIf datetemp <= s17 Then
    semaine = 17
    ElseIf datetemp <= s18 Then
    semaine = 18
    ElseIf datetemp <= s19 Then
    semaine = 19
    ElseIf datetemp <= s20 Then
    semaine = 20
    ElseIf datetemp <= s21 Then
    semaine = 21
    ElseIf datetemp <= s22 Then
    semaine = 22
    ElseIf datetemp <= s23 Then
    semaine = 23
    ElseIf datetemp <= s24 Then
    semaine = 24
    ElseIf datetemp <= s25 Then
    semaine = 25
    ElseIf datetemp <= s26 Then
    semaine = 26
    ElseIf datetemp <= s27 Then
    semaine = 27
    ElseIf datetemp <= s28 Then
    semaine = 28
    ElseIf datetemp <= s29 Then
    semaine = 29
    ElseIf datetemp <= s30 Then
    semaine = 30
    ElseIf datetemp <= s31 Then
    semaine = 31
    ElseIf datetemp <= s32 Then
    semaine = 32
    ElseIf datetemp <= s33 Then
    semaine = 33
    ElseIf datetemp <= s34 Then
    semaine = 34
    ElseIf datetemp <= s35 Then
    semaine = 35
    ElseIf datetemp <= s36 Then
    semaine = 36
    ElseIf datetemp <= s37 Then
    semaine = 37
    ElseIf datetemp <= s38 Then
    semaine = 38
    ElseIf datetemp <= s39 Then
    semaine = 39
    ElseIf datetemp <= s40 Then
    semaine = 40
    ElseIf datetemp <= s41 Then
    semaine = 41
    ElseIf datetemp <= s42 Then
    semaine = 42
    ElseIf datetemp <= s43 Then
    semaine = 43
    ElseIf datetemp <= s44 Then
    semaine = 44
    ElseIf datetemp <= s45 Then
    semaine = 45
    ElseIf datetemp <= s46 Then
    semaine = 46
    ElseIf datetemp <= s47 Then
    semaine = 47
    ElseIf datetemp <= s48 Then
    semaine = 48
    ElseIf datetemp <= s49 Then
    semaine = 49
    ElseIf datetemp <= s50 Then
    semaine = 50
    ElseIf datetemp <= s51 Then
    semaine = 51
    ElseIf datetemp <= s52 Then
    semaine = 52
    End If

    Vous l'aurez compris, du fait que les durer des semaines sont variable, je doit les charger au départ et réécrire le gros bloc IF à chaque variation de ma datetemp ( environ 8000 fois dans ma procédure, déjà longue à exécuter)

    Voila la question: Y aurait il un moyen plus simple de faire cette manip?

    Merci beaucoup pour votre aide et bon week end

  2. #2
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 10
    Par défaut A méditer
    Si tu n'alimente pas tes variables mais que tu recherche la première valeur dans ta feuille de donner correspondante à ta datetemp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 2 to 53
    if sheets("donner").cells(i,8).value <= datetemp then 
    semaine = sheets("donner").cells(i,7).value
    Next i
    Avec dans la colonne F le numéro de ta semaine et dans la H la somme cumulé des semaines précédentes

    Y en a vraiment qui pose des questions, ou il suffit de réfléchir un peu au lieu de faire perdre son temps à autrui ! A méditer

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour rmmonaco.

    Le code serait moins long avec une boucle qui fait le calcul :

    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
    datetemp = 1200
     compteur = 0
     semaine = 0
     ok = False
     For ligne = 2 To 53
      compteur = compteur + Cells(ligne, "H").Value
      semaine = semaine + 1
      If datetemp <= compteur Then
       ok = True
       Exit For
      End If
     Next
     If ok = False Then
      MsgBox "Datetemp est trop grand"
     Else
      MsgBox "Semaine : " & semaine
     End If

    Docmarti

Discussions similaires

  1. [Algorithme] Optimiser l'espace entre des blocs
    Par bilaloch dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 10/07/2014, 02h12
  2. Optimisation de votre SGBDR et de vos requêtes...
    Par SQLpro dans le forum Langage SQL
    Réponses: 35
    Dernier message: 11/01/2013, 11h49
  3. Optimisation code VBA Blocs With
    Par Ariaar dans le forum Général VBA
    Réponses: 0
    Dernier message: 13/12/2012, 17h15
  4. Réponses: 6
    Dernier message: 25/06/2011, 00h12
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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