Menu

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

Messages postés
3
Date d'inscription
lundi 11 février 2019
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
Afficher la suite 

Votre réponse

4 réponses

Messages postés
24555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 février 2019
1842
0
Merci
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

Commenter la réponse de jordane45
Messages postés
3
Date d'inscription
lundi 11 février 2019
Dernière intervention
12 février 2019
0
Merci
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 .
jordane45
Messages postés
24555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 février 2019
1842 -
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...
Commenter la réponse de ID_Fabio
Messages postés
1844
Date d'inscription
lundi 3 mai 2010
Dernière intervention
15 février 2019
122
0
Merci
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+
Commenter la réponse de Zoul67
Messages postés
3
Date d'inscription
lundi 11 février 2019
Dernière intervention
12 février 2019
0
Merci
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
Commenter la réponse de ID_Fabio