Incrémenter 1 cellule sous condition d'une quantité cumulée

Résolu/Fermé
kga - Modifié par kga le 7/10/2012 à 18:35
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 9 oct. 2012 à 14:09
Bonjour,

J'ai à réaliser un fichier et je coince sur la réalisation d'une des macro.

J'ai une colonne A où j'ai mentionné des valeurs max (défnies par une quatrième colonne), à atteindre pour la colonne B. Dans cette colonne B j'ai dans chaque ligne une valeur chiffrée.

J'aimerais qu'en défilant de haut en bas, quand le cumul des valeurs chiffrées dans la colonne B est supérieur ou égal à la valeur de la colonne A la cellule qui suit dans la colonne C soit incrémenter de 1.
Soit si val B5>= val A5, C6=val C5+1.

Sachant qu'après l'action doit se répéter, recommencement du cumul à partir de 0.
Soit B6=val B6 et non val B5+ val B6.

Pouvez-vous m'y aider ?
Je vous en remercie d'avance.

5 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
7 oct. 2012 à 20:37
Bonjour,

un fichier exemple avec le résultat attendu aiderait à comprendre ta demande.
cjoint.com et coller ici le lien fourni.

eric
0
Ci-joint un fichier avec le résultat attendu : http://cjoint.com/?BJikbto9wCV

Une petite erreur dans l'énoncé de mon sujet : ce n'est pas supérieur ou égal mais strictement supérieur, comme vous pouvez le voir dans le fichier pour le cas de la transition entre les semaines 1234 et 1235.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
8 oct. 2012 à 11:05
Bonjour,

Sub increment()
    Dim lig As Long, cpt As Long
    For lig = 3 To Cells(Rows.Count, 1).End(xlUp).Row
        cpt = cpt + Cells(lig, 2)
        If cpt > Cells(lig, 1) Then
            Cells(lig, 3) = Cells(lig - 1, 3) + 1
            cpt = 0
        Else
            Cells(lig, 3) = Cells(lig - 1, 3)
        End If
    Next lig
End Sub 

Je démarre en ligne 3 et le nombre initial (1233) doit être saisi en C2.

eric
0
Merci Eric, mais j'ai encore 2 points à te soumettre :

1. La macro répond bien aux attentes pour les données mentionnées.
Mais si j'en rajoute, elle n'est plus capable de réaliser une bonne analyse.
( Fichier montrant le problème: http://cjoint.com/?BJjlPdcLLRE )

2. J'ai un peu de mal à comprendre le raisonnement, pourrais tu m'expliquer ta macro?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
9 oct. 2012 à 12:14
Bonjour,

Je crois surtout que tu as oublié de dire que le total n'est pas toujours atteint et qu'il faut incrémenter si colonne A change de valeur.

Regarde si c'est ça que tu veux, j'ai ajouté des commentaires :
Sub Incrementer_cell_sous_cond_qte_cumul()
'
' Incrementer_cell_sous_cond_qte_cumul Macro
' Macro enregistrée le 09/10/2012 par gkuissi
'

'
    Dim lig As Long, cpt As Long
    For lig = 3 To Cells(Rows.Count, 1).End(xlUp).Row ' de la ligne 3 à la dernière ligne remplie colonne A
        cpt = cpt + Cells(lig, 2) ' additionner B
        If cpt > Cells(lig, 1) Or Cells(lig, 1) <> Cells(lig - 1, 1) Then ' si maxi atteint ou si A change
            Cells(lig, 3) = Cells(lig - 1, 3) + 1 ' incrémenter la valeur précédente en C
            cpt = 0 ' raz du compteur
        Else
            Cells(lig, 3) = Cells(lig - 1, 3) ' sinon recopier la valeur précédente en C
        End If
    Next lig
End Sub

eric
0
( La preuve que si... )

Nickel, ça marche.
Merci encore pour l'aide, les explications et ta réacitivité.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
9 oct. 2012 à 14:09
La preuve que si...
??? où ça ?
0