Itération qui ne s’arrête pas

Résolu/Fermé
ID_Fabio Messages postés 3 Date d'inscription lundi 11 février 2019 Statut Membre Dernière intervention 12 février 2019 - Modifié le 11 févr. 2019 à 19:27
ID_Fabio Messages postés 3 Date d'inscription lundi 11 février 2019 Statut Membre Dernière intervention 12 février 2019 - 12 févr. 2019 à 19:11


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

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 févr. 2019 à 16:30
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

0
ID_Fabio Messages postés 3 Date d'inscription lundi 11 février 2019 Statut Membre Dernière intervention 12 février 2019
11 févr. 2019 à 16:41
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 .
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
11 févr. 2019 à 17:21
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...
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
11 févr. 2019 à 17:55
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+
0
ID_Fabio Messages postés 3 Date d'inscription lundi 11 février 2019 Statut Membre Dernière intervention 12 février 2019
12 févr. 2019 à 19:11
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
0