cs_front33
Messages postés30Date d'inscriptionmercredi 7 mai 2008StatutMembreDernière intervention22 août 2008
-
13 mai 2008 à 15:58
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 2012
-
14 mai 2008 à 09:55
Bonjour,
j'ai un problème avec une boucle. Quand je l'active elle ne s'arrête plus.
Je pense avoir un problème d'incrémentation mais je ne sais meme pas ce que cela veut dire.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 14 mai 2008 à 09:41
Salut,
Non je pense que les cases vide sont justement lieés à ce que je te disais
Et pourquoi tu ne mets rien si la condition If Cells(x).Value > 0.5 * Cells(y).Value Then se vérifie?
Donc que souhaite tu mettre si cette condition est vérifiée?
cela reprends mes intérrogations! nécessites tu un OR ou un AND dans ta condidtion IFEst ce aux moins une condition(<gras>OR) ou les deux (AND)</gras>
cs_front33
Messages postés30Date d'inscriptionmercredi 7 mai 2008StatutMembreDernière intervention22 août 2008 13 mai 2008 à 17:34
loooolll
alors en gros il faut que pour chaque ligne i (de 1657 à 2963) le programme aille observer les 47 valeur avant ce i (espacées de 30 jours à chaque fois) qu'il me renvoie 19999 si mes deux conditions sont vérifiées pour ces 47 valeurs et 8 sinon.
Ensuite il faut qu'il prenne le i qui suit et qu'il refasse la meme chose et cela pour tous les i de 1657 à 2963.
Si tu souhaites d'autres infos n'hésites pas j'ai vraiment envi de comprendre ce qui j'ai oublié
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 13 mai 2008 à 18:16
Re,
Ok donc ce qu'il te faut c'est un IF pas un WHILE (qui est un autre TYPE de boucle!!!)
Essaie peu etre alors:
Sub Corridor()
Dim i As integer
Dim k As Integer
For i = 1657 To 2963
For k = 1 To 47
If Cells(i - (30 * k), 2).Value > 0.5 * Cells((i - (4 * 360)), _
2).Value And Cells(i - (30 * k), 2).Value < 1.5 * Cells((i -(4 * _
360)), 2).Value Then
Cells(i, 3).Value = 19999
Else
Cells(i, 3).Value = 8
End If
Next k
cs_front33
Messages postés30Date d'inscriptionmercredi 7 mai 2008StatutMembreDernière intervention22 août 2008 13 mai 2008 à 18:20
Merci pour ton aide
j'y avais deja pensé mais comment, à l'intérieur de la boucle k lui mettre... si ça remplit pas les conditions UNE SEULE FOIS alors mettre 8 et s'arrêter pour ce i
puis passer au i suivant etc...
Car la j'ai peur qu'avec ce code, pour chque i, cela ne prenne en compte que le dernier k tester...
moi il faut que si ça ne remplit pas les conditions une seule fois ça me mette 8
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 13 mai 2008 à 21:54
Re,
Non vraiment, excuses moi mais j'ai du mal à cerner ce que tu souhaites faire.
Alors on va essayer de reprendre... QUE souhaitestu faire exactement?
Sois CLAIR s'il te plait, je ne voudrais passer X temps à te sortir les vers du nez (ne le prends pas mal).
Penses que le plus tu seras clair et précis dans l'énoncé de ton problème, le plus rapidement tu auras une réponse adéquate à ce souci
POURQUOI as tu eu besoin de modifier le code de départ?
SI UNE DES DEUX CONDITIONS N'EST PAS RESPECTEE NE SERAIT-CE QU'UNE FOIS SUR LES 47 VALEURS ALORS CELA M'AFFICHE 8...
ENSUITE CELA DOIT DESCENDRE D'UNE LIGNE ET REPRODUIRE CELA JUSQUA LA LIGNE 2963.
PROBLEME: avec une simple boucle IF cela va marcher mais cela va faire les 47 tests et ne retenir que le dernier (sans s'arrêter et m'afficher 8 si une des conditions n'est pas respectée ne serait-ce qu'une fois... Il me faut une boucle IF du genre
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 14 mai 2008 à 09:14
Salut,
Et pourquoi tu ne mets rien si la condition If Cells(x).Value > 0.5 * Cells(y).Value Then se vérifie?
Je vais faire un essaie pour voir si j'ai compris.
1-Tu souhaites mettre 19999 dans une cellule SI AU MOINS l'une des condidtions est BONNE? (remplacer AND par OR dans le premier code que je t'ai proposé)
2-Tu souhaites mettre 19999 dans la cellule si la valeur est comprise entre 0.5 * et 1.5* la cellule plus haut? (dans ce cas le code que je t'ai proposé devrait fonctionner)
En revanche si tu veux passer au i suivant dès que la cellule prends la valeur 8 utilise Exit For
3 - Essai peu etre
Sub Corridor()
Dim i As Integer
Dim k As Integer
For i = 1657 To 2963
For k = 1 To 47
If Cells(i - (30 * k), 2).Value > 0.5 * Cells((i - (4 * 360)), 2).Value And Cells(i - (30 * k), 2).Value < 1.5 * Cells((i - (4 * 360)), 2).Value Then
Cells(i, 3).Value = 19999
Else
Cells(i, 3).Value = 8
Exit For
End If
Next k
Next i
End Sub<hr />, ----
[code.aspx?ID=41455 By Renfield]
cs_front33
Messages postés30Date d'inscriptionmercredi 7 mai 2008StatutMembreDernière intervention22 août 2008 14 mai 2008 à 09:23
YYEESS c'est EXITFOR qui me manquait
Je pense avoir le bon code mais j'ai un denrier problème: je n'ai que des 19999 qui s'affiche avec des trous de case vide. Dois je considérer que ce sont des 8??
Sub Corridor()
Dim i As Integer
Dim k As Integer
For i = 1657 To 2963
For k = 1 To 47
If Cells(i - (30 * k), 2).Value > 0.5 * Cells((i - (4 * 360)), 2).Value Then