Boucle avec conditions

julien0112

XLDnaute Nouveau
Bonjour à tous,

Je me permets de solliciter votre aide car je n'arrive pas à construire ce que je veux malgré des recherches sur différents forums.

Mon problème est le suivant:
J'ai cinq colonnes:
A=des heures
B=Total
C=apports (parfois=0)
D=consommation (parfois =0)
E=rang des consommations

A1=500
A2=500+b1-c1

j'aimerai que chaque fois que la valeur en colonne A est > à 853 alors je cherche le meilleur rang (la plus petite valeur en colonne E) depuis le moment ou la limite est dépassée et je mets en D la valeur 42

Et à chaque fois que la valeur en colonne A<128 je cherche le moins bon rang depuis ce moment et je mets 0 (à la place de 42) en D

Cela jusqu'à ce que mon total soit toujours 128<=Total<=853.

Je joints le fichier et un bout de mon code pour les gens qui sont intéressés!

Set Plage = Range("B10:B177")
For Each Cellule In Plage
If Cellule.Value < 128 Then
Posit = Cellule.Row
Set c1 = Range("E1:E" & Posit)
myvar = Application.WorksheetFunction.Match(Application.Max(c1), Range("E10:E" & Posit), 0)
MsgBox "La valeur max est en ligne : " & myvar




Range("D" & myvar) = 0

End If


If Cellule.Value > 853 Then
Posit = Cellule.Row
Set c1 = Range("E1:E" & Posit)
myvar = Application.WorksheetFunction.Match(Application.Min(c1), Range("o10:eek:" & Posit), 0)
MsgBox "La valeur min est en ligne : " & myvar




Range("D" & myvar) = Range("B3")
End If

Next

D'avance merci pour votre aide!
Cordialement,
Julien
 

Pièces jointes

  • Exemple classement.zip
    13 KB · Affichages: 18

Modeste

XLDnaute Barbatruc
Re : Boucle avec conditions

Bonjour julien0112,

Je n'ai pas regardé tout ton code, mais si le MAX(C1) est en ligne 6, comment pourrait-on en retrouver l'EQUIV dans
Code:
myvar = Application.WorksheetFunction.Match(Application.Max(c1), Range("E[COLOR="Red"][B]10[/B][/COLOR]:E" & Posit), 0)

Pense également à vérifier la partie de code similaire dans ton second 'if' ... et teste déjà ça!
 

Modeste

XLDnaute Barbatruc
Re : Boucle avec conditions

re-bonjour,

... ta réponse implique qu'il y a peut-être aussi dans les explications, des choses qui ne sont pas en lien avec le fichier que tu as déposé ... Pas facile, dès lors, de s'y retrouver.
D'autre part, tu ne dis pas ce qui ne fonctionne pas, en dehors de ma question de tout à l'heure ... Quand j'exécute ton code (même en faisant la correction évoquée) j'observe que le premier nombre en colonne B qui descend sous les 128, apparaît à la ligne 67. Tu cherches alors la position de la plus grande valeur en colonne E (entre les lignes 1 et 67) ... au "premier tour", il s'agit de 156, trouvé en E6. Tu indiques à ce moment 0, en D6 ... Mais un 0 à cet endroit ... est supposé impliquer quoi? D'autant qu'au tour suivant, c'est à nouveau D6 qui reçoit 0 et ainsi de suite pendant un certain temps !?
... Pour les autres, je ne sais pas, mais moi, je n'arrive pas à comprendre :confused:
 

julien0112

XLDnaute Nouveau
Re : Boucle avec conditions

Bonjour,

Merci pour la réponse!

J'ai voulu faire vite et je n'ai pas adapté mon code au fichier light.

La colonne D est le programme de consommation de base et c'est lui que je dois modifier en fonction des critères de limites et de classement.

Si mon total dépasse la limite supérieure alors je dois remplacer un 0 par un 42 dans la colonne D et je dois prendre pour se faire la cellule en D qui a le meilleur classement (le plus petit chiffre) en E.

A l'inverse, si mon total dépasse la limite inférieure cela veut dire que mon programme de base à trop produit et je dois donc remplacer un 42 en colonne D par un 0 et je vais donc choisir la cellule en D qui à le moins bon classement en E (depuis le moment ou la limite est dépassée et vers le haut)

tu as parfaitement saisi ma question.

Il faut juste que j'adapte mon code à ce fichier.

Excellente journée,
Cordialement,
j.
 

Discussions similaires

Réponses
1
Affichages
562

Statistiques des forums

Discussions
312 503
Messages
2 089 053
Membres
104 013
dernier inscrit
VELONDAHY Mickaël