Programmation par semaine
Slt tout le monde,
Je débute en VBA et j'ai un souci de programmation.
Je suis dans une programmation de comptage des jours ordinaires et des jours supplémentaires.
Les jours Sup sont représentes par les variables "RT" ou "FT".
J'aimerais si possible avoir votre aide sur le programme ci dessous que je veux mettre sur pieds.
Le but étant de faire en sorte et cela par semaine que à chaque fois que une variable nommée "RT" ou "FT" est précédée (pas forcément immédiatement) d'une variable nommée par exemple "M" ou "0", la variable "RT" qui représente alors une journée supplémentaire devient une journée ordinaire.
La semaine de travail étant comprise entre deux " RT" ou deux " R"?
Nb: RT= repos travaillé et R= Repos
Merci;)
Code:
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
| Public Sub Compter()
Dim ligne As Long
Dim colonne As Long
Dim jourOrd As Long
Dim jourSup As Long
For ligne = 4 To 62
For colonne = 4 To 33
If Cells(ligne, colonne) = "X" Then
jourOrd = jourOrd + 1
ElseIf Cells(ligne, colonne) <> "X" Then
Select Case Cells(ligne, colonne + 1)
Case "RT", "FT"
jourOrd = jourOrd + 1
jourSup = jourSup - 1
Case Else
If Cells(ligne, colonne) = "RT" Then
jourSup = jourSup + 1
ElseIf Cells(ligne, colonne) = "FT" Then
jourSup = jourSup + 1
ElseIf Cells(ligne, colonne) = "PL" Then
jourSup = jourSup + 1
ElseIf Cells(ligne, colonne) = "AT" Then
jourSup = jourSup + 1
ElseIf Cells(ligne, colonne) = "F" Then
jourSup = jourSup + 1
ElseIf Cells(ligne, colonne) = "JS" Then
jourSup = jourSup + 1
ElseIf Cells(ligne, colonne) = "PL" Then
jourOrd = jourOrd + 1
ElseIf Cells(ligne, colonne) = "JB" Then
jourOrd = jourOrd + 1
ElseIf Cells(ligne, colonne) = "AT" Then
jourOrd = jourOrd + 1
ElseIf Cells(ligne, colonne) = "DM" Then
jourOrd = jourOrd + 1
ElseIf Cells(ligne, colonne) = "F" Then
jourOrd = jourOrd + 1
End If
End Select
End If
Cells(ligne, 35) = jourOrd
Cells(ligne, 36) = jourSup
Next colonne
jourOrd = 0
jourSup = 0
Next ligne
End Sub |
Clarification programmation par semaine
Bonjour Igloobel,
Merci pour ta réponse:)
Je veux ici apporter des éclaircissements quant au programme que j'ai du mal à mettre sur pied.
En fait j'ai un tableau excel représentant les jours de travail du personnel pendant un mois.
Et dans chaque semaine de ce mois, il me faut faire un traitement particulier pour chaque personne pour compter leur jour de travail ordinaire et supplémentaire.
Le début d'une semaine est marqué par la présence de la variable "R" ou "RT"qui signifie "Repos" ou "Repos travaillé" et la fin d'une semaine par la présence de cette même variable et ce durant tout le mois.
Ainsi les semaines varient en fonction de chaque personne puisqu'ils n'ont pas les mêmes jours de repos.
Les "RT" représentent dans chaque semaine des journées sup qui sont en fait payées double.
Cependant lorsque dans une même semaine la journée sup est précédée (pas forcément immédiatement, cela peut être 2 ou 5 jours avant) de certaines variables telles que "M" (Maladie) ou "D" (deuil), la journée sup devient une journée ordinaire.
C'est là où réside ma principale difficulté à programmer. Comment programmer cette procédure par semaine?
Ce code ci que j'ai utilisé précédemment n'est en fait pas bon. Puisqu'il ne traite pas par semaine et prend uniquement le cas où RT est précédée immédiatement d'une autre variable et non par exemple de 2 ou 5 jours.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Public Sub Compter()
Dim ligne As Long
Dim colonne As Long
Dim jourOrd As Long
Dim jourSup As Long
For ligne = 4 To 62
For colonne = 4 To 33
If Cells(ligne, colonne) = "X" Then
jourOrd = jourOrd + 1
Else (ligne, colonne) <> "X" Then
Select Case Cells(ligne, colonne + 1)
Case "RT", "FT"
jourOrd = jourOrd + 1
jourSup = jourSup - 1
Case Else
If Cells(ligne, colonne) = "RT" Then
jourSup = jourSup + 1
ElseIf Cells(ligne, colonne) = "FT" Then
jourSup = jourSup + 1 |
Nb: X représente une journée ordinaire de travail et FT un férié travaillé qui représente une journée supplémentaire.
J'espère ne pas avoir été trop long.
Merci encore à tous.