Itération qui ne s’arrête pas [Résolu/Fermé]

Signaler
Messages postés
3
Date d'inscription
lundi 11 février 2019
Statut
Membre
Dernière intervention
12 février 2019
-
Messages postés
3
Date d'inscription
lundi 11 février 2019
Statut
Membre
Dernière intervention
12 février 2019
-


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

4 réponses

Messages postés
28896
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 juillet 2020
2 599
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

Messages postés
3
Date d'inscription
lundi 11 février 2019
Statut
Membre
Dernière intervention
12 février 2019

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 .
Messages postés
28896
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 juillet 2020
2 599
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...
Messages postés
1938
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
11 mai 2020
134
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+
Messages postés
3
Date d'inscription
lundi 11 février 2019
Statut
Membre
Dernière intervention
12 février 2019

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