Compteur excel

bonjour
je vous demandes de m'aider pour avoir une macro qui resoud le probleme suivants
et merci d'avance

chaque fois que je rempli une cellule (Bn) de la colonne b
alors la cellule (Cn) juste a droite de la colonne C prend la valeur de la cellule de la colonne C repmli juste avant + 1

exemple :

b5 rempli alors c5=1
b7 rempli alors C7 = 2
B3 rempli alors C3 = 3
b56 rempli alors c56 = 4
c123 repli alors c123 =5

etc

7 réponses

  1. Contributeur
    Bon... ne nuit,
    Je crois que si j'avais à résoudre ce genre de problème, j'essaierais de m'en sortir avec une formule.
    Tu pourrais essayer d'en fabriquer une qui ferais :
    Si cellule dans colonne B n'est pas vide alors cellule active (de colonne C) = MAX de colonne active + 1 sinon rien.
    Quelque chose comme : =SI(ESTVIDE(B1);MAX(B1:B123) ;"")
    N'ayant pas Excel, je ne sais pas si ça fonctionne, mais ça peut être une piste.
    -1
    1. Contributeur
      Re,
      Enfin, plutôt Quelque chose comme : =SI(ESTVIDE(B1);"";MAX(C1:C123)+1)
      0
      1. Contributeur
        Re,
        Je viens d'avoir une idée plus simple.
        Il s'agit de compter le nombre de valeurs présentes dans la col. B puis de tester dans la col. C si la cellule voisine de la col. B n'est pas vide et, si c'est le cas, de faire =nombre de valeurs dans B.
        Du genre :
        dans C2 : =SI(ESTVIDE(B2);"";NBVAL(B1:B123))
        dans C13 : =SI(ESTVIDE(B13);"";NBVAL(B1:B123))
        etc.
        Tu vois ?
        0
        1. je te remerci de ta reponse

          mais mon probleme est que j'ai un tableau de plus de 20.000 lignes
          et que je doit remlir la colonne b d'une facon aleatoire suivantr une liste a chaque fois que je remli une cellule b la valeur de la cellule c ne doit plus changer comme ca je peut selectionner ma liste par ordre de remlissage et par ordre de la liste

          merci beaucoup de chercher encore pour moi une solution qui pourra m'aide
          0
      2. Salut
        nbval(b1:b123) comptera le nombre de valeur emplissant les cellules de la zone B par contre une telle formule peche par le manque de dicernement imposé a excel la formule donnera la meme valeur dans toute la colonne C
        si(estvide(b2);"";nbval(B2:123))
        si B2 est non vide la valeur retournée sera le nombre total de case rempli dans B2:B123
        il faudrait peut etre mieux copié dans C2 la formule suivante
        =SI(estvide(B2);"";nbval($B$1:B2)-1
        le -1 sous entends que tu as mis un titre en B1 genre Articles
        la formule en C2 doit etre tiré vers le bas par contre si tu remplie la cellul B45 apres la cellule B47 la numerotation se refera a partir de B45 (si B47=8 b45 prendra la valeur 8 et B47 la valeur 9)
        Cordialement
        G.David

        le respect n'est pas un dû
        il se merite
        0
        1. merci de ta reponse

          mais la formule ne resout pas mon probleme

          si tu as une autre idee merci beaucoup de me la parvenir

          nb

          je ne suis pas tres fort en programmation
          0
        2. Bon ce que tu veux ce n'est pas un compteur mais un indexage de tes cellule en b
          il faudra passer par une macro evenmentielle
          apres avoir mis en C1 la formule suivante : =max(C2:C20000)
          tu ouvres VBA
          par Alt + F11
          tu clic sur la feuille outu a mis ta formule dans l'explorateur de projet
          avec le bouton droit tu slectionne Worksheets et tu colles le code suivant:
          Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          If ActiveCell.Offset(-1, 0) <> "" Then
          If ActiveCell.Offset(-1, 1) = "" Then
          ActiveCell.Offset(-1, 1) = Cells(1, 3).Value + 1
          End If
          End If
          End Sub

          Cordialement
          G.David
          0
        3. @G.DavidMERCI G. DAVID

          tu as raison pour l'indexage

          mais quand j'excute la macro j'ai un message d'erreur :

          erreur d'exeucution '1004'

          erreur defini par l'application ou par l'objet

          merci encore de ton aide precieuse
          0
        4. @G.DavidCurieux chez moi ça tourne . tu l'as nien coller dans le code de la feuille?
          Cordialement
          GDavid--
          le respect n'est pas un dû
          il se merite
          0
        5. @G.DavidBONJOUR G.david

          au debut sa marche impecable mais

          quant je rempli une cellule b et je decend d'une case en bas et a chaque fois si je me deplace avec les fleches a droite il rempli au fure et a mesure les cellules qui sont a droite de la derniere valeur de c

          en plus a chaque fois que je rempli une cellule n'importe ou dans le tableu il repmli automatiquement la cellule a droite

          et apres il affiche le message d'erreur :

          erreur d'execution '1004'

          et marci infiniment d'avence
          0
      3. Contributeur
        Bonjour,
        En attendant de pouvoir le faire automatiquement, avec tout ce qui a été essayé, il te reste la possibilité de le faire à la main.
        Il te suffit d'avoir toujours sous les yeux le résultat de la cellule (p.ex. C1) où est la formule : NBVAL(B1:B123). Lorsque tu auras entré une nouvelle valeur dans B, la valeur de C1 augmentera de 1 après que tu auras pressé <TAB>. Inscris alors ce chiffre dans la cellule active.
        En attendant.
        0
        1. essayes avec cici
          le principe est le même mais c'est bloqué sur les colonne b et c
          d'autre part tu doit toujours valider ta saisie en Colonne B par entree ou par la touchje fleche bas c'est a partir de la cellule du dessous que la macro teste les cellules remplies ou non .Attention si tu change une valeur en B la cellule C adjacente ne sera pas modifiée ( c'est la demande)
          Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          Dim lg As Integer
          lg = ActiveCell.Row
          If Cells(lg - 1, 2) <> "" Then
          If Cells(lg - 1, 3) = "" Then
          Cells(lg - 1, 3) = Cells(1, 3).Value + 1
          End If
          End If
          End Sub

          Cordialement
          G.David
          le respect n'est pas un dû
          il se merite
          0
          1. mille fois merci G. davide

            ca marche

            et aussi merci pour tous les autres qui ont pris la peine de m'aider

            merci pour tous

            brahim
            0