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

17macro-v1.xlsm (68.27 Ko)

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

Rechercher des sujets similaires à "macro calculs statistiques mise forme"