IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème boucle while


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 42
    Par défaut Problème boucle while
    Bonjour,

    J'ai un problème avec ma boucle While. Je suis obligée d'arreter le programme en appuyant sur echap.

    Le but de cette boucle est de recalculer B14, B15 et B16 jusqu'à ce que H2HCnew et B18 aient la même valeur

    Les variables ont l'air connu du programme, donc je pense que c'est une erreur de syntax peut être.

    Voila, si quelqu'un peut m'aider je lui serai extrêmement reconnaissante, je craque un peu !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Range("B18").Formula = 1
    H2HCnew = 40
     
    Do While H2HCnew <> Range("B18").Value
     
    Range("B14").Formula = (((K * Math.Exp(exp0 - (exp1 + cNt * Nt + cSDBTO * SDBTO) / (Temp + 273.15))) * H2HCnew ^ c3_H2HC * ppH2 ^ c1_ppH2) / Math.Log(SDBTO * S0 / 100 / 9)) ^ (1 / c2_VVH)
     
    'Calcul du débit moyen
    Range("B15").Formula = Range("B14").Value * 180.5 * 0.83
     
    'Calcul du débit max
    If Range("B15").Value > 300 Then
       Range("B16").Formula = 300
    Else
       Range("B16").Formula = Range("B15").Value
    End If
     
    'Calcul H2/HC calculé
     
    If Range("B16").Value < 300 Then
        Range("B18").Formula = 4070000 * Range("B16").Value ^ (-1.912)
    Else
        Range("B18").Formula = 74.7
    End If
     
    H2HCnew = Range("B18").Value
    Range("B12").Formula = H2HCnew
     
    Loop

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Je ferais 2 remarques
    • Pourquoi saisir les valeurs dans des cellules de la feuille, pourquoi ne pas faire les calculs directement dans VBa, est ce volontaire? Ça serait bien plus rapide.
    • As tu essayé le solveur fourni par Excel? Il me semble qu'en ajoutant peut-être quelques cellules avec des formules intermédiaires, tu serais dans le cadre de ce qu'il est possible de faire avec le Solver.



    ++
    Qwaz

    PS: pense a utiliser les balises code (le bouton #)

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 42
    Par défaut
    En fait c'est juste une partie du programme, normalement c'est un userform, qui ensuite remplit une à une des colonnes
    Et du coup j'ai besoin que cette boucle fonctionne pour compliquer un peu ensuite.

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    Ta boucle ne peut pas fonctionner


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Do While H2HCnew <> CellB18
     
            'Suite du code
     
            H2HCnew = CellB18
     
        Loop
    Tu dis avec ce code, "Je veux que la boucle continue tant que H2HCnew <> CellB18", hors juste avant que ce teste soit effectué pour savoir si elle doit continuer ou pas, tu dis "H2HCnew = CellB18".
    Donc H2HCnew ne sera jamais différent de CellB18.

    [Edit]

    J'ai un problème avec ma boucle While. Je suis obligée d’arrêter le programme en appuyant sur echap.
    D'ailleurs ça doit se planter ailleurs car ici, tu fais un tour dans ta boucle et tu la quittes.
    [/Edit]
    [Edit]
    Je viens de relire ton message de départ.
    Il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do until H2HCnew = CellB18
    Mais il faudra retirer
    [/Edit]
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 42
    Par défaut
    Exact, grosse erreur

    Mais du coup je ne vois pas comment faire pour modifier H2HCnew

    Je l'ai initialiser à 40 mais c'est une valeur au hasard, ce que je voudrais c'est que H2HCnew se modifie pendant la boucle

    Le but de cette boucle c'est de trouver la bonne valeur de H2HC dans la relation qui donne B14 en utilisant aussi l'équation qui donne B18

    Un truc itératif quoi, mais je m'embrouille un peu entre pour arriver à faire ça

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    J'ai édité mon message précédent avec d'autre info.

    Si ça n'est pas claire pour toi, ça va être compliqué

    Alors je suppose que l'une de tes variables doit être incrémenté durant la boucle, je pencherais pour H2HCnew.

    Dans quel cadre dois tu faire ce travail? Boulot ou scolaire, je pose cette question pour savoir si un énoncé précis existe et un peu aussi pour savoir comment répondre a tes interrogation sans trop mâcher le travail si c'est scolaire

    ++

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par mathilde13870 Voir le message
    Bonjour,

    Le but de cette boucle est de recalculer B14, B15 et B16 jusqu'à ce que H2HCnew et B18 aient la même valeur

    D'une manière plus générale; il faut être très prudent lorsque l'on fait des comparaisons d'égalité entre des nombres issus de calculs. La conversion du décimal au binaire et l'inverse, de même que les inévitables erreurs d'arrondi, peuvent faire que le compilateur peut décréter que les nombres ne sont pas égaux, même si la différence est à la sixième ou la septième décimale, ou même plus loin.

    C'est probablement préférable d'accepter une certaine "inégalité" en testant la différence, si différence il y a.

    dim chiffre as Double
    chiffre = Range("B18").Value

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do while (chiffre - H2HCnew >= -.0000000001) and  (chiffre - H2HCnew <= .0000000001)
    Tu peux ajuster le nombre de décimales en fonction de la précision souhaitée.

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 42
    Par défaut
    C'est pour le boulot, je suis en stage là !

    J'avais pas pris le problème dans le bon sens en fait...
    Déjà la ça tourne, même si ça n'écrit rien du tout donc je sais pas si ça fonctionne vraiment encore !

    Mais je vais essayer et je reviendrai si ça ne fonctionne toujours pas !

    Clementmarcotte, merci pour l'info, je vais modifier ce détail !

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Par exemple, mais la remarque de ClementMarcotte doit en effet être prise en compte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Sub Test()
    'Déclaration de variable (je prends des noms en référence au nom de cellules mais il est mieux de mettre des noms plus parlant pour toi.)
    Dim CellB12 As Double
    Dim CellB14 As Double
    Dim CellB15 As Double
    Dim CellB16 As Double
    Dim CellB18 As Double
    Dim H2HCnew As Double, K As Double 'il faut déclarer toutes tes variables de le même façon
     
        CellB18 = 1
        H2HCnew = 40
     
        Do
     
            CellB14 = (((K * Math.Exp(exp0 - (exp1 + cNt * Nt + cSDBTO * SDBTO) / (Temp + 273.15))) * H2HCnew ^ c3_H2HC * ppH2 ^ c1_ppH2) / Math.Log(SDBTO * S0 / 100 / 9)) ^ (1 / c2_VVH)
     
            'Calcul du débit moyen
            CellB15 = CellB14 * 180.5 * 0.83
     
            'Calcul du débit max
            If CellB15 > 300 Then
                CellB16 = 300
            Else
                CellB16 = CellB15
            End If
     
            'Calcul H2/HC calculé
     
            If CellB16 < 300 Then
                CellB18 = 4070000 * CellB16 ^ (-1.912)
            Else
                CellB18 = 74.7
            End If
     
            'H2HCnew = CellB18
            H2HCnew = H2HCnew + 1
            CellB12 = H2HCnew
     
        Loop Until H2HCnew = CellB18
     
    'Ensuite il faudra noté les valeurs retenues dans les cellules correspondantes
    LafeuilleOuJeTravaille.Range("B18").value = CellB18
    '....
     
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Pour certains calculs d'approximation, préférer le type Currency au type Double
    Quand les données sources doivent rester en Double, utiliser des totalisateurs en Currency peut suffire
    ou sinon vérifier un calcul en arrondissant via la fonction Format

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 42
    Par défaut
    Bon maintenant ça tourne mais ça ne s'arrete plus, enfin je vois les cellules bougées donc ça fonctionne mais ça continue jusqu'a plus de 1000 sans jamais s'arreter...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème boucle while
    Par Peedro dans le forum Langage
    Réponses: 4
    Dernier message: 07/10/2008, 15h09
  2. Problème boucle while
    Par chuko dans le forum C
    Réponses: 7
    Dernier message: 04/07/2008, 17h12
  3. Problème boucle while
    Par fred33 dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2008, 20h16
  4. [MySQL] Problème boucle WHILE
    Par Adlack dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/02/2007, 20h30
  5. Problème boucle while et evenement
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 30/03/2006, 19h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo