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.
- Messages
- 308
- Excel
- 2016
- Inscrit
- 15/06/2017
- Emploi
- Bénéficiaire de la sécurité de la vieillesse
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.
- Messages
- 308
- Excel
- 2016
- Inscrit
- 15/06/2017
- Emploi
- Bénéficiaire de la sécurité de la vieillesse
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