Macro pour statistiques

Bonjour le forum

J’ai un petit problème et une demande d’amélioration avec la macro « Sub Statistiques() » que je lance du bouton « récapitulatif » de l’onglet « Statistique » . Son rôle est de comptabiliser les différents éléments de la colonne « S » du tableau situé dans l’onglet « Liste AF à compléter par DATES » en me remplissant le tableau situé dans l’onglet « Statistique ».

Le petit problème que je rencontre c’est qu’il me compte une ligne de plus qu’il y a dans le tableau des formations.

La demande d’amélioration c’est que pour le libellé « 05- AF supprimée » je voudrais avoir le nombre de formations supprimées et non pas le nombre de ligne qui correspondent à ces formations supprimées.

Par exemple dans le fichier joint je devrais trouver dans le tableau de l’onglet « Statistique » DEUX qui correspond à la formation RM79 et ST36 et non pas SEPT qui correspond au nombre de lignes où est écrit « 05- AF supprimée ».

J’espère que j’ai été clair dans les explications et qu’une solution pourra être trouvée.

Cordialement.

123essai-stat.xlsm (27.71 Ko)

Bonjour philippe.p@, bonjour le forum,

Voici le changement demandé.

Je n'ai pas tester les autres items.

Mais j'ai modifié le code afin qu'il puisse être exécuté correctement même si on est positionné sur une autre feuille.

Option Explicit

Dim fc, fs As Worksheet, i&, derln&

Sub Statistiques()
Dim LeCode As String

LeCode = ""
    Application.EnableEvents = False
    Set fc = Sheets("Liste AF à compléter par DATES")
    Set fs = Sheets("Statistique")
    derln = fc.Range("A" & Rows.Count).End(xlUp).Row

    fs.Range("B10:B22").ClearContents
    For i = 3 To derln
        If (IsNumeric(fc.Range("S" & i)) Or fc.Range("S" & i) = "00- Oui") And fc.Range("S" & i) <> "" Then
            fs.Range("B10") = fs.Range("B10") + 1
        ElseIf fc.Range("S" & i) = "01- Complète" Then
            fs.Range("B11") = fs.Range("B11") + 1
        ElseIf fc.Range("S" & i) = "01- MODAF à faire" Then
            fs.Range("B12") = fs.Range("B12") + 1
        ElseIf fc.Range("S" & i) = "02- Incomplète" Then
            fs.Range("B13") = fs.Range("B13") + 1
        ElseIf fc.Range("S" & i) = "03- Arbitrage" Then
        'ElseIf fc.Range("S" & i).Value Like "03- *" Then ' exemple de ligne pour mettre un jocker astérisque
            fs.Range("B14") = fs.Range("B14") + 1
        ElseIf fc.Range("S" & i) = "03- Arbitrage+" Then
            fs.Range("B15") = fs.Range("B15") + 1
        ElseIf fc.Range("S" & i) = "04- NON : Plus de place" Then
            fs.Range("B16") = fs.Range("B16") + 1
        ElseIf fc.Range("S" & i) = "04- NON : Autre" Then
            fs.Range("B17") = fs.Range("B17") + 1
        ElseIf fc.Range("S" & i) = "04- Place perdue" Then
            fs.Range("B18") = fs.Range("B18") + 1
        ElseIf fc.Range("S" & i) = "04- Place supprimée" Then
            fs.Range("B19") = fs.Range("B19") + 1
        ElseIf fc.Range("S" & i) = "04- Place supprimée" Then
            fs.Range("B19") = fs.Range("B19") + 1
        ElseIf fc.Range("S" & i) = "05- AF supprimée" Then
            If LeCode <> fc.Range("E" & i) Then
                fs.Range("B20") = fs.Range("B20") + 1
                LeCode = fc.Range("E" & i)
            End If
        ElseIf fc.Range("S" & i) = "" Then
            fs.Range("B21") = fs.Range("B21") + 1
        End If

    Next i
    Application.EnableEvents = True
End Sub

Joseph

Salut retraite8

Ta macro fonction et me donne le résultat attendu. Merci pour ton aide mais juste pour mon info je n'arrive pas à comprendre comment fonctionne ton test "If LeCode <> fc.Range("E" & i)" sur la variable "LeCode" sachant que sa valeur est dénie après avec la ligne "LeCode = fc.Range("E" & i)".

Ne faudrait-il pas définit cette valeur juste après le début de la boucle principale "For i = 3 To derln" ?

En attendant je mets ma question en résolu et merci encore.

Cordialement.

Bonjour philippe.p@, bonjour le forum

Le but demandé est de tester le nombre de codes marqués supprimés et non le nombre de fois qu'un même code est marqué supprimé.

La variable "LeCode", au début de la macro, est vide LeCode = ""

Puis, au passage de chaque ligne le code teste si le contenu de la colonne S contient "05-AF supprimé", si c'est le cas, le code teste si le contenu de la variable est différent du contenu de la colonne E de la même ligne.

"If LeCode <> fc.Range("E" & i)"

S'il est différent, le contenu de la colonne E est copié dans la variable LeCode et la cellule de la feuille Statistique est incrémentée. On a donc une première fois un code marqué supprimé.

Aux passages des différentes lignes, si S contient "05-AF supprimé" et le contenu de LeCode n'est pas différent de la colonne E, le code passe tout droit pour ne pas comptabiliser une Xe fois un même code déjà détecté comme marqué supprimé.

Joseph

Merci retraite8 pour cet éclaircissement

Rechercher des sujets similaires à "macro statistiques"