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 :

Concaténation nom de variable


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut Concaténation nom de variable
    Voici mon problème.

    Je dois calculer l'activité des 2 pauses qui travaillent en alternance matin/après-midi dans le magasin.

    J'ai donc mis le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sem = DatePart("ww", begin, vbMonday, vbFirstFourDays)
    If sem Mod 2 > 0 Then
        matin = "p2"
        apresmidi = "p1"
        Else
            matin = "p1"
            apresmidi = "p2"
    End If
    Maintenant, lors de mes calculs, j'aimerais que ma variable se crée automatiquement en fonction de la semaine en cours.
    Si matin : nom de la variable : travail & matin
    Si après-midi : nom de la variable : travail & apresmidi

    Je ne sais absolument pas si c'est possible, c'est pour cette raison que je fais appel à vous

    Merci d'avance.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    une variable ne pouvant se définir par une chaine de caractères, cette démarche ne conduit nulle part.
    Tu peux parcontre prédéfinir tes variables et les utiliser de manière conditionnelle, tout simplement.

    En passant,

    ton code (celui que tu nous as montré) devrait plutôt s'écrire ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    matin = "p1": apresmidi = "p2"
     If DatePart("ww", begin, vbMonday, vbFirstFourDays) And 1 Then
       matin = "p2":  aprèsmidi = "p1"
     End If

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse.

    Le problème, c'est que j'ai une vingtaine de zones différentes pour lesquelles je dois calculer l'activité.
    Ce qui correspond à un quarantaine de variables.
    Si je dois commencer à faire un contrôle de la pause concernée pour chacune de ces zones, je vais avoir un nombre impressionnant de "IF".

    N'y a-t-il pas un autre moyen ?

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Ecoute !
    si tu étais capabler de travailler avec une variable nommée travailp1 et une variable nommée travailp2 uniquement pour traiter 40 cas différents, reien ne devrait t'empêcher de typer en booléen travailp1 et travailp2, par exemple, et de leur donner, selon le cas, la valeur true ou false ! (à définir dans le code déjà écrit ...)
    C'est une question d'organisation de ta pensée en fonction de ce que tu dois faire !
    Mais abandonne l'idée de concaténer ...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    reien ne devrait t'empêcher de typer en booléen travailp1 et travailp2, par exemple, et de leur donner, selon le cas, la valeur true ou false ! (à définir dans le code déjà écrit ...)
    Je dois bien avouer que je ne comprends pas bien ce que tu m'expliques (peut-être est-ce du au fait que je suis encore débutant en VBA ).

    Est-ce que tu pourrais me donner un court exemple ?

    Merci d'avance.

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Pourquoi ne travaille tu pas avec une tableau qui contient le nombre d'élements correspondant à tes différents cas de variables.

    Tu fais un (des) select case qui te permet en fonction du cas de déterminer l'indice adéquant dans ta table.
    Tu peux aussi travailler sur une table a plusieurs dimensions. je ne connais pas tes besoins.

    Et puis tu utilise cet indice pour manipuler la table

    Ce n'est pas cela que tu veux ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Je dois te répondre la même chose qu'à ucfoutu : c'est probablement une très bonne idéee, mais comme je suis encore débutant en VBA, j'ai un peu de mal à m'imaginer ce que ça donnerait en code.
    Peux-tu me donner un petit exemple ?

    Merci d'avance.

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Un "court exemple" de quoi, dans l'ignorance de ce que tu cherches à faire ?
    Il y aurait autant d'exemples que de mécanismes et de finalités d'applications !!!
    Le principe est simple, puisqu'au bout du compte tu n'as que deux variables mises en cause !
    Si l'une est à true alors faire ceci sinon faire celà ... (y compris te référer à une variable1 plutôt qu'à une variable2).
    Celà ne relève pas de la connaissance d'un langage de développement, mais de la construction de ta pensée !

  9. #9
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    J'ai besoin pour cela d'une définition de ce que tu veux faire.

    Tu peux me formuler cela en clair (surtout le nombre de cas possibles) et comment on détermine dans quels cas on est.

    Parle moi comme si j'étais ton informaticien et que tu veux que ca marche

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    On va raccourcir un peu mes cas.

    En fait, j'ai plusieurs zones dans mon magasin, par exemple : 1, 2, 3, 4

    Pour chacune de ces zones, je dois calculer le nombre de pièces vendues par pause.

    Donc pour la zone 1 par exemple, si on est en semaine paire et qu'il est entre 06h00 et 14h00, total1P2 = le total de pièce vendue.
    Si on est en semaine paire et qu'il est entre 14h00 et 22h00, total1P1 = le total de pièce vendue.
    Inversement si on est en semaine impaire.

    Ce calcul se fait donc pour toutes mes zones.

    Actuellement, ma macro fonctionne parfaitement, mais je ne fais pas encore la distinction P1 et P2 en fonctionne de la semaine paire/impaire.

    Merci d'avance.

  11. #11
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    On va raccourcir un peu mes cas.

    En fait, j'ai plusieurs zones dans mon magasin, par exemple : 1, 2, 3, 4

    Pour chacune de ces zones, je dois calculer le nombre de pièces vendues par pause.

    Donc pour la zone 1 par exemple, si on est en semaine paire et qu'il est entre 06h00 et 14h00, total1P2 = le total de pièce vendue.
    Si on est en semaine paire et qu'il est entre 14h00 et 22h00, total1P1 = le total de pièce vendue.
    Inversement si on est en semaine impaire.

    Ce calcul se fait donc pour toutes mes zones.

    Actuellement, ma macro fonctionne parfaitement, mais je ne fais pas encore la distinction P1 et P2 en fonctionne de la semaine paire/impaire.
    On ne va pa raccourcir les cas, soyons concrets.

    Passe moi ta macro et dis mois combien de zones tu as dans ton magasin.

    je vais te modifier cette macro.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    OK, je ne voulais pas prendre trop de ton temps, mais si tu te proposes pour modifier ma macro, c'est sympa.

    Voici le code qui calcul le total des pièces.

    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
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    I = Selection.Rows.Count
    For j = 2 To I
        If Range("C" & j) = "902" Then  'Calcul des valeurs IN
            Range("B" & j).Select
            heure = ActiveCell
            heure = Format(heure, "hh:mm")
            Range("D" & j).Select
            matgr = ActiveCell
            Select Case matgr
                Case "101" 'Truck
                    Range("F" & j).Select
                    intruckpc = ActiveCell + intruckpc
                    Range("E" & j).Select
                    intruckline = ActiveCell + intruckline
     
                Case "102" 'Bus
                    Range("F" & j).Select
                    inbuspc = ActiveCell + inbuspc
                    Range("E" & j).Select
                    inbusline = ActiveCell + inbusline
     
                Case "100", "103", "106", "130" 'WS
                    Range("F" & j).Select
                    If heure > "06:00" And heure < "14:00" Then
                        Range("F" & j).Select
                        inwspcp1 = ActiveCell + inwspcp2
                        Range("E" & j).Select
                        inwslinep1 = ActiveCell + inwslinep1
                        Else
                            If heure > "13:59" And heure < "22:00" Then
                                Range("F" & j).Select
                                inwspcp2 = ActiveCell + inwspcp2
                                Range("E" & j).Select
                                inwslinep2 = ActiveCell + inwslinep2
                                Else
                                    Range("F" & j).Select
                                    inwspcnuit = ActiveCell + inwspcnuit
                                    Range("E" & j).Select
                                    inwslinenuit = ActiveCell + inwslinenuit
                            End If
                    End If
     
                Case "110" To "116" 'BL
                    Range("F" & j).Select
                    If heure > "06:00" And heure < "14:00" Then
                        Range("F" & j).Select
                        inblpcp1 = ActiveCell + inblpcp1
                        Range("E" & j).Select
                        inbllinep1 = ActiveCell + inbllinep1
                        Else
                            If heure > "13:59" And heure < "22:00" Then
                                Range("F" & j).Select
                                inblpcp2 = ActiveCell + inblpcp2
                                Range("E" & j).Select
                                inbllinep2 = ActiveCell + inbllinep2
                                Else
                                    Range("F" & j).Select
                                    inblpcnuit = ActiveCell + inblpcnuit
                                    Range("E" & j).Select
                                    inbllinenuit = ActiveCell + inbllinenuit
                            End If
                    End If
     
                Case "120" To "126" 'Sides
                    If heure > "06:00" And heure < "14:00" Then
                        Range("F" & j).Select
                        insidepcp1 = ActiveCell + insidepcp1
                        Range("E" & j).Select
                        insidelinep1 = ActiveCell + insidelinep1
                        Else
                            If heure > "13:59" And heure < "22:00" Then
                                Range("F" & j).Select
                                insidepcp2 = ActiveCell + insidepcp2
                                Range("E" & j).Select
                                insidelinep2 = ActiveCell + insidelinep2
                                Else
                                    Range("F" & j).Select
                                    insidepcnuit = ActiveCell + insidepcnuit
                                    Range("E" & j).Select
                                    insidelinenuit = ActiveCell + insidelinenuit
                            End If
                    End If
     
                Case "140" To "999" 'Accessoires
                    Range("F" & j).Select
                    inaccpc = ActiveCell + inaccpc
                    Range("E" & j).Select
                    inaccline = ActiveCell + inaccline
     
            End Select
     
            Else
                If Range("G" & j) = "006" Then 'Calcul des valeurs Réappro
                    Range("B" & j).Select
                    heure = ActiveCell
                    heure = Format(heure, "hh:mm")
                    Range("C" & j).Select
                    zone = ActiveCell
                    Select Case zone
                        Case "001", "003", "924", "916"
                            If heure > "06:00" And heure < "14:00" Then
                                Range("F" & j).Select
                                reappropcp1 = ActiveCell + reappropcp1
                                Range("E" & j).Select
                                reapprolinep1 = ActiveCell + reapprolinep1
                                Else
                                    If heure > "13:59" And heure < "22:00" Then
                                    Range("F" & j).Select
                                    reappropcp2 = ActiveCell + reappropcp2
                                    Range("E" & j).Select
                                    reapprolinep2 = ActiveCell + reapprolinep2
                                    Else
                                        Range("F" & j).Select
                                        reappropcnuit = ActiveCell + reappropcnuit
                                        Range("E" & j).Select
                                        reapprolinenuit = ActiveCell + reapprolinenuit
                                    End If
                            End If
     
                    End Select
                    Else
                        If Range("G" & j) = "916" Then  'Calcul des valeurs OUT
                            Range("B" & j).Select
                            heure = ActiveCell
                            heure = Format(heure, "hh:mm")
                            Range("C" & j).Select
                            zone = ActiveCell
                            Select Case zone
     
                                Case "001"
                                    Range("F" & j).Select
                                    outtruckpc = ActiveCell + outtruckpc
                                    Range("E" & j).Select
                                    outtruckline = ActiveCell + outtruckline
     
                                Case "002"
                                    Range("F" & j).Select
                                    outbuspc = ActiveCell + outbuspc
                                    Range("E" & j).Select
                                    outbusline = ActiveCell + outbusline
     
                                Case "003"
                                    If Range("D" & j) = 110 Then
                                        Range("F" & j).Select
                                        outwspc = 0
                                        outblpc = ActiveCell
                                        Range("E" & j).Select
                                        outwsline = 0
                                        outblline = ActiveCell
                                        Else
                                            Range("F" & j).Select
                                            outwspc = ActiveCell
                                            outblpc = 0
                                            Range("E" & j).Select
                                            outwsline = ActiveCell
                                            outblline = 0
                                    End If
     
                                    If heure > "06:00" And heure < "14:00" Then
                                        outwspcp1 = outwspcp1 + outwspc
                                        outwslinep1 = outwslinep1 + outwsline
                                        outblpcp1 = outblpcp1 + outblpc
                                        outbllinep1 = outbllinep1 + outblline
                                        Else
                                            If heure > "13:59" And heure < "22:00" Then
                                                outwspcp2 = outwspcp2 + outwspc
                                                outwslinep2 = outwslinep2 + outwsline
                                                outblpcp2 = outblpcp2 + outblpc
                                                outbllinep2 = outbllinep2 + outblline
                                                Else
                                                    outwspcnuit = outwspcnuit + outwspc
                                                    outwslinenuit = outwslinenuit + outwsline
                                                    outblpcnuit = outblpcnuit + outblpc
                                                    outbllinenuit = outbllinenuit + outblline
                                            End If
                                    End If
     
                                Case "006"
                                    If Range("D" & j) = 110 Then
                                        Range("F" & j).Select
                                        outws006pc = 0
                                        outbl006pc = ActiveCell
                                        Range("E" & j).Select
                                        outws006line = 0
                                        outbl006line = ActiveCell
                                        Else
                                            Range("F" & j).Select
                                            outws006pc = ActiveCell
                                            outbl006pc = 0
                                            Range("E" & j).Select
                                            outws006line = ActiveCell
                                            outbl006line = 0
                                    End If
                                    If heure > "06:00" And heure < "14:00" Then
                                        outws006pcp1 = outws006pcp1 + outws006pc
                                        outws006linep1 = outws006linep1 + outws006line
                                        outbl006pcp1 = outbl006pcp1 + outbl006pc
                                        outbl006linep1 = outbl006linep1 + outbl006line
                                        Else
                                            If heure > "13:59" And heure < "22:00" Then
                                                outws006pcp2 = outws006pcp2 + outws006pc
                                                outws006linep2 = outws006linep2 + outws006line
                                                outbl006pcp2 = outbl006pcp2 + outbl006pc
                                                outbl006linep2 = outbl006linep2 + outbl006line
                                                Else
                                                    outws006pcnuit = outws006pcnuit + outws006pc
                                                    outws006linenuit = outws006linenuit + outws006line
                                                    outbl006pcnuit = outbl006pcnuit + outbl006pc
                                                    outbl006linenuit = outbl006linenuit + outbl006line
                                            End If
                                    End If
     
                                Case "007"
                                    If heure > "06:00" And heure < "14:00" Then
                                        Range("F" & j).Select
                                        outsidepcp1 = ActiveCell + outsidepcp1
                                        Range("E" & j).Select
                                        outsidelinep1 = ActiveCell + outsidelinep1
                                        Else
                                            If heure > "13:59" And heure < "22:00" Then
                                                Range("F" & j).Select
                                                outsidepcp2 = ActiveCell + outsidepcp2
                                                Range("E" & j).Select
                                                outsidelinep2 = ActiveCell + outsidelinep2
                                                Else
                                                    Range("F" & j).Select
                                                    outsidepcnuit = ActiveCell + outsidepcnuit
                                                    Range("E" & j).Select
                                                    outsidelinenuit = ActiveCell + outsidelinenuit
                                            End If
                                    End If
     
                                Case "008", "009", "010"
                                    Range("F" & j).Select
                                    outaccpc = ActiveCell + outaccpc
                                    Range("E" & j).Select
                                    outaccline = ActiveCell + outaccline
     
                            End Select
                        End If
                End If
        End If
     
    Next j
    Par contre, ce serait génial si tu pouvais également m'expliquer tes changement afin que je puisse progresser

  13. #13
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Questions.....

    1) Nombre de zones (et leur code) ? tu n'as pas répondu .

    2) Tu semble traiter une troisième zone différement (la nuit) ! Tu n'en as pas parlé. comment la traites-tu ? Pas de totaux ?

    je continue a traiter ton code.

    J'enlève les select qui polluent et ralentissent.

    Réponds-moi.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    1) Nombre de zones (et leur code) ? tu n'as pas répondu .
    En fait, il y a la partie entrée de marchandise qui comporte 7 zones (ou plutôt "catégories"). Elles se trouvent dans les différents case de "Calcul des valeur IN" et "Réappro"
    Ensuite, il y a 6 zones pour la partie sortie de marchandise, qui sont les différents case dans "Calcul des valeurs OUT"[/QUOTE]

    Citation Envoyé par Godzestla Voir le message
    2) Tu semble traiter une troisième zone différement (la nuit) ! Tu n'en as pas parlé. comment la traites-tu ? Pas de totaux ?
    En fait, il y a des zones dans lesquelles on ne travaille qu'en journée, pour celles-là, pas de problème. Par contre, pour les autres zones, nous avons 3 pauses : P1, P2, Nuit. Je n'avais pas parlé de la pause de nuit, car il n'y a pas d'alternance, ce sont toujours les mêmes qui travaillent de nuit.

    Merci pour ton aide

  15. #15
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Première simplification en enlevant tout un tas d eselect
    Tu comprendras sans peine je pense.

    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
     
    sem = DatePart("ww", begin, vbMonday, vbFirstFourDays)
     
     
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    I = Selection.Rows.Count
    For j = 2 To I
        If Range("C" & j) = "902" Then  'Calcul des valeurs IN
            heure = Range("B" & j)
            heure = Format(heure, "hh:mm")
            matgr = Range("D" & j)
            Select Case matgr
                Case "101" 'Truck
                    intruckpc = Range("F" & j) + intruckpc
                    intruckline = Range("E" & j) + intruckline
     
                Case "102" 'Bus
                    inbuspc = Range("F" & j) + inbuspc
                    inbusline = Range("E" & j) + inbusline
     
                Case "100", "103", "106", "130" 'WS
                    If heure > "06:00" And heure < "14:00" Then
                        inwspcp1 = Range("F" & j) + inwspcp2
                        inwslinep1 = Range("E" & j) + inwslinep1
                        Else
                            If heure > "13:59" And heure < "22:00" Then
                                inwspcp2 = Range("F" & j) + inwspcp2
                                inwslinep2 = Range("E" & j) + inwslinep2
                                Else
                                    inwspcnuit = Range("F" & j) + inwspcnuit
                                    inwslinenuit = Range("E" & j) + inwslinenuit
                            End If
                    End If
     
                Case "110" To "116" 'BL
                    If heure > "06:00" And heure < "14:00" Then
                        inblpcp1 = Range("F" & j) + inblpcp1
                        inbllinep1 = Range("E" & j) + inbllinep1
                        Else
                            If heure > "13:59" And heure < "22:00" Then
                                inblpcp2 = Range("F" & j) + inblpcp2
                                inbllinep2 = Range("E" & j) + inbllinep2
                                Else
                                    inblpcnuit = Range("F" & j) + inblpcnuit
                                    inbllinenuit = Range("E" & j) + inbllinenuit
                            End If
                    End If
     
                Case "120" To "126" 'Sides
                    If heure > "06:00" And heure < "14:00" Then
                        insidepcp1 = Range("F" & j) + insidepcp1
                        insidelinep1 = Range("E" & j) + insidelinep1
                        Else
                            If heure > "13:59" And heure < "22:00" Then
                                insidepcp2 = Range("F" & j) + insidepcp2
                                insidelinep2 = Range("E" & j) + insidelinep2
                                Else
                                    insidepcnuit = Range("F" & j) + insidepcnuit
                                    insidelinenuit = Range("E" & j) + insidelinenuit
                            End If
                    End If
     
                Case "140" To "999" 'Accessoires
                    inaccpc = Range("F" & j) + inaccpc
                    inaccline = Range("E" & j) + inaccline
     
            End Select
     
            Else
                If Range("G" & j) = "006" Then 'Calcul des valeurs Réappro
                    heure = Range("B" & j)
                    heure = Format(heure, "hh:mm")
                    zone = Range("C" & j)
                    Select Case zone
                        Case "001", "003", "924", "916"
                            If heure > "06:00" And heure < "14:00" Then
                                reappropcp1 = Range("F" & j) + reappropcp1
                                reapprolinep1 = Range("E" & j) + reapprolinep1
                                Else
                                    If heure > "13:59" And heure < "22:00" Then
                                    reappropcp2 = Range("F" & j) + reappropcp2
                                    reapprolinep2 = Range("E" & j) + reapprolinep2
                                    Else
                                        reappropcnuit = Range("F" & j) + reappropcnuit
                                        reapprolinenuit = Range("E" & j) + reapprolinenuit
                                    End If
                            End If
     
                    End Select
                    Else
                        If Range("G" & j) = "916" Then  'Calcul des valeurs OUT
                            heure = Range("B" & j)
                            heure = Format(heure, "hh:mm")
                            zone = Range("C" & j)
                            Select Case zone
     
                                Case "001"
                                    outtruckpc = Range("F" & j) + outtruckpc
                                    outtruckline = Range("E" & j) + outtruckline
     
                                Case "002"
                                    outbuspc = Range("F" & j) + outbuspc
                                    outbusline = Range("E" & j) + outbusline
     
                                Case "003"
                                    If Range("D" & j) = 110 Then
                                        outwspc = 0
                                        outblpc = Range("F" & j)
                                        outwsline = 0
                                        outblline = Range("E" & j)
                                        Else
                                            outwspc = Range("F" & j)
                                            outblpc = 0
                                            outwsline = Range("E" & j)
                                            outblline = 0
                                    End If
     
                                    If heure > "06:00" And heure < "14:00" Then
                                        outwspcp1 = outwspcp1 + outwspc
                                        outwslinep1 = outwslinep1 + outwsline
                                        outblpcp1 = outblpcp1 + outblpc
                                        outbllinep1 = outbllinep1 + outblline
                                        Else
                                            If heure > "13:59" And heure < "22:00" Then
                                                outwspcp2 = outwspcp2 + outwspc
                                                outwslinep2 = outwslinep2 + outwsline
                                                outblpcp2 = outblpcp2 + outblpc
                                                outbllinep2 = outbllinep2 + outblline
                                                Else
                                                    outwspcnuit = outwspcnuit + outwspc
                                                    outwslinenuit = outwslinenuit + outwsline
                                                    outblpcnuit = outblpcnuit + outblpc
                                                    outbllinenuit = outbllinenuit + outblline
                                            End If
                                    End If
     
                                Case "006"
                                    If Range("D" & j) = 110 Then
                                        outws006pc = 0
                                        outbl006pc = Range("F" & j)
                                        outws006line = 0
                                        outbl006line = Range("E" & j)
                                        Else
                                            outws006pc = Range("F" & j)
                                            outbl006pc = 0
                                            outws006line = Range("E" & j)
                                            outbl006line = 0
                                    End If
                                    If heure > "06:00" And heure < "14:00" Then
                                        outws006pcp1 = outws006pcp1 + outws006pc
                                        outws006linep1 = outws006linep1 + outws006line
                                        outbl006pcp1 = outbl006pcp1 + outbl006pc
                                        outbl006linep1 = outbl006linep1 + outbl006line
                                        Else
                                            If heure > "13:59" And heure < "22:00" Then
                                                outws006pcp2 = outws006pcp2 + outws006pc
                                                outws006linep2 = outws006linep2 + outws006line
                                                outbl006pcp2 = outbl006pcp2 + outbl006pc
                                                outbl006linep2 = outbl006linep2 + outbl006line
                                                Else
                                                    outws006pcnuit = outws006pcnuit + outws006pc
                                                    outws006linenuit = outws006linenuit + outws006line
                                                    outbl006pcnuit = outbl006pcnuit + outbl006pc
                                                    outbl006linenuit = outbl006linenuit + outbl006line
                                            End If
                                    End If
     
                                Case "007"
                                    If heure > "06:00" And heure < "14:00" Then
                                        outsidepcp1 = Range("F" & j) + outsidepcp1
                                        outsidelinep1 = Range("E" & j) + outsidelinep1
                                        Else
                                            If heure > "13:59" And heure < "22:00" Then
                                                outsidepcp2 = Range("F" & j) + outsidepcp2
                                                outsidelinep2 = Range("E" & j) + outsidelinep2
                                                Else
                                                    outsidepcnuit = Range("F" & j) + outsidepcnuit
                                                    outsidelinenuit = Range("E" & j) + outsidelinenuit
                                            End If
                                    End If
     
                                Case "008", "009", "010"
                                    outaccpc = Range("F" & j) + outaccpc
                                    outaccline = Range("E" & j) + outaccline
     
                            End Select
                        End If
                End If
        End If
     
    Next j
    Je continue.

    Je rajoute un peu de code au debut.

  16. #16
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Voil ce que cela donne.

    on peut encore mieux, mais plus de temps.

    les variables sont en tableau de 3 élement (indice 1 à 3)
    - pause 1 : indice 1
    - pause 2 : indice 2
    - nuit : indice 3 (pourquoi pas)

    En debut on détermine si la semaine est paire ou pas.
    Pour chaque ligne (j), on détermine la pause (1-3) (voir ci-dessus) en fonction de l'aire et de la parité de la semaine (1 seul fois par j en debut de traitement)

    Et puis on utilise pause (1 a 3) comme indice de stockage dans les tables.

    Pour connaitre reappropc pause 1 -> reappropc(1)
    pause 2 -> reappropc(2)
    nuit -> reappropc(3)

    Si le 3 t'emmerde pour la nuit et que tu prefères 0,
    il y a peu de choses à changer.

    1) déclaration des tables : tu remplaces les (1 to 3) par (3)
    2) calcul de la pause : tu remplace pause = 3 par pause = 0 (2 x).

    That's all folks.
    Et c'est déjà nettement plus court.
    (les variables ou tu ne traitais pas l'équipe, je n'ai pas mis en tableau)
    (J'ai du en renommer certaines qui portaient le meme nom que le tableau (vu trop tard). Le nomveau nom est ancien nom + "_"

    Pas testé, evidement mais cela devrait marcher +-

    A+

    Godz.

    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
     
    Sub equipe()
    Dim paire               As Boolean
    Dim inwspc(1 To 3)      As Long
    Dim inwsline(1 To 3)    As Long
    Dim inblpc(1 To 3)      As Long
    Dim inblline(1 To 3)    As Long
    Dim insidepc(1 To 3)    As Long
    Dim insideline(1 To 3)  As Long
    Dim reappropc(1 To 3)   As Long
    Dim reapproline(1 To 3) As Long
    Dim outwspc(1 To 3)     As Long
    Dim outwsline(1 To 3)   As Long
    Dim outblpc(1 To 3)     As Long
    Dim outblline(1 To 3)   As Long
    Dim outws006pc(1 To 3)  As Long
    Dim outws006line(1 To 3) As Long
    Dim outbl006pc(1 To 3)   As Long
    Dim outbl006line(1 To 3) As Long
    Dim outsidepc(1 To 3)    As Long
    Dim outsideline(1 To 3)  As Long
     
    Dim pause       As Integer
    sem = DatePart("ww", begin, vbMonday, vbFirstFourDays)
    If sem Mod 2 > 0 Then
      paire = False
     Else
      paire = True
    End If
     
     
     
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    I = Selection.Rows.Count
    For j = 2 To I
        heure = Range("B" & j)
        heure = Format(heure, "hh:mm")
        Select Case paire
            Case True
                Select Case heure
                    Case heure > "06:00" And heure < "14:00"
                        pause = 2
                    Case heure > "13:59" And heure < "22:00"
                        pause = 1
                    Case Else
                        pause = 3
                End Select
            Case Else
                 Select Case heure
                    Case heure > "06:00" And heure < "14:00"
                        pause = 1
                    Case heure > "13:59" And heure < "22:00"
                        pause = 2
                    Case Else
                        pause = 3
                End Select
        End Select
     
        If Range("C" & j) = "902" Then  'Calcul des valeurs IN
     
     
            matgr = Range("D" & j)
            Select Case matgr
                Case "101" 'Truck
                    intruckpc = Range("F" & j) + intruckpc
                    intruckline = Range("E" & j) + intruckline
     
                Case "102" 'Bus
                    inbuspc = Range("F" & j) + inbuspc
                    inbusline = Range("E" & j) + inbusline
     
                Case "100", "103", "106", "130" 'WS
                        inwspc(pause) = Range("F" & j) + inwspc(pause)
                        inwsline(pause) = Range("E" & j) + inwsline(pause)
     
                Case "110" To "116" 'BL
                        inblpc(pause) = Range("F" & j) + inblpc(pause)
                        inblline(pause) = Range("E" & j) + inblline(pause)
     
     
                Case "120" To "126" 'Sides
                        insidepc(pause) = Range("F" & j) + insidepc(pause)
                        insideline(pause) = Range("E" & j) + insideline(pause)
     
     
                Case "140" To "999" 'Accessoires
                    inaccpc = Range("F" & j) + inaccpc
                    inaccline = Range("E" & j) + inaccline
     
            End Select
     
            Else
                If Range("G" & j) = "006" Then 'Calcul des valeurs Réappro
                    zone = Range("C" & j)
                    Select Case zone
                        Case "001", "003", "924", "916"
                            reappropc(pause) = Range("F" & j) + reappropc(pause)
                            reapproline(pause) = Range("E" & j) + reapproline(pause)
                    End Select
                    Else
                        If Range("G" & j) = "916" Then  'Calcul des valeurs OUT
                            zone = Range("C" & j)
                            Select Case zone
     
                                Case "001"
                                    outtruckpc = Range("F" & j) + outtruckpc
                                    outtruckline = Range("E" & j) + outtruckline
     
                                Case "002"
                                    outbuspc = Range("F" & j) + outbuspc
                                    outbusline = Range("E" & j) + outbusline
     
                                Case "003"
                                    If Range("D" & j) = 110 Then
                                        outwspc_ = 0
                                        outblpc_ = Range("F" & j)
                                        outwsline_ = 0
                                        outblline_ = Range("E" & j)
                                        Else
                                            outwspc_ = Range("F" & j)
                                            outblpc_ = 0
                                            outwsline_ = Range("E" & j)
                                            outblline_ = 0
                                    End If
     
                                    outwspc(pause) = outwspc(pause) + outwspc_
                                    outwsline(pause) = outwsline(pause) + outwsline_
                                    outblpc(pause) = outblpc(pause) + outblpc_
                                    outblline(pause) = outblline(pause) + outblline_
     
                                Case "006"
                                    If Range("D" & j) = 110 Then
                                        outws006pc_ = 0
                                        outbl006pc_ = Range("F" & j)
                                        outws006line_ = 0
                                        outbl006line_ = Range("E" & j)
                                        Else
                                            outws006pc_ = Range("F" & j)
                                            outbl006pc_ = 0
                                            outws006line_ = Range("E" & j)
                                            outbl006line_ = 0
                                    End If
                                    outws006pc(pause) = outws006pc(pause) + outws006pc_
                                    outws006line(pause) = outws006line(pause) + outws006line_
                                    outbl006pc(pause) = outbl006pc(pause) + outbl006pc_
                                    outbl006line(pause) = outbl006line(pause) + outbl006line_
     
                                Case "007"
                                    outsidepc(pause) = Range("F" & j) + outsidepc(pause)
                                    outsideline(pause) = Range("E" & j) + outsideline(pause)
     
     
                                Case "008", "009", "010"
                                    outaccpc = Range("F" & j) + outaccpc
                                    outaccline = Range("E" & j) + outaccline
     
                            End Select
                        End If
                End If
        End If
     
    Next j
     
    End Sub

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup pour ce code.

    En fait, je viens de le tester, mais toutes les variables indice 1 et 2 restent à 0, il doit probablement y avoir un petit problème.

  18. #18
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Tu pourrais le tourner en debug et sur une instruction pour laquelle tu es certain qu'il passe, par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
               Case "100", "103", "106", "130" 'WS
                        inwspc(pause) = Range("F" & j) + inwspc(pause)
                        inwsline(pause) = Range("E" & j) + inwsline(pause)
    vérifier les valeurs (debug.print ou curseur sur varibale ou fenêtre immédiate et faire ?variable) de
    * pause
    * inswspc(pause)
    * range("F" & j)

    histoire de savoir si c'est pause qui merde ou si on ne passe pas par là.

  19. #19
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    J'étais justement en train de contrôler ce cas.

    En fait, j'ai 2 problèmes.
    Le premier venait du False et True envoyé à la variable paire.
    J'ai modifié comme ceci et c'est rentré dans l'ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sem = DatePart("ww", begin, vbMonday, vbFirstFourDays)
    If sem Mod 2 > 0 Then
      paire = "Faux"
     Else
      paire = "Vrai"
    End If
    Par contre, je coince sur le 2ème problème.
    Le Case avec la notion des heures ne fonctionne pas.
    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
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    I = Selection.Rows.Count
    For j = 2 To I
        heure = Range("B" & j)
        heure = Format(heure, "hh:mm")
        Select Case paire
            Case "Vrai"
                Select Case heure
                    Case heure > "05:59" And heure < "14:00"
                        pause = 2
                    Case heure > "13:59" And heure < "22:00"
                        pause = 1
                    Case Else
                        pause = 3
                End Select
            Case "Faux"
                 Select Case heure
                    Case heure > "05:59" And heure < "14:00"
                        pause = 1
                    Case heure > "13:59" And heure < "22:00"
                        pause = 2
                    Case Else
                        pause = 3
                End Select
        End Select
    Quelque soit l'heure, il passe toujours sur le Case Else, donc pause = 3.

    Peux-tu à nouveau m'aider ?

  20. #20
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    oops.

    je me suis bien planté là. (je ne me suis pas relu)

    désolé.

    1) Le case sur paire avec false et true devrait marcher, mais soit.

    2) le code juste est
    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
     
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    I = Selection.Rows.Count
    For j = 2 To I
        heure = Range("B" & j)
        heure = Format(heure, "hh:mm")
        Select Case paire
            Case "Vrai"
                Select Case heure
                    Case "05:59" to  "13:59"
                        pause = 2
                    Case "14:00" to  "22:00"
                        pause = 1
                    Case Else
                        pause = 3
                End Select
            Case "Faux"
                 Select Case heure
                    Case "05:59" to  "13:59"
                        pause = 1
                    Case "14:00" to "22:00"
                        pause = 2
                    Case Else
                        pause = 3
                End Select
        End Select

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Concaténation nom de variable
    Par Sekigawa dans le forum Langage
    Réponses: 7
    Dernier message: 12/01/2009, 12h12
  2. Concaténer une chaine et un nombre pour former un nom de variable ?
    Par debie1108 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/04/2007, 07h38
  3. modifier nom de variable et concaténation
    Par edouardj dans le forum Langage
    Réponses: 10
    Dernier message: 26/01/2007, 18h59
  4. concaténation de nom de variable
    Par sandytarit dans le forum Langage
    Réponses: 10
    Dernier message: 23/01/2007, 10h52
  5. [VBSCRIPT] concaténer 2 noms de variable
    Par wil4linux dans le forum ASP
    Réponses: 4
    Dernier message: 28/02/2006, 13h22

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