Itération qui ne s’arrête pas [Résolu] - Forum VB / VBA

A voir également:Itération qui ne s’arrête pasLe programme s'arrête après une itération, sans message d'erreur ✓ - Forum - Excel Snapchat ne cesse de s'arrêter - Forum - Snapchat Facebook ne cesse de s'arrêter ✓ - Forum - Facebook Service google play s'est arrêté ✓ - Forum - Tablette tactile Windows a arrêté ce périphérique car il présente des problèmes. (code 43) ✓ - Forum - Windows



Bonjour à toutes et à tous,

Je fais mes premier pas dans le monde du VBA.
J'ai un petit problème sur les commandes que écrites, mon itération ne marche pas pourriez vous m'aider ?

Je vous décrit ce que je veux faire :

Dans ma feuille (accueil) j'ai défini un paramètre variable (au choix de l'utilisateur du fichier) , cette variable est ma valeur souhaiter pour mes calculs.
Dans ma feuille "outil de calcul" se trouve une valeur issue d'un calcul antérieur.

Mon but est de multiplier la valeur dans "Outil de calcul" par un coefficient jusqu’à atteindre ma valeur souhaité ( la variable de la feuille "Accueil")
Si cette condition n'est pas atteinte , le calcul continue.


Sub Boucles()      Dim Capa As Integer     Dim Pas As Double     Dim x As Double     Dim li As Integer     Dim li1 As Integer     Dim col As Integer     Dim col1 As Integer     Dim DoDM As Integer              Pas = 0.01     li = 66     li1 = 61     col = 3     col1 = 3     DoDM = Sheets("Accueil").Range("g41")          'Capa = Sheets("Outil de calcul").Range("C61").Value     For x = 0.5 To 1 Step 0.01  'Pas         If (Sheets("Outil de calcul").Range("d65") <> DoDM)and Sheets("Outil de calcul").Range("d60") <> DoDM) Then   ' Condition sur la valeur de DoD moyen souhaité par rapport à la Capa de base             Sheets("Outil de calcul").Select             Sheets("Outil de calcul").Range("C66").Value = Cells(li1, col1) * (x)  ' Multiplie la cellule C61 (capa bat centralisée par le pas     Else          End If                   Next     Sheets("Outil de calcul").Select     Range("C62").Select     ThisWorkbook.RefreshAll     ThisWorkbook.RefreshAll     ThisWorkbook.RefreshAll     Sheets("Outil de calcul").Select End Sub


Mon problème est :
- Mon itération de valeur ne s'arrête pas malgré le Else et le End If
- Ma cellule D65 et D60 dépendent directement de la valeur de la cellule C66 et C61 de la feuille "Outil de calcul"

Ma condition est telle que : tant que D65 et D60 sont inf à G41 de la feuille "Accueil"
Je fais mon itération .

En faissant cette itération je fais varier ma valeur de C66 et donc par continuité ma valeur de D65.

Je veux que mon itération s'arrête lorsque D65 = G41 de la feuille "Acceuil"

Pourriez vous m'éclairer s'il vous plaît ?
Merci d'avance

Forum

A voir également:Itération qui ne s’arrête pasLe programme s'arrête après une itération, sans message d'erreur ✓ - Forum - Excel Snapchat ne cesse de s'arrêter - Forum - Snapchat Facebook ne cesse de s'arrêter ✓ - Forum - Facebook Service google play s'est arrêté ✓ - Forum - Tablette tactile Windows a arrêté ce périphérique car il présente des problèmes. (code 43) ✓ - Forum - Windows

Web: www.shapebootstrap.net

4 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Juste un if/else ne suffit pas....
Une fois la condition atteinte.. tu dois sortir de la boucle à l'aide d'un

 Exit For 

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Merci pour ta réponse,

Oui je l'ai rajouté entre temps :

 Else
Exit For
End If


Cependant, mon itération continue toujours même après l'ajout.

Je pense qu'il me faut une condition en plus vu que l'itération continue de tourner , en disant que :

quand D65 = G41 le calcul s'arrête , sauf que je ne sais pas comment m'y prendre .

Reply
réponses:
  • auteur

    là comme ça c'est compliqué de te répondre...
    Place un point d'arrêt dans ton code et exécute le en mode pas à pas et regarde les différentes valeurs et si tu passes bien dans ton else...

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

1. Il y a pas mal de code inutile.
2. La différence de syntaxe n'aide pas à la compréhension. ex.

Sheets("Outil de calcul").Range("C66").Value = Cells(li1, col1) * (x) ' Multiplie la cellule C61 (capa bat centralisée par le pas

3. Je pense toutefois avoir à peu près compris :
- avec le jeu des calculs, je pense que tes pourcentages en D65 ne tombent pas juste (ex. 73,47%)
- donc je pense qu'il faut plutôt utiliser une boucle While et utiliser des inégalités ("<" ou ">" plutôt que différent "<>")

A+

Reply

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Merci pour ta réponse Zoul67,

J'ai trouvé la réponse !

le problème vient de la déclaration de la variable DoDM : ici un Integer alors qu'il est en fait un Double.
Ce qui fait que le calcul mouline sans s’arrêter puisque pour lui les seuls résultats qui marche sont soit 1 soit 0. Ce qui est faux.

En modifiant Integer par Double ça résout le problème

Reply

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed