Probleme boucle while

Fermé
szn - 5 juin 2015 à 20:15
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 - 5 juin 2015 à 23:01
Bonjour, j'ai un soucis dans mon code mais je ne vois pas d'où il vient.
Lorsque je lance mon code, seule la première boucle while est prise en compte et pas celle permettant de repérer les défauts de l'onduleur 2.
Mon code:
Sub Reperer_defauts()

Dim i As Integer
Dim k As Integer
Dim l As Integer
Dim c As Integer
Dim x As Integer
Dim y As Integer

i = 2
k = 2
c = 1

'"Nettoyage" de la feuille
Sheets("Défauts").Select
Range("A2:D2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents

Sheets("Données").Activate

'On cherche les défaut de l'onduleur 1 (pyrano 1)
While Cells(i, 12) <> ""

While Cells(i, 12) < 100 'On atteint la première valeur d'irradiation supérieure à 100W/m²
i = i + 1
Wend

If Cells(i, 12) > 100 And Cells(i, 6) = 0 Then 'Si la puissance de l'onduleur est nulle
Sheets("Défauts").Cells(k, 2) = "Ond 1" 'On note l'onduleur en défaut
Sheets("Défauts").Cells(k, 3) = Sheets("Données").Cells(i, 20) 'On note la date de début du défaut
Sheets("Défauts").Cells(k, 4) = Sheets("Données").Cells(i, 20)
k = k + 1
End If


While Cells(i, 20) = Cells(i - 1, 20) 'On passe au jour suivant
i = i + 1
Wend

i = i + 1
Wend

'Date de fin du défaut
Sheets("Défauts").Activate
l = 2
While Cells(l, 3) <> ""
x = Day(CDate(Cells(l + 1, 3)))
y = Day(CDate(Cells(l, 4)))

While x = y + 1
Cells(l + 1, 3).Copy
Cells(l, 4).Select
ActiveSheet.Paste
Cells(l + 1, 3).Select
Selection.EntireRow.Delete
x = Day(CDate(Cells(l + 1, 3)))
y = Day(CDate(Cells(l, 4)))
Wend

l = l + 1
Wend

'Id du défaut
MsgBox (c)
k = 2
While Cells(k, 3) <> ""
Sheets("Défauts").Cells(k, 1) = Format(M, "00") & "_" & Format(c, "000") 'Id défaut
c = c + 1
k = k + 1
Wend

'On cherche les défaut de l'onduleur 2 (pyrano 1)
i = 2
While Cells(i, 12) <> ""

While Cells(i, 12) < 100
i = i + 1
Wend

If Cells(i, 12) > 100 And Cells(i, 7) = 0 Then
Sheets("Défauts").Cells(k, 2) = "Ond 2"
Sheets("Défauts").Cells(k, 3) = Sheets("Données").Cells(i, 20)
Sheets("Défauts").Cells(k, 4) = Sheets("Données").Cells(i, 20)
k = k + 1
End If

While Cells(i, 20) = Cells(i - 1, 20)
i = i + 1
Wend

i = i + 1
Wend

Sheets("Défauts").Activate
l = 2
While Cells(l, 3) <> ""
x = Day(CDate(Cells(l + 1, 3)))
y = Day(CDate(Cells(l, 4)))

While x = y + 1
Cells(l + 1, 3).Copy
Cells(l, 4).Select
ActiveSheet.Paste
Cells(l + 1, 3).Select
Selection.EntireRow.Delete
x = Day(CDate(Cells(l + 1, 3)))
y = Day(CDate(Cells(l, 4)))
Wend

l = l + 1
Wend

k = 2
While Cells(k, 3) <> ""
Sheets("Défauts").Cells(k, 1) = Format(M, "00") & "_" & Format(c, "000")
c = c + 1
k = k + 1
Wend


Je suis bloqué la dessus depuis plus d'une heure alors que c'est surement un truc tout bête.
Si quelqu'un voit le souci je le remercie d'avance

Cordialement

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 716
5 juin 2015 à 22:48
Bonjour,

J'ai bien peur que tester ton code sur un listing ce ne soit pas très efficace.
Tu ferais mieux de le dérouler pas à pas, cela te permettrait de détecter l'erreur, sinon tu nous mets le classeur sans éléments personnels sur https://www.cjoint.com/ (mode d'emploi) et tu mets ici le lien obtenu.
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 858
5 juin 2015 à 23:01
Bonsoir,

Pas simple de te répondre sans ton classeur!
Un truc qui me chagrine, c'est ton incrémentation de i avant ton 1er wend global.
Tu viens déjà de l'incrémenter dans ton while du changement de jour. Donc ton i pointe sur une valeur à tester.

Sinon, pour le 2ème onduleur, tu devrais réactiver la feuille données.

Cordialement
0