Macro Calculs statistiques - Mise en forme
Bonjour tout le monde
Je débute sur VBA et je suis clairement pas à l'aise dans le cadre d'élaboration de macros pour faire des analyses dans mon métier
J'espère que vous pourrez m'aider à répondre à mon casse tête ...
- Sur la colonne A, j'aimerais pouvoir identifier en rouge les valeurs en double.
- Sur la colonne B, j'aimerais faire apparaître le calcul suivant : (nombre de ligne "2- Documented" / nombre de lignes "2- Documented" + "1- Not documented" * 100) pour faire apparaître un pourcentage. De plus je souhaiterais faire apparaître en rouge le cellules vides.
Enfin, en bas de cette colonne j'aimerais faire apparaître une case indiquant "Nombre de plan d'actions à ouvrir" et indiquant le nombre de cellules où il est indiqué "1- Not documented"
- Sur la colonne C, j'aimerais faire apparaître en rouge les cases où la date est antérieure à 2019.
- Sur la colonne D, j'aimerais faire apparaître en bas du tableau la somme des cellules "Preventive" "Detective" et "P/D" et calculer le pourcentage de chaque.
- Sur la colonne E, j'aimerais faire apparaître en rouge les cellules vides.
- Sur la colonne F, j'aimerais faire apparaître en bas du tableau la somme des cellules "Event driven", "Semi-annual", "Annual", "Quarterly", 'Daily", "Many times a day", "Monthly" et "Weekly" et calculer le pourcentage de chaque.
- Sur la colonne G, j'aimerais faire apparaître en bas du tableau la somme des cellules "Automated" "Manual" et "Semi automated" et calculer le pourcentage de chaque.
Je joins à ce sujet, le fichier sur lequel je dois me baser.
J'espère que ce mail est clair, étant mes débuts sur ce forum je me tiens à votre disposition en cas d'incompréhensions.
Merci d'avance pour votre aide
Cordialement,
Clément
Bonjour,
A priori tout ce que tu demandes est réalisable en formule. Autant se passer de VBA si tu ne maîtrise pas, ce sera plus simple à utiliser par la suite pour toi comme pour tes collègues. Pour que les calculs s'adaptent à la dimension de tes données, je te propose de mettre ça dans un nouvel onglet dédié.
Si je reprend tes demandes :
1. Il existe une MFC qui s'appelle "Valeurs en double"
2.1.
=NB.SI('Export Identified Practive'!$B:$B;"2- Documented")/(NB.SI('Export Identified Practive'!$B:$B;"2- Documented")+NB.SI('Export Identified Practive'!$B:$B;"1- Not documented"))
2.2. MFC avec formule personnalisée
=B1=""
2.3.
=NB.SI('Export Identified Practive'!$B:$B;"1- Not documented")
3. MFC "Valeur inférieure à :" 43466
4.
=NB.SI('Export Identified Practive'!$D:$D;"Preventive")
... Idem pour les autres
5. Idem 2.2.
6. et 7. : Idem 4.
Bonjour Pedro22,
Je te remercie pour ta réponse rapide.
Le problème est que mon employeur souhaite passer de plus en plus sur des codes VBA pour fluidifier et protéger les fichiers...
En effet, les fonctions Excel sont à portées de main mais le fait est que je dois reproduire sous code VBA, et là ça se corse
Est-ce que tu saurais m'aider à élaborer un code VBA correspondant s'il te plaît?
Par avance, merci,
Clément
Est-ce que tu saurais m'aider à élaborer un code VBA correspondant s'il te plaît?
Oui, mais je manque de temps pour faire ça maintenant. J'essaye de trouver un moment dans la semaine.
Pedro22,
ça serait super cool de ta part, merci beaucoup pour ton aide,
Cordialement,
Clément
Une proposition (à coller dans un module standard de l'éditeur VBA) :
Sub Stats()
Dim Total As Long, item, ListeB(), ListeD(), ListeF(), ListeG(), LigMax As Long, i As Long
'Contenu des listes d'items
ListeB = Array("1- Not documented", "2- Documented")
ListeD = Array("Preventive", "Detective", "P/D")
ListeF = Array("Event driven", "Semi-annual", "Annual", "Quarterly", "Daily", "Many times a day", "Monthly", "Weekly")
ListeG = Array("Automated", "Manual", "Semi automated")
With Sheets(1)
LigMax = .Range("A" & Rows.Count).End(xlUp).Row 'Détermine la dernière ligne non vide
'Compter l'occurence de chaque item en colonne B
For Each item In ListeB
.Range("B" & LigMax + i + 2) = item 'Ajoute le nom de l'item
.Range("B" & LigMax + i + 3) = Application.CountIf(.Range("B4:B" & LigMax), item) 'Ajoute le nombre d'occurences
Total = Total + .Range("B" & LigMax + i + 3) 'Incrémente le total
i = i + 3
Next item
i = 0
For Each item In ListeB
.Range("B" & LigMax + i + 4) = .Range("B" & LigMax + i + 3) / Total 'Pourcentage de l'item sur le total
.Range("B" & LigMax + i + 4).NumberFormat = "0%" 'Format pourcentage
i = i + 3
Next item
Total = 0
'Compter l'occurence de chaque item en colonne D
i = 0
For Each item In ListeD
.Range("D" & LigMax + i + 2) = item 'Ajoute le nom de l'item
.Range("D" & LigMax + i + 3) = Application.CountIf(.Range("D4:D" & LigMax), item) 'Ajoute le nombre d'occurences
Total = Total + .Range("D" & LigMax + i + 3) 'Incrémente le total
i = i + 3
Next item
i = 0
For Each item In ListeD
.Range("D" & LigMax + i + 4) = .Range("D" & LigMax + i + 3) / Total 'Pourcentage de l'item sur le total
.Range("D" & LigMax + i + 4).NumberFormat = "0%" 'Format pourcentage
i = i + 3
Next item
Total = 0
'Compter l'occurence de chaque item en colonne F
i = 0
For Each item In ListeF
.Range("F" & LigMax + i + 2) = item 'Ajoute le nom de l'item
.Range("F" & LigMax + i + 3) = Application.CountIf(.Range("F4:F" & LigMax), item) 'Ajoute le nombre d'occurences
Total = Total + .Range("F" & LigMax + i + 3) 'Incrémente le total
i = i + 3
Next item
i = 0
For Each item In ListeF
.Range("F" & LigMax + i + 4) = .Range("F" & LigMax + i + 3) / Total 'Pourcentage de l'item sur le total
.Range("F" & LigMax + i + 4).NumberFormat = "0%" 'Format pourcentage
i = i + 3
Next item
Total = 0
'Compter l'occurence de chaque item en colonne G
i = 0
For Each item In ListeG
.Range("G" & LigMax + i + 2) = item 'Ajoute le nom de l'item
.Range("G" & LigMax + i + 3) = Application.CountIf(.Range("G4:G" & LigMax), item) 'Ajoute le nombre d'occurences
Total = Total + .Range("G" & LigMax + i + 3) 'Incrémente le total
i = i + 3
Next item
i = 0
For Each item In ListeG
.Range("G" & LigMax + i + 4) = .Range("G" & LigMax + i + 3) / Total 'Pourcentage de l'item sur le total
.Range("G" & LigMax + i + 4).NumberFormat = "0%" 'Format pourcentage
i = i + 3
Next item
Total = 0
.Cells.Interior.Color = xlNone 'Supprime anciennes couleurs
For i = 4 To LigMax 'Parcourir les lignes
If Application.CountIf(.Range("A4:A" & LigMax), .Range("A" & i)) > 1 Then .Range("A" & i).Interior.ColorIndex = 3 'MFC doublons colonne A
If .Range("B" & i) = "" Then .Range("B" & i).Interior.ColorIndex = 6 'MFC cellules vides colonne B
If .Range("E" & i) = "" Then .Range("E" & i).Interior.ColorIndex = 6 'MFC cellules vides colonne E
If Year(.Range("C" & i)) <> 2019 Then .Range("C" & i).Interior.ColorIndex = 46 'MFC dates colonne C
Next i
End With
End Sub
Ouhaaaa Pedro22, c'est exactement ça !!
Merci énormément, tu me sauves