VBA: compteur conditionnel
Résolu/FerméUtilisateur anonyme - 8 août 2023 à 10:29
- VBA: compteur conditionnel
- Mkdir vba ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba dépassement de capacité ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
7 réponses
3 août 2023 à 19:20
Bonjour whismeril,
Non justement la boucle s'est arrétée des que la somme des opérations décrites sur la cells(53,3) a dépassé le montant de cellule (53,2) .
La boucle s'est arrétée des que la condition a été remplie et je voudrais savoir à quel 'i"particulier.
Merci
Matthieu
3 août 2023 à 19:29
Le code ne fair pas s'arrêter la boucle, juste faire le calcul ou pas.
Donc i atteint 41.
Si tu veux que ça s'arrête, tu peux faire un truc comme ça (tapé de tête et vba n'est pas mon fort, il peut y avoir des boulettes)
sub test() For i = 1 To 40 a = WorksheetFunction.Small(Sheets("G.F. DE BREVES").Range("k10:k49"), i) If Cells(56, 2) <= 0 Then Cells(56, 3) = 0 Cells(56, 3) = a + Cells(56, 3) If Cells(56, 3) < Cells(56, 2) Then Exit for 'ici on sort de la boucle End if Next i Cells(56, 4) = i 'Affiche i qu'il vaille 41 ou moins End Sub
PS, pour yes prochains posts, merci d'utiliser la coloration syntaxique comme décrit là https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code en choisissant basic
3 août 2023 à 19:48
Merci ! Si j'ai bien compris ton raisonnement , le calcul s'arrete quand la condition est remplie mais la boucle elle, va continuer à tourner jusqu'à la fin meme si le resultat ne change pas .
J'essaye ta proposition demain
Merci d'avoir regardé !
Matthieu
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question3 août 2023 à 19:58
calcul s'arrete quand la condition est remplie mais la boucle elle, va continuer à tourner jusqu'à la fin meme si le resultat ne change pas .
Avec ton code oui
Modifié le 4 août 2023 à 07:26
Bonjour
j'ai écrit une boulette, à la ligne 11, c'est un > qu'il faut mettre (ou un >= ).
Enfin tel que j'ai compris ton code, à savoir dés que la somme dépasse Cells(56, 2), on s'arrête.
Par contre, je ne suis pas certain d'avoir, fait ce qu'il faut concernant le cas où Cells(56, 2) est inférieur à 0. Actuellement le résultat sera 0 + a.
4 août 2023 à 10:39
yes j'avais vu ! merci ta modif marche parfaitement et est parfaitement logique . Merci pour ton aide !
Bonne journée
Matthieu
4 août 2023 à 10:50
De rien
Pense à marquer le sujet résolu avec les 3 points en bas de ton premier message
7 août 2023 à 17:17
Bonjour Whismeril,
Je reviens sur ton code de vendredi (que j'ai appliqué à ma macro ci dessous) . Et il y a un cas pour lequel il ne marche pas.
Je m'explique:
effectivement, la macro va me sortir le "i" demandé avec la fonction :
If Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j) > 0 Then Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j + 1) = i
Et le "end for""
SAUF (et je ne l'explique pas) : quand la valeur de la fonction petite valeur va être pour la première fois > 0, et se suffira à elle même pour répondre à la condition souhaitée cad, cells(l,j)> cells(l,j-1) . (pas besoin de sommer 2 "i" pour arriver au résuluat souhaité donc)
Dans le cas ou (et c'était le cas dans mon exemple de vendredi), la formule va devoir additionner au moins 2 petites valeurs >0 pour répondre à la condition cells(l,j)> cells(l,j-1) alors la , cela fonctionnera .
Ce sera peut être plus parlant:
1er c: cells(l,j-1)
2eme c: cells(l,j)
3eme c: cells(l,j+1)
typiquement le résultat de la "3eme c" de la 1er ligne qui est à 0, devrait être à 26 (NB: la 1er c = 1.0% et la 2eme c= 1.02% donc ce n'est pas égal) . En effet je dois attendre la 26eme itération pour que la condition cells(l,j)> cells(l,j-1) soit remplie sans avoir besoin de la sommer avec un autre "i">0
Merci à toi !
Sub stress_test_passif() Application.ScreenUpdating = False Workbooks.Open Filename:= _ "P:\Bureau\Audit Contrôle\Suivi des risques\tableau de bord\Portefeuille FIA sous gestion.xlsx" Windows("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Activate 'gf de breves For k = 1 To 32 For j = 3 To 61 Step 4 For i = 1 To 40 l = k + 52 If Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j) = 0 Then Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j + 1) = 0 a = WorksheetFunction.Small(Workbooks("Portefeuille FIA sous gestion.xlsx").Sheets(k).Range("k10:k49"), i) Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j) = Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j) + a If Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j) >= Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j - 1) Then Exit For End If If Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j) > 0 Then Workbooks("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Sheets("marché secondaire inactif").Cells(l, j + 1) = i + 1 Next i Next j Next k Windows("suivi des augmentations de K + STRESS TEST PASSIF.xlsm").Activate Application.ScreenUpdating = True End Sub
7 août 2023 à 20:15
Heu....
J'ai pas compris...
Peux tu donner les valeurs d'entrée qui amènent à ce résultat incorrect ?
8 août 2023 à 10:19
ouais l'enfer d'écrire ça mes "i" qui sont donc compris entre 1 et 40, s'appliquent via la formule petitevaleur, sur une plage de cellules égales à 0 ou > à 0. si je vire mes 0, ta formule marche sans problème quelque soit le cas . par contre si je les laisse, évidemment les premières petites valeurs font ressortir tous mes 0 (c'est normal et ce n'est pas un problème ) mais dès que la 1er valeur > 0 est identifiée et qu'en plus la condition Cells(l,j) > Cells(l,j-1) est remplie, la boucle va évidemment s'arrêter mais elle va me compter i = 0 , alors que j'aurais du avoir toutes les fois ou le résultat de mes i = 0 + la 1er valeur positive. la ou la logique est curieuse c'est que si pour satisfaire cette condition Cells(l,j) > Cells(l,j-1) , il me faut 2 valeurs positives la formule marche sans problème là aussi . J'ai bidouillé un truc qui fonctionne pour corriger cela mais j'aimerai comprendre . Merci Matthieu
4 août 2023 à 09:34
Bonjour,
Un compteur, c'est une variable qu'on initialise à 0 avant la boucle
Et qu'on incrément (+1) à chaque tour de boucle
4 août 2023 à 12:48
Evidement que c'est une lettre fantôme due à une frappe clavier trop légère .
Va-tu me demander l'accent sur le: "E" ?