Fonction incrémentation automatique

Bonjour à toute et à tous,

j'ai un tableau excel (ci joint) et je voudrais automatiser l'incrémentation de la colonne C, jai essayé cette fonction mais il y a encore un dysfonctionnement:

=SI($B5="succes";REPT("0";4-NBCAR(NB.SI.ENS($B$5:$B5;$B5;$A$5:$A5;$A5))) & NB.SI.ENS($B$5:$B5;$B5;$A$5:$A5;$A5);"")

En faite j'ai testé une solution mais ça marche pas encore et je voudrais bien que vous faites la même chose de la manière suivante sur le fichier joint:

- Partant de la ligne 10, le choix de la valeur "echec", engendre dans la colonne C et dans la même ligne une cellule vide

- Ensuite la ligne 12, le choix de la valeur "succes", donne comme valeur "0001"

- Puis pour la ligne 11, le choix de "succes", donne "0001" et la valeur précédente de la ligne 12 change de "0001" vers "0002" , c'est à ce niveau que le problème se pose, normalement dans la ligne 12 la valeur devra rester toujours "0001" et la ligne 11 "0002" et ainsi de suite

Notez bien que la saisie de résultat de test ne se fait pas de haut vers le bas mais elle peut intervenir à n'importe quelle niveau , par exemple elle peut commencer à partir de la ligne 10 puis en 2ème lieu la ligne 11 etc... comme l'exemple décrit ci dessus

Merci de refaire le test de la manière décrite ci dessus, et merci de me proposer une solution adéquate

12exemple1.xlsx (10.02 Ko)

Bonjour,

Une proposition VBA avec une procédure évènementielle.

A tester !?

ALT F11 pour ouvrir l'éditeur VBE ; Voir module Feuil1 (Feuil1)

Cdlt

52seyf1981.xlsm (21.73 Ko)

Merci Jean Eric,

une solution très interressante sauf qu'il manque une chose que j'ai oublié de la préciser,

L'idée est que l'incrémentation doit recommencer à partir de 0001 avec la nouvelle année (soit 2018 dans cet exemple ainsi l’incrémentation se poursuit passant à 0002 puis à 0003 (en cas d'echec pas d'incrémentation) , il est de même pour l'année 2019 etc

Re,

C'est ballot.

Cdlt.

!!!!!!!!!!!!!

y a t il quelqu'un plus respectueux qui peut m'aider,

pardon je suis pas un informaticien mais j'ai besoin fortement de la réponse dans mon travail

Bonsoir,

pas simple à comprendre le 'pourquoi du comment'...

Je récapitule, et reprenez-moi si je me trompe.

  • Un tableau, avec en première colonne une année renseignée, donnée obligatoire, sinon pas de traitement !
  • une seconde colonne avec un choix pour l'utilisateur, si ce choix est 'succès', incrémenter une valeur = valeur + 1.
  • si un choix en ligne 15 est saisie 'succès' en premier, la valeur en ligne 15 sera égale à 1.
  • si un choix en ligne 3 est saisie 'succès' par la suite, la valeur en ligne 15 devient 2, et la valeur en ligne 3 est égale = 1.
  • cela si et seulement si, l'année de la ligne 15 et 3 sont identiques.

Pouvez-vous me confirmer ces règles ?

Re,

Tu admettras que c'est ballot (bête, dommage) de ne pas avoir posé la bonne question.

Je ne faisais pas référence à Jean-Marie Bigard.

Je regarderai plus tard pour te répondre, car j'ai d'autres sujets à traiter.

Cdlt.

Bonsoir,

Sur la base du code de Jean-Eric .... juste un petit test supplémenatire ....

Private Sub Worksheet_Change(ByVal Target As Range)
Dim N As Double
    If Target.CountLarge > 1 Then Exit Sub
    If Not Intersect(Target, Me.ListObjects(1).ListColumns(2).DataBodyRange) Is Nothing Then
        Select Case Target.Value
            Case "succes"
                If Target.Offset(, -1).Value = Target.Offset(-1, -1).Value Then
                  N = WorksheetFunction.CountIf(Me.ListObjects(1).ListColumns(2).DataBodyRange, "succes")
                  Target.Offset(, 1) = N
                Else
                  Target.Offset(, 1) = 1
                End If
            Case "echec"
                Target.Offset(, 1) = ""
        End Select
     End If
End Sub

En espèrant que cela t'aide ...

Re,

Bonsoir James007,

Une autre solution à étudier.

Cdlt.

26seyf1981-v1.xlsm (22.44 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lo As ListObject, N As Double, iYear As Integer
    If Target.CountLarge > 1 Then Exit Sub
    If Not Intersect(Target, Me.ListObjects(1).ListColumns(2).DataBodyRange) Is Nothing Then
        If IsEmpty(Target.Offset(, -1)) Then Exit Sub
        Set lo = Me.ListObjects(1)
        Select Case Target.Value
            Case "succes"
                iYear = Target.Offset(, -1)
                N = WorksheetFunction.CountIfs _
                    (lo.ListColumns(2).DataBodyRange, "succes", _
                     lo.ListColumns(1).DataBodyRange, iYear)
                Target.Offset(, 1) = N
            Case "echec"
                Target.Offset(, 1) = ""
        End Select
    End If
    Set lo = Nothing
End Sub

Merci infiniment Jean Eric

c'est exactement ce que je cherche, ça fonctionne parfaitement

une autre question pour que je puisse exploiter cette solution convenablement dans une autre table parce que j'ai inséré d'autres colonnes avant la colonne intitulé "Annee" mais l'incrémentation n'est plus fonctionnelle,

je veux savoir qu'elles sont les modifications à apporter au code dans ce cas (insertion d'autres colonnes)

cordialment

RE,

Dans le fichier initial, le tableau comportait 3 colonnes et on surveillait un changement dans la colonne 2.

If Not Intersect(Target, Me.ListObjects(1).ListColumns(2).DataBodyRange) Is Nothing Then

Ton tableau comporte maintenant 10 colonnes et la colonne à surveiller est la colonne 9. Il suffit donc de remplacer 2 par 9.

If Not Intersect(Target, Me.ListObjects(1).ListColumns(9).DataBodyRange) Is Nothing Then

Idem pour :

N = WorksheetFunction.CountIfs _
                    (lo.ListColumns(2).DataBodyRange, "succes", _
                     lo.ListColumns(1).DataBodyRange, iYear)

qui devient :

N = WorksheetFunction.CountIfs _
                    (lo.ListColumns(9).DataBodyRange, "succes", _
                     lo.ListColumns(8).DataBodyRange, iYear)
17seyf1981-v2.xlsm (22.66 Ko)

Sans doute, votre solution est parfaite

Grâce à toi j'ai trouvé une solution qui va surement m'aider dans mon travail

Merci infiniment encore une fois

Merci à vous tous

cdlt

Re-Bonjour,

Toujours dans le même exemple (ci joint),

Je voudrais séquencer la valeur qui s'incrémente dans la colonne C en 4 digit (d1,d2,d3,d4), j'ai essayé d'utiliser la fonction DROITE et STXT mais ça marche pas, contrairement elle fonctionne pour la colonne A1 séquencée déjà en "annee1" et "annee2".

Que faut il faire, qu'elle est la solution adéquate tout en gardant la solution VBA d'incrémentation de colonne C

5seyf1981.xlsm (23.77 Ko)

Bonjour,

En mettant les colonnes A et C en texte.

Cdlt.

21seyf1981.xlsm (28.37 Ko)

Re-Bonjour,

Permettez moi de revenir encore une fois sur la solution de jean Eric,

Un cas de figure qui peut survenir, voici un exemple (montré dans le fichier joint):

Supposant que vous avez commencé à remplir le tableau de la manière suivante:

  • ligne 8, resultat test "echec".............. cellule vide
  • ligne 10, resultat test "succes".......... valeur du numéro d'incrémentation est 0001
  • ligne 7, resultat test "succes"............. valeur du numéro d'incrémentation est 0002
  • ligne 11, resultat test "succes"............ valeur du numéro d'incrémentation est 0003
  • ligne 5, resultat test "succes"............ valeur du numéro d'incrémentation est 0004
Jusqu'au là l'application fonctionne correctement,

Mais supposant que vous avez remarqué une faute au niveau du tableau et qu'il faut supprimer la valeur résultat test de la ligne 7 (et peut être bien le numéro d'incrémentation dans la même ligne ), à ce niveau une erreur va survenir: par la suite le choix du valeur "succes" dans la ligne 12, provoque une duplication de la dernière valeur "0004"(dans la même année 2017),

Que faut il faire dans ce cas pour que la nouvelle valeur s'incrémente suite à cette suppression des données ??

Est il possible de récupérer le numéro de l'attestation supprimé (0002 dans cet exemple) et l'affecter pour une nouvelle ligne toujours dans la même année (lorsque le resultat test est "succes" ) et continuer après l'incrémentation de la même manière sans qu'il y ait de doublons dans la même année.

7test2.xlsm (34.02 Ko)

Bonjour,

Y a t il quelqu'un qui peut m'aider SVP ???

Bonsoir,

Une idée tardive...

17copie-de-test2.xlsm (36.98 Ko)

Ne faite pas la saisie de haut vers le bas,

la saisie peut survenir de la manière suivante, par exemple:

Ligne 9 puis ligne 7,....ligne 10,...ligne1,.. etc

Essayer vous allez remarquer que les valeurs dans la colonne C changent: 0001 devient 0002 et 0002 devient 0001 etc....

Bonsoir,

A votre demande, lors de la suppression d'une valeur comptée, la décompter. Peu importe que la saisie soit exécutée dans un sens ascendant ou descendant, l'incrémentation se met à jour, en ajout comme en suppression.

Ce qui est effectif dans mon exemple.

Seulement, si vous désirez une autre méthode, à ce que je pense comprends dans votre dernier post. Il vous faut consigner un d'horodatage à chaque modification de l'utilisateur.

Cela n'est pas impossible, mais qu'en est l’intérêt ?

Rechercher des sujets similaires à "fonction incrementation automatique"