Problème sur Condition dans code VBA
Bonjour,
Je rencontre un problème lors de l'écriture de mon programme d'analyse de l'absentéisme.
Mon problème : J'ai 2 boucles if imbriquées et le programme compte le if intérieur même lorsque la première condition n'est pas vérifiée (j'ai un compteur qui m'a permis de remarquer ce problème).
Voici le code (un peu long je m'en excuse mais je crois que c'est l'ensemble qui pose problème car les valeurs deviennent de plus en plus fausses)
Dim i As Integer
Dim j As Integer
Dim li As Integer
Dim cont As Integer
Dim a1, a2, a3, a4, a5 As Integer
Dim s1, s2, s3, s4, s5 As Integer
Dim d1, d2, d3 As Integer
a1 = a2 = a3 = a4 = a5 = 0
s1 = s2 = s3 = s4 = s5 = 0
d1 = d2 = d3 = 0
j = 1
i = 2
li = 18
For cont = 1 To 20
'Boucle permettant d'analyser toutes les lignes
Do While (Sheets(1).Cells(i + 1, 2).Value = Sheets(1).Cells(i, 2).Value)
'Si le prenom est different d'une ligne a l'autre et si il s'agit bien d'une maladie alors augmenter le compteur
If (Sheets(1).Cells(i + 1, 3).Value <> Sheets(1).Cells(i, 3).Value) And (Sheets(1).Cells(i + 1, 7).Value = "MALA Maladie" Or Sheets(1).Cells(i + 1, 7).Value = "ATJ Accident trajet" Or Sheets(1).Cells(i + 1, 7).Value = "ADNP Absence diverse Non Payée" Or _
Sheets(1).Cells(i + 1, 7).Value = "ABNJ Absence injustifiée" Or Sheets(1).Cells(i + 1, 7).Value = "MPRO Maladie Professionnelle" Or Sheets(1).Cells(i + 1, 7).Value = "AT Accident du travail" Or Sheets(1).Cells(i + 1, 7).Value = "MITM Mi-temps thérapeuthique Maladie") Then
j = j + 1
'Condition pour déterminer la tranche d'age
If Year(Sheets(1).Cells(i + 1, 13).Value) > 1992 Then
a1 = a1 + 1
ElseIf Year(Sheets(1).Cells(i + 1, 13).Value) < 1991 And Year(Sheets(1).Cells(i + 1, 13).Value) > 1983 Then
a2 = a2 + 1
ElseIf Year(Sheets(1).Cells(i + 1, 13).Value) < 1982 And Year(Sheets(1).Cells(i + 1, 13).Value) > 1973 Then
a3 = a3 + 1
ElseIf Year(Sheets(1).Cells(i + 1, 13).Value) < 1972 And Year(Sheets(1).Cells(i + 1, 13).Value) > 1962 Then
a4 = a4 + 1
Else
a5 = a5 + 1
End If
'Condition pour le statut
If Sheets(1).Cells(i + 1, 15).Value = "OUVR" Then
s1 = s1 + 1
ElseIf Sheets(1).Cells(i + 1, 15).Value = "AGMT" Then
s2 = s2 + 1
ElseIf Sheets(1).Cells(i + 1, 15).Value = "EMPL" Then
s3 = s3 + 1
ElseIf Sheets(1).Cells(i + 1, 15).Value = "TECH" Then
s4 = s4 + 1
Else
s5 = s5 + 1
End If
'Condition pour l'ancieneté
If DateDiff("m", Sheets(1).Cells(i + 1, 5).Value, Sheets(1).Cells(i + 1, 14).Value) < 3 Then
d1 = d1 + 1
ElseIf DateDiff("m", Sheets(1).Cells(i + 1, 5).Value, Sheets(1).Cells(i + 1, 14).Value) > 12 Then
d3 = d3 + 1
Else
d2 = d2 + 1
End If
i = i + 1
'La personne étant comptabilisé via je j = j+1 , il faut donc passer a la personne suivant via l'instruction ci-dessous
Do
i = i + 1
Loop While Sheets(1).Cells(i + 1, 3).Value = Sheets(1).Cells(i, 3).Value
'Autre condition, la personne a d'abord était en CP, puis malade, la on augmente aussi le compteur puis on passe a la personne suivante
ElseIf (Sheets(1).Cells(i + 1, 3).Value = Sheets(1).Cells(i, 3).Value) And (Sheets(1).Cells(i + 1, 7).Value <> Sheets(1).Cells(i, 7).Value) And (Sheets(1).Cells(i + 1, 7).Value = "MALA Maladie" Or Sheets(1).Cells(i + 1, 7).Value = "ATJ Accident trajet" Or Sheets(1).Cells(i + 1, 7).Value = "ADNP Absence diverse Non Payée" _
Or Sheets(1).Cells(i + 1, 7).Value = "ABNJ Absence injustifiée" Or Sheets(1).Cells(i + 1, 7).Value = "MPRO Maladie Professionnelle" Or Sheets(1).Cells(i + 1, 7).Value = "AT Accident du travail" Or Sheets(1).Cells(i + 1, 7).Value = "MITM Mi-temps thérapeuthique Maladie") Then
j = j + 1
If Year(Sheets(1).Cells(i + 1, 13).Value) > 1992 Then
a1 = a1 + 1
ElseIf Year(Sheets(1).Cells(i + 1, 13).Value) < 1991 And Year(Sheets(1).Cells(i + 1, 13).Value) > 1983 Then
a2 = a2 + 1
ElseIf Year(Sheets(1).Cells(i + 1, 13).Value) < 1982 And Year(Sheets(1).Cells(i + 1, 13).Value) > 1973 Then
a3 = a3 + 1
ElseIf Year(Sheets(1).Cells(i + 1, 13).Value) < 1972 And Year(Sheets(1).Cells(i + 1, 13).Value) > 1962 Then
a4 = a4 + 1
Else
a5 = a5 + 1
End If
If Sheets(1).Cells(i + 1, 15).Value = "OUVR" Then
s1 = s1 + 1
ElseIf Sheets(1).Cells(i + 1, 15).Value = "AGMT" Then
s2 = s2 + 1
ElseIf Sheets(1).Cells(i + 1, 15).Value = "EMPL" Then
s3 = s3 + 1
ElseIf Sheets(1).Cells(i + 1, 15).Value = "TECH" Then
s4 = s4 + 1
Else
s5 = s5 + 1
End If
If DateDiff("m", Sheets(1).Cells(i + 1, 5).Value, Sheets(1).Cells(i + 1, 14).Value) < 3 Then
d1 = d1 + 1
ElseIf DateDiff("m", Sheets(1).Cells(i + 1, 5).Value, Sheets(1).Cells(i + 1, 14).Value) > 12 Then
d3 = d3 + 1
Else
d2 = d2 + 1
End If
Do
i = i + 1
Loop While Sheets(1).Cells(i + 1, 3).Value = Sheets(1).Cells(i, 3).Value
'Sinon, on passe aux lignes suivantes
Else
i = i + 1
End If
Loop
'Enfin on rentre la valeur finale de j dans le tableau
Sheets(3).Cells(li, 1).Value = Sheets(1).Cells(i, 2).Value
Sheets(3).Cells(li, 8).Value = j
Sheets(3).Cells(li + 1, 8).Value = a1
Sheets(3).Cells(li + 2, 8).Value = a2
Sheets(3).Cells(li + 3, 8).Value = a3
Sheets(3).Cells(li + 4, 8).Value = a4
Sheets(3).Cells(li + 5, 8).Value = a5
Sheets(3).Cells(li + 6, 8).Value = s1
Sheets(3).Cells(li + 7, 8).Value = s2
Sheets(3).Cells(li + 8, 8).Value = s3
Sheets(3).Cells(li + 9, 8).Value = s4
Sheets(3).Cells(li + 10, 8).Value = s5
Sheets(3).Cells(li + 11, 8).Value = d1
Sheets(3).Cells(li + 12, 8).Value = d2
Sheets(3).Cells(li + 13, 8).Value = d3
li = li + 14
j = 0
i = i + 1
a1 = a2 = a3 = a4 = a5 = 0
s1 = s2 = s3 = s4 = s5 = 0
d1 = d2 = d3 = 0
Next
mes compteurs a1 etc ... augmentent même si le j ne le fait pas, en gros le programme regarde le if a l'intérieur du if même quand celui-ci est faux.
Merci d'avance