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 :

Macro Conditionnelle Incrémentation


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut Macro Conditionnelle Incrémentation
    Bonjour,
    Je cherche à incrémenter la valeur de la cellule H2 de la valeur de la cellule G29 quand cette dernière est différente de 0 et à conserver la valeur de G29 en H2 quand elle est égale à 0........

    Voir la PJ

    Le mot de passe de protection est xxx

    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Peux tu nous refaire ton explication avec des exemples
    Jérôme

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut Jeux de hasard de tirage
    Il s'agit d'un jeu de tirage, quand on clic sur LANCER, excel tire au sort les 5 lettres de A1 à A5, on parie sur les lettres que l'on a choisi , si l'on tombe juste, la mise est remportée et vient s'ajouter aux gains antérieurs sinon on reste sur le gain acquis.

    Donc:

    la mise: G29 vient augmenter H2 les gains antérieurs quand il y a gain: G29 <> 0, quand il n'y a pas de gain: G29 = 0 et H2 ne bouge pas.

    Pour l'instant, je suis parvenu à deux cas de figure:

    H2 reste bloqué à 0 ou H2 s'incrémente en boucle, je suppose et atteint des valeurs qui n'ont rien à voir avec G29 ou G29 + H2.


    Voilà le problème

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Je me trompe peut être mais dans tous les cas la formule est H2 = H2 + G29

    Si cette opération doit se passer à chaque modification de G29, il te faut utiliser le code ci dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$G$29" Then Range("H2").Value = Range("H2").Value + Target.Value
    End Sub
    Jérôme

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    J'ai appliqué ton code est rien ne bouge

    La valeur de H2 ne bronche pas d'un iota

    Je ne sais pas quelle valeur peut avoir ma réflexion mais ne faudrait-il pas un End If, chose qu'Excel ne demande pas comme s'il ne voyait absolument pas la macro évènementielle???????

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    mais ne faudrait-il pas un End If
    On peut aussi écrire une condition comme cela

    As tu mis le code au niveau de la feuille ?
    Jérôme

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Oui c'est la où est le code??

    Note que malgré la protection du classeur Excel ne bronche pas non-plus?????

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    pour le test, supprimes toutes les protections
    Jérôme

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Toujours rien

  10. #10
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Il n'y a aucune raison pour que ce code ne fonctionne pas.
    Essais de faire un test dans un nouveau classeur
    Jérôme

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Est ce que le fait que G29 soit le résultat d'une opération (=SOMME(G3;G4)) importe???

    C'est ça, je te joins le nouveau fichier que j'ai créé, quand je tape 6 et entré dans G29, H2 change mais quand c'est l'opération qui arrive au même résultat, rien du tout.......
    Fichiers attachés Fichiers attachés

  12. #12
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Voila la raison, cette méthode fonctionne pour une saisie manuel, pas pour une formule.
    Dans ce cas, il te faudra générer un évenement via un CommandButton et mettre le code ci dessous dans son evenement Click
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("H2").Value = Range("H2").Value + Range("G29").Value
    Jérôme

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Mais là il me sort un nombre bien supérieur à H2 + G29
    Dans mon test, G29 = 6 et H2 = 1362

    C'est ce que je cherchais à éviter, il semble que la solution soit entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    Range("H2").Value = Range("H2").Value + Range("G29").Value
    End Sub
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$G$29" Then Range("H2").Value = Range("H2").Value + Target.Value
    End Sub

  14. #14
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    La modification de la valeur d'une formule ne génère pas d’évènement.
    L'utilisation de l’évènement "calculate" ajoutera G29 à H2 à chaque calcul même si pas de modification donc pas bonne piste
    Jérôme

  15. #15
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Merci de tes réponses.
    Ok je comprends mieux; aucun moyen de biaiser?
    Je continue à tenter le coup/

    Je suis parti sur la piste Calculate et peut-être ai je trouvé pourquoi le chiffre est ainsi supérieur à la somme que je veux faire, Excel calcule à chaque tirage d'une lettre supplémentaire pour la lettre déjà tirée:

    Lettres tirées
    A
    G
    D
    T
    R Lettre choisie A Mise 6

    Quand excel tire de G; le D.....il recalcule.
    C'est, du moins, ce qu'il se passe pour Calculate:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Calculate()
    If Range("A1").Value = Range("D2").Value Or Range("A2").Value = Range("D2").Value Then
    Range("H2").Value = Range("H2").Value + Range("G29").Value
    End If
    End Sub
    D'où la tentation de passer par une boucle pour qu'Excel s'arrête à la valeur demandée:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Calculate()
    Do Until Range("H2").Value = Range("H2").Value + Range("G29").Value
    If Range("A1").Value = Range("D2").Value Or Range("A2").Value = Range("D2").Value Then
    Range("H2").Value = Range("H2").Value + Range("G29").Value
    End If
    Loop
    End Sub
    Et la c'est l'escalade, H2 augmente augmente augmente......
    Fichiers attachés Fichiers attachés

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    J'ai continué à travailler ma boucle mais si H2 augmente bien avec A1 = D2 (ce qui provoque G29 <> 0), la modification de A2 met la macro en boucle. (Voir fichier joint)

    Comment arrêter cette boucle?

    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
    Private Sub Worksheet_Calculate()
    Do While Range("G29").Value
    Do Until Range("H2").Value <> 0
    Do Until Range("H2").Value = Range("H2").Value + Range("G29").Value
    If Range("G29").Value <> 0 Then
    Range("H2").Value = Range("H2").Value + Range("G29").Value
    Exit Sub
    End If
    If Range("G29").Value <> 0 And Range("H2").Value <> Range("H2").Value + Range("G29").Value Then
    Exit Sub
    End If
    Loop
    Loop
    Loop
     
    If Range("H2").Value <> Range("H2").Value + Range("G29").Value Then
    Exit Sub
    End If
     
     
    End Sub
    Fichiers attachés Fichiers attachés

  17. #17
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Je crois voir le bout, j'ai stoppé la boucle mais du coup quand A1 redevient égal à D2 sur un deuxième tour, la valeur de H2 ne bouge plus; il faudrait limiter la variation de H2 aux multiple de la mise du gain en G29 pour le deuxième tour, le troisième tour.....

    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
    Private Sub Worksheet_Calculate()
    Do While Range("G29").Value <> 0
    Do Until Range("H2").Value <> 0 And Range("H2").Value = Range("H2").Value + Range("G29").Value
    Do While Range("H2").Value <> Range("G29").Value
    If Range("G29").Value <> 0 Then
    Range("H2").Value = Range("H2").Value + Range("G29").Value
    End If
    If Range("H2").Value <> Range("G29").Value Then
    Exit Sub
    End If
    Loop
    Exit Sub
    Loop
    Exit Sub
    Loop
    Exit Sub
     
    End Sub
    Fichiers attachés Fichiers attachés

  18. #18
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    L'utilisation de l’évènement "calculate" ajoutera G29 à H2 à chaque calcul même si pas de modification donc pas bonne piste
    Essais de désactiver les calculs, mais même comme cela je suis septique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_Calculate()
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    .... CODE
     
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
     
    End sub
    Jérôme

  19. #19
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    En fait j'ai pas mal avancé, là ça fonctionne.

    Mais maintenant, j'essaie de rendre H2 = 0 quand le nombre de tirage permis (mise * côte) en K1 et K2 atteint 0 et H2 ne retourne pas à 0 avec mon code??
    Une idée?

    (Là, je me sers de mon fichier avancé, avec les protections (code: xxx) en PJ)

    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
    Private Sub Worksheet_Calculate()
    Do While Range("G29").Value <> 0
    Do Until Range("H2").Value <> 0 And Range("H2").Value = Range("H2").Value + Range("G29").Value
    Do While Range("H2").Value <> Range("G29").Value
    If Range("G29").Value <> 0 Then
    Range("H2").Value = Range("H2").Value + Range("G29").Value
    End If
    Exit Sub
    If Range("K1").Value + Range("K2").Value < 0 Then
    Application.EnableEvents = False
    liberer
    Range("H2").Value = 0
    Proteger
    End If
    Application.EnableEvents = True
    Exit Sub
    If Range("H2").Value <> Range("G29").Value Then
    Exit Sub
    End If
    Loop
    Exit Sub
    Loop
    Exit Sub
    Loop
    Exit Sub
     
     
     
    End Sub
    Fichiers attachés Fichiers attachés

  20. #20
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    En fait j'ai pas mal avancé, là ça fonctionne.

    Mais maintenant, j'essaie de rendre H2 = 0 quand le nombre de tirage permis (mise * côte) en K1 et K2 atteint 0 et H2 ne retourne pas à 0 avec mon code??
    Une idée?

    (Là, je me sers de mon fichier avancé, avec les protections (code: xxx) en PJ)

    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
    Private Sub Worksheet_Calculate()
    Do While Range("G29").Value <> 0
    Do Until Range("H2").Value <> 0 And Range("H2").Value = Range("H2").Value + Range("G29").Value
    Do While Range("H2").Value <> Range("G29").Value
    If Range("G29").Value <> 0 Then
    Range("H2").Value = Range("H2").Value + Range("G29").Value
    End If
    Exit Sub
    If Range("K1").Value + Range("K2").Value < 0 Then
    Application.EnableEvents = False
    liberer
    Range("H2").Value = 0
    Proteger
    End If
    Application.EnableEvents = True
    Exit Sub
    If Range("H2").Value <> Range("G29").Value Then
    Exit Sub
    End If
    Loop
    Exit Sub
    Loop
    Exit Sub
    Loop
    Exit Sub
     
     
     
    End Sub

Discussions similaires

  1. Macro Excel Incrémentation
    Par shafian dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 19/10/2011, 11h38
  2. Macro conditionnelle entre 2 feuilles
    Par tompikeur dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2011, 15h47
  3. [XL-2003] Macro d'incrément de date
    Par Exeter dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 27/12/2010, 08h19
  4. Créer une macro conditionnelle
    Par sisisisi dans le forum Programmation (La)TeX avancée
    Réponses: 0
    Dernier message: 16/07/2010, 11h36
  5. Macro Excel - Incrémenter une valeur
    Par anubis62 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/05/2009, 14h26

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