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 :

VBA - Itération qui ne marche pas [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut VBA - Itération qui ne marche pas
    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.

    Voici mes lignes de code :

    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
    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   'li,col" la valeur ici d'un calcul , cette valeur est a multiplier par un coéfficient pour obtenir ma valeur souhaité dans la feuille (Acceuil)
        col = 3
        li1 = 61
        col1 = 3
        DoDM = Sheets("Accueil").Range("g41") ' ma valeur souhaité dans la feuille "Accueil"
     
     
     
        For x = 0.6 To 0.7  'Pas
            If (Sheets("Outil de calcul").Range("d60") <> DoDM) Then   ' Condition sur la valeur de DoD moyen souhaité par rapport à la Capa de base (tant que la cellule d60 est différente de la variable entrée dans la feuille "Accueil" , selectionne la cellule c66 dans "Outil de calcul" et la multiplie par le pas jusqu'à atteindre la valeur souhaitée dans "Acceuil"
     
                Sheets("Outil de calcul").Select
                Sheets("Outil de calcul").Range("C66").Value = Cells(li1, col1) * (x + Pas) ' 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
    Pourriez vous m'aider s'il vous plait ?
    Merci d'avance

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2003
    Messages
    604
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 604
    Par défaut
    Bonjour,
    Si tu souhaites avoir une réponse rapide et efficace, il est souhaitable que tu utilises les balises de code qui s'utilisent dans les forums.
    Autrement dit quand tu copies du code tu utilises le bouton # pour disposer des balises ""CODE"" autour de ton code. ( et la balise bulle pour tes commentaires)
    Exemple :
    ceci est du commentaire et en dessous je mets mon code
    En ce qui concerne ton code a priori il faut que tu mettes utilises le mot clef STEP pour définir le pas de ta boucle.
    Comme ceci
    Essayes voir ce que cela donne et renvoie nous le résultat.
    Bon courage.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut Problème d'itération - encore
    comme de bien entendu, Merci pour ta réponse

    Effectivement
    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
     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("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
    A l'air de marché

    cependant elle ne s’arrête pas à ma valeur souhaité. Je m'explique :

    Dans la feuille (Accueil) : J'ai fixé ma variable à 60% (mon DoDM dans mon code)
    c'est la valeur que je souhaite atteindre
    Dans la feuille ("Outil de calcul") J'ai calculé un DoD via des formules ( valeur variable ex : 40%)

    Dans cette même feuille, J'ai une valeur de ma Capa
    la ligne li1 et colonne col1
    que je souhaiterai multiplier par un coéff
    ici For x = 0.5 To 1 Step 0.01
    jusqu'à obtenir une valeur de ma capacité qui satisfasse un DoD de 60%
    valeur fixée dans la feuille "Acceuil"
    .

    Comment faire pour arrêter l'itération une fois la valeur de 60% atteinte ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    Une fois que tu as atteint ta valeur cible, place un exit for dans ton else

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ... then
    ... 'ta boucle continue tant que ton if est satisfait ...
     
    else: 'Ta valeur cible est atteinte'
    exit for
    Cela te permet de sortir de ta boucle,

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 6
    Par défaut
    Trystan441 , Merci pour ta réponse

    Même avec le ma séquence continue toujours son itération.

    En remplaçant le Par un pourrait marché ?

    tel que :
    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
    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.1 To 1 Step 0.01  'Pas
            While (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
            
            
            End While
        
            End If
    
            
            
    Next
        Sheets("Outil de calcul").Select
        Range("C62").Select
        ThisWorkbook.RefreshAll
        ThisWorkbook.RefreshAll
        ThisWorkbook.RefreshAll
        Sheets("Outil de calcul").Select
    End Sub
    cependant mon end while ne fonctionne pas
    message d'erreur
    Comment faire ?

    Merci d'avance

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    Bonjour à tous,

    pas forcément tout compris ce qu'il y a en D60, mais quelque soit la boucle, le test suivant sera toujours vrai puisque D60 et DoDm ne sont pas modifiés et donc les instructions suivantes sont exécutées.(avec boucle infinie si utilisation de while..)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If (Sheets("Outil de calcul").Range("d60") <> DoDM) Then
    le test devrait porter sur la valeur modifiée donc D66 (ou une variable qui sera écrite en D66 lorsque sa valeur sera correcte)

    A+

    edit : voir l'aide de While pour la syntaxe

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

Discussions similaires

  1. code VBA qui ne marche pas
    Par mimicha2000 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/07/2015, 19h51
  2. [AC-2003] RowSource d'un etat VBA qui ne marche pas
    Par kesamba dans le forum VBA Access
    Réponses: 10
    Dernier message: 22/02/2012, 19h40
  3. [AC-2003] Requête INSERT INTO sous VBA qui ne marche pas
    Par Shinoda00 dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/03/2011, 09h56
  4. [AC-2003] Requête qui ne marche pas quand je l'utilise en VBA ?
    Par [ZiP] dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 31/03/2010, 10h28
  5. VBA Access : Fonction find qui ne marche pas
    Par leeloo35 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/02/2008, 16h56

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