• Initiateur de la discussion Initiateur de la discussion tf1
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

tf1

XLDnaute Occasionnel
Bonjour,

je souhaite effectué un comptage journalier.

lorsque je renseigne le statut soit la colonne C je souhaite avoir un comptage journalier de chaque choix de la colonne C pour chaque jour .

ideal que cela soit inscrit dans une cellule a coté - colonne G par exemple

afin de savoir chaque jour le nombre de chaque choix

Merci
 

Pièces jointes

Re : Comptage

Re,

Si l'on veut ne pas avoir de virgule à la fin du texte, une formule un peu plus compliquée :

Code:
=SUBSTITUE(REPT(G4&" A rappeler, ";G4>0)&REPT(H4&" Hors cible, ";H4>0)&REPT(I4&" Pas Intéressé, ";I4>0)&REPT(J4&" RDV Pris";J4>0);", ";"";SOMMEPROD(SIGNE(G4:J4)))
A+
 
Re : Comptage

merci pour vos solutions

mais je trouve pas encore mon bonheur

les poste #4 et #5 son une bonne approche un mixe des serais top

en effet je souhaite connaitre chaque jour les statuts obtenue et cela jour pas jour afin de faire des stats?

merci de votre aide
 
Re : Comptage

Bonjour tf1, Jean-Claude, le forum,

Je reviens sur ce fil avec une nouvelle proposition :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim p As Variant, col As Variant, c As Range
If Target.Column <> 3 Or Target.Row < 4 Then Exit Sub
If Target(1, 0) = "" Then Exit Sub
Cancel = True
p = Application.Match(Target, [F3:I3], 0)
If IsError(p) Then Exit Sub
col = Application.Match(CLng(Date), [2:2], 0)
If IsError(col) Then 'création de la date du jour
  col = Cells(2, Columns.Count).End(xlToLeft).Column + 4
  If col < 10 Then col = 6
  Range("F2:I" & Cells(Rows.Count, "D").End(xlUp).Row).Copy Cells(2, col)
  Cells(2, col) = Date
End If
Set c = Cells(Target.Row, col - 1 + p)
c = Val(c) + 1 'incrémentation
Target = "" 'RAZ
MsgBox "Enregistrement effectué" 'message facultatif
End Sub
Le double-clic en colonne C permet d'enregistrer le statut sur la date du jour.

Un nouveau tableau est créé chaque jour.

Fichier joint, testez-le en mettant la date d'hier en F2.

A+
 

Pièces jointes

Dernière édition:
Re : Comptage

Re,

Tiens je découvre un truc intéressant que je ne connaissais pas sur le fichier (2).

Quand F2 est vide, la copie de la plage sur elle-même défusionne la cellule F2.

Alors utiliser :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim p As Variant, col As Variant
If Target.Column <> 3 Or Target.Row < 4 Then Exit Sub
If Target(1, 0) = "" Then Exit Sub
Cancel = True
p = Application.Match(Target, [F3:I3], 0)
If IsError(p) Then Exit Sub
col = Application.Match(CLng(Date), [2:2], 0)
If IsError(col) Then 'création de la date du jour
  col = Cells(2, Columns.Count).End(xlToLeft).Column + 4
  If col < 10 Then
    col = 6
  Else
    With Range("F2:I" & Cells(Rows.Count, "D").End(xlUp).Row)
      .Copy Cells(2, col)
      Cells(4, col).Resize(.Rows.Count - 3, 4).ClearContents 'vide le nouveau tableau
    End With
  End If
  Cells(2, col) = Date
End If
Target = "" 'RAZ
Application.ScreenUpdating = True 'MAJ de l'écran
Cells(Target.Row, col - 1 + p) = 1
MsgBox "Enregistrement effectué" 'message facultatif
End Sub

Edit 1
: j'avais oublié de vider le nouveau tableau.

Edit 2 : je n'incrémente plus, une seule valeur (1) est entrée.

Edit 3 : j'ai aussi ajouté Application.ScreenUpdating = True pour mettre à jour l'écran.

Fichier (3).

A+
 

Pièces jointes

Dernière édition:
Re : Comptage

Re,

Si l'on veut qu'il y ait un seul statut par jour sur chaque nom :

Code:
If Application.Count(Cells(Target.Row, col).Resize(, 4)) Then
  MsgBox "Le statut a déjà été enregistré ce jour..."
Else
  Cells(Target.Row, col - 1 + p) = 1
  MsgBox "Enregistrement effectué" 'message facultatif
End If
Edit : la variable c était inutile.

Fichier (4).

A+
 

Pièces jointes

Dernière édition:
Re : Comptage

Bonsoir a tous

Tout d'abord merci pour toute vos réponses....
je reviens vers vous avec un fichier pour exemple

1-Ce que je souhaite c'est lorsque le sélectionne le statut dans la colonne C que ce statut soit en enregistrer dans l'onglet STAT
et cela jour par jour.
2-Si sur un statut a déjà été enregistré un message d'erreur m'informe que ce statut est déjà enregistrer .....
3-que je puisse enregistrer seulement les 30 derniers jours seulement ....

Désole d'etre exigent

merci d'avance de votre aide
 

Pièces jointes

Re : Comptage

Bonjour tf1, le forum,

Voyez le fichier joint et cette nouvelle macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, lig As Variant, col As Variant
Set r = Intersect(Target, Range("C4:C" & Rows.Count), Me.UsedRange)
If Not r Is Nothing Then
  With Feuil2 'CodeName de la feuille STAT
    lig = Application.Match(CLng(Date), .[A:A], 0)
    If IsError(lig) And Application.CountA(r) Then
      .[A3:F32].Sort .[A3], xlAscending, Header:=xlNo 'tri de sécurité
      If .[A3] < Date - 29 Then .[A3:F3].Delete xlUp 'si plus de 30 jours
      lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
      .Cells(lig, 1) = Date
      .Cells(lig, 6) = "=SUM(RC[-4]:RC[-1])"
    End If
    For Each r In r 'si plusieurs cellules (copier-coller)
      If r <> "" Then
        If r(1, 2) = Date Then
          MsgBox r(1, 0) & " déjà enregistré ce jour..."
        Else
          col = Application.Match(r, .[A2:E2], 0)
          If IsNumeric(col) Then
            r(1, 2) = Date
            r(1, 2).NumberFormat = """Dernier enregistrement le ""dd/mm/yyyy"
            .Cells(lig, col) = 1
          End If
        End If
      End If
    Next
  End With
End If
End Sub
Le commentaire en colonne D joue un rôle essentiel.

Comme vous le demandez, seuls les 30 derniers jours sont conservés en feuille "STAT".

Au delà ils sont supprimés au fur et à mesure.

A+
 

Pièces jointes

Re : Comptage

Merci Job

Que cela veut dir STP - Ah oui, un oubli, en feuille "STAT" il ne suffit pas d'entrer 1 il faut incrémenter :

Est il possible de bloquer un statut déjà enregistrer - c'est a dire que si le statut est enregistrer que l'on soit le jour meme ou le lendemain ce statut ne puise plus etre modifier

merci
 
Re : Comptage

Re,

Avec cette version (3) dès qu'il y a un commentaire en colonne D un nouveau statut ne peut plus être enregistré :

Code:
If IsDate(r(1, 2)) Then
  MsgBox r(1, 0) & " est déjà enregistré..."
C'est ça que vous voulez ?

A+
 

Pièces jointes

Re : Comptage

Re,

Avec cette version (4) le statut est bloqué dans les 2 feuilles :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, lig As Variant, t As String, col As Variant
Set r = Intersect(Target, Range("C4:C" & Rows.Count), Me.UsedRange)
If Not r Is Nothing Then
  With Feuil2 'CodeName de la feuille STAT
    lig = Application.Match(CLng(Date), .[A:A], 0)
    If IsError(lig) And Application.CountA(r) Then
      .[A3:F32].Sort .[A3], xlAscending, Header:=xlNo 'tri de sécurité
      If .[A3] < Date - 29 Then .[A3:F3].Delete xlUp 'si plus de 30 jours
      lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
      .Cells(lig, 1) = Date
      .Cells(lig, 6) = "=SUM(RC[-4]:RC[-1])"
    End If
    For Each r In r 'si plusieurs cellules (copier-coller)
      If r <> "" Then
        t = Left(r(1, 2), InStr(r(1, 2) & " #", " #") - 1)
        col = Application.Match(t, .[B2:E2], 0)
        If IsNumeric(col) Then
          If r <> t Then
            MsgBox "Déjà enregistré " & r(1, 2), , r(1, 0)
            r = t
          End If
        Else
          col = Application.Match(r, .[A2:E2], 0)
          If IsNumeric(col) Then
            r(1, 2) = r & " # " & Format(Date, "dd/mm/yyyy")
            .Cells(lig, col) = Val(.Cells(lig, col)) + 1
          End If
        End If
      End If
    Next
  End With
End If
End Sub
A+
 

Pièces jointes

Re : Comptage

Re,

Peut-être voulez-vous avoir la possibilité de modifier le statut si la date d'enregistrement (en colonne D) n'est plus dans la feuille "STAT" (donc antérieure à Date - 29).

Dans ce cas prenez cette version (5), j'ai juste ajouté ces 3 lignes :

Code:
dat = Mid(r(1, 2), InStr(r(1, 2), "#") + 2)
If IsDate(dat) Then dat = CDate(dat)
If dat < Date - 29 Then r(1, 2) = ""
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
11
Affichages
237
Réponses
18
Affichages
721
Réponses
4
Affichages
265
Retour