Aide Débutant - Problème boucle

Bonjour,

Je souhaite automatisée une feuille excel.

Je veux C1=5 avec A1 la variable. (Dans C1 j'ai mis une soustraction, "A1-2").

Le problème est simple. Je sais que je peux le résoudre avec le solveur mais c'est un entrainement pour une feuille plus compliquée =)

Voici mon programme :

Sub Scenario()
    Do
        Dim i As Double

            For i = 1 To 10 Step 0.02
            Range("a1") = i

             Next i

    Loop Until Range("c1") = 5

End Sub

Je ne vois pas où est l'erreur

PS: j'ai fais exprès de prendre "double" pour avoir un nombre à virgule.

Merci par avance

Salut Robin,

bienvenue au club des programmeurs fous!

  • DIM doit être placé en début de procédure, une seule fois.
  • LOOP UNTIL ne vérifie la valeur de C1 qu'en sortie de boucle FOR i, c-à-d bien longtemps après que C1 ait dépassé cette valeur.
Un milliard de boucle DO LOOP ne donnerait pas plus de résultat!

Cela dit j'ai essayé d'intercepter C1 dans la boucle FOR i : peanuts!

For i = 1 To 10 Step 0.02
    [A1] = i
    If [C1] = 5 Then
        MsgBox i
        Exit For
    End If
Next

Pour arrêter la boucle, j'ai du mettre :

[code][/ If [C1] > 5 Then ...

code]

bien que le format cellule soit réglé sur nombre à 30 décimales.

Pas d'autre réponse en ce qui me concerne. Faudra attendre qu'un crack se manifeste pour nous éclairer.

A+

Bonsoir,

Sub Scenario()
    Dim i As Integer
    With ActiveSheet
        For i = 100 To 1000 Step 2
            .Range("A1") = i / 100
            .Calculate
            If .Range("C1") = 5 Then Exit For
        Next i
    End With
End Sub

Cordialement.

Trop fort et rapide !

merci pour votre aide =)

Un milliard de boucle DO LOOP ne donnerait pas plus de résultat!

Oui je l'ai remarqué

Bonjour,

Deux remarques complémentaires qui pourront t'être utiles :

Je laisse de côté les problèmes de boucles déjà invoqués avec leur vraies et fausses imbrications... Avec un peu d'entrainement, la manipulation de boucles cessera de poser problème !

1) Tu fais une comparaison avec le résultat d'une cellule dont la valeur est calculée par une formule. Seulement durant l'exécution de ta boucle le recalcul ne se fait pas ! Excel reprendra la main à la fin de la macro pour procéder au recalcul. Un test ne pourra donc arrêter la boucle au moment souhaité si tu ne forces pas le recalcul à chaque étape...

2) Le point précédent était visible dans le code, celui-ci ne l'est pas. Lorsqu'on défile des éléments dans une boucle, un compte d'éléments représentant une série de valeurs discrètes (toujours un nombre entier d'éléments) on a naturellement coutume d'utiliser une variable Integer ou Long comme compteur. Ton idée allait à contre-courant de ce principe, elle n'est cependant pas absurde (incrémenter d'une valeur décimal est un calcul que rien n'empêche...) mais se heurte à un écueil souvent méconnu, c'est qu'un ordinateur ne calcule pas en système décimal : il convertit les nombres en binaire, calcule (avec éventuellement des stockages de valeurs intermédiaires) et reconvertit en décimal. Or il se trouve que certaines valeurs de l'ensemble des nombres réels peuvent avoir un nombre infini de chiffres après la virgule. C'est vrai en binaire comme en décimal (mais pas pour les mêmes nombres). Les capacités de stockage des ordinateurs étant limitées, une norme fixe à 15 chiffres significatifs les valeurs stockées, ; il s'ensuit qu'un nombre décimal peut toujours être tronqué, sans conséquence la plupart du temps mais dès lors qu'on effectue une comparaison d'égalité les probabilités que le résultat soit FAUX deviennent assez vite largement majoritaires...

Cordialement.

bonjour,

Merci pour ces explications.

Rechercher des sujets similaires à "aide debutant probleme boucle"