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

Rechercher des sujets similaires à "probleme condition code vba"