XL 2013 Incrément de compteurs automatiques d'une colonne lors de modification d'une autre colonne

Helios77

XLDnaute Nouveau
Bonjour,
Soit le fichier exemple ci-joint.
Lorsque je remplis la colonne M "Don" j'ai veux incrémenter un compteur dans la colonne R "Numéro ordre de délivrance"
Ce numéro sera unique (asé sur l'année) et avec un maximum le nombre de lignes du tableau (2024/5) dans l'exemple
avec la contrainte que le nombre de lignes de ce tableau peut évoluer
Je sèche désespérément.. car je suis certain que ça ne doit pas être bien compliqué.. mais non grrrr
Merci de votre aide.
Amicalement
Helios
 

Pièces jointes

  • Exemple Dons.xlsm
    14 KB · Affichages: 8

Gégé-45550

XLDnaute Accro
Bonjour,
Soit le fichier exemple ci-joint.
Lorsque je remplis la colonne M "Don" j'ai veux incrémenter un compteur dans la colonne R "Numéro ordre de délivrance"
Ce numéro sera unique (asé sur l'année) et avec un maximum le nombre de lignes du tableau (2024/5) dans l'exemple
avec la contrainte que le nombre de lignes de ce tableau peut évoluer
Je sèche désespérément.. car je suis certain que ça ne doit pas être bien compliqué.. mais non grrrr
Merci de votre aide.
Amicalement
Helios
Bonsoir,
Voir PJ.
Cordialement,
 

Pièces jointes

  • Exemple Dons (version 1).xlsm
    28.7 KB · Affichages: 10

job75

XLDnaute Barbatruc
Bonjour Helios77, Gégé-45550,

Pas besoin de VBA, voyez le fichier joint et cette formule en R2 :
Code:
=SIERREUR(ANNEE([@[Date licence]])/SIGNE([@[Date licence]])/NB.SI([@Don];">0")&"/"&NB.SI.ENS([Don];">0";[Date licence];"<" &[@[Date licence]])+NB.SI.ENS(DECALER([Don];;;LIGNE()-1);">0";DECALER([Date licence];;;LIGNE()-1);[@[Date licence]]);"")
Les -1 parce que le tableau commence en ligne 1.

A+
 

Pièces jointes

  • Exemple Dons.xlsx
    14.9 KB · Affichages: 7

Helios77

XLDnaute Nouveau
Oh purée Job !!
Alors là... C'est vraiment balaise. Mais si tu veux bien me décortiquer la formule, je suis preneur car là j'ai un peu de mal. Merci vraiment.
La seule chose qui me faudrait ajouter c'est une sécurité genre "effet de cliquet" qui interdise la modification du numéro d'ordre une fois qu'il a été donné.
Merci encore de l'aide apportée.
Helios
 

job75

XLDnaute Barbatruc
La formule n'était pas simple mais il faut encore la compliquer.

En effet si j'ai bien compris le comptage doit se faire pour chaque année alors il faut utiliser :
Code:
=SIERREUR(ANNEE([@[Date licence]])/SIGNE([@[Date licence]])/NB.SI([@Don];">0")&"/"&NB.SI.ENS([Don];">0";[Date licence];">="&DATE(ANNEE([@[Date licence]]);1;1);[Date licence];"<"&[@[Date licence]])+NB.SI.ENS(DECALER([Don];;;LIGNE()-1);">0";DECALER([Date licence];;;LIGNE()-1);[@[Date licence]]);"")
Quant à "l'effet de cliquet" ça ne me paraît pas possible par formule mais ça doit l'être en VBA.
 

Pièces jointes

  • Exemple Dons (1).xlsx
    15 KB · Affichages: 1

Helios77

XLDnaute Nouveau
Pour le côté chaque année.. pas de souci.. je ferai un fichier par année.. D'autant que le nom des joueurs ainsi que leur nombre variera également.
En revanche je reste intéressé par l'effet cliquet. J'avais commencé à bosser dessus en vba, mais comme je n'arrivais pas à structurer ma pensée et surtout à maitriser les commandes (satanée syntaxe), c'est pour cela que j'ai demandé de l'aide.
 

job75

XLDnaute Barbatruc
Pour le VBA voyez cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, an%
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With ListObjects(1).Range 'tableau structuré
    .Columns(2).Insert xlToRight 'insère une colonne auxiliaire
    .Columns(2) = "=ROW()": .Columns(2) = .Columns(2).Value 'numérotation
    .Sort .Columns(16), xlAscending, Header:=xlYes 'tri sur la colonne 15 + 1
    For Each c In .Columns(19).Cells 'colonne 18 + 1
        If c = "" And Val(Replace(c(1, -4), ",", ".")) > 0 And IsDate(c(1, -2)) Then c = Application.Max(.Columns(19)) + 1: an = Year(CDate(c(1, -2)))
    Next
    If an Then .Columns(19).NumberFormat = """" & an & "/""0" 'format personnalisé
    .Sort .Columns(2), xlAscending, Header:=xlYes 'tri dans l'ordre initial
    .Columns(2).Delete xlToLeft 'supprime la colonne auxiliaire
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
Elle s'exécute quand on modifie ou valide une cellule quelconque.

Les cellules vides en colonne R sont remplies mais rien n'empêche de les effacer ensuite.
 

Pièces jointes

  • Exemple Dons.xlsm
    23.1 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour Helios77, le forum,

Cette macro annule les modifications manuelles en colonne R du tableau mais permet l'ajout ou la suppression de lignes entières :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, an%
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With ListObjects(1).Range 'tableau structuré
    Set r = Intersect(Target, .Cells)
    If Not r Is Nothing Then
        For Each r In r.Areas
            If Not Intersect(r, .Columns(18)) Is Nothing Then If r.Columns.Count < .Columns.Count Then Application.Undo: Exit For 'annule la modification
        Next r
    End If
    .Columns(2).Insert xlToRight 'insère une colonne auxiliaire
    .Columns(2) = "=ROW()": .Columns(2) = .Columns(2).Value 'numérotation
    .Sort .Columns(16), xlAscending, Header:=xlYes 'tri sur la colonne 15 + 1
    For Each r In .Columns(19).Cells 'colonne 18 + 1
        If r = "" Then If Val(Replace(r(1, -4), ",", ".")) > 0 And IsDate(r(1, -2)) Then r = Application.Max(.Columns(19)) + 1: an = Year(CDate(r(1, -2)))
    Next r
    If an Then .Columns(19).NumberFormat = """" & an & "/""0" 'format personnalisé
    .Sort .Columns(2), xlAscending, Header:=xlYes 'tri dans l'ordre initial
    .Columns(2).Delete xlToLeft 'supprime la colonne auxiliaire
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 

Pièces jointes

  • Exemple Dons.xlsm
    24.1 KB · Affichages: 2

Gégé-45550

XLDnaute Accro
Bonjour,
Soit le fichier exemple ci-joint.
Lorsque je remplis la colonne M "Don" j'ai veux incrémenter un compteur dans la colonne R "Numéro ordre de délivrance"
Ce numéro sera unique (asé sur l'année) et avec un maximum le nombre de lignes du tableau (2024/5) dans l'exemple
avec la contrainte que le nombre de lignes de ce tableau peut évoluer
Je sèche désespérément.. car je suis certain que ça ne doit pas être bien compliqué.. mais non grrrr
Merci de votre aide.
Amicalement
Helios
Bonjour,
Cette version permet de supprimer une écriture en cas d'erreur mais conserve l'effet de "cliquet", c'est-à-dire l'incrémentation du numéro d'ordre à chaque nouvelle saisie.
Nul besoin également de créer une colonne "temporaire".
La remise à zéro de l'incrémentation, par exemple pour créer un nouveau fichier pour une nouvelle année, se fait par appui sur le bouton 'RAZ'.
Cordialement,
 

Pièces jointes

  • Exemple Dons (version 2).xlsm
    40.4 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
314 626
Messages
2 111 280
Membres
111 090
dernier inscrit
ISSAKA