Normalisation des données dans Excel avec VBA, Excel VBA

Normalisation des données dans Excel avec VBA, Excel VBA

Objectif
– Parcourir une colonne de données (par exemple des valeurs numériques représentant des ventes, des notes, des mesures, etc.).
– Appliquer la normalisation min-max (ou autre technique comme la Z-score).
– Écrire les données normalisées dans une colonne adjacente.

Exemple de code VBA : Normalisation Min-Max

Sub NormalisationMinMax()
Dim ws As Worksheet
Dim dataRange As Range
Dim cell As Range
Dim minValue As Double
Dim maxValue As Double
Dim currentValue As Double
Dim normalizedValue As Double
Set ws = ThisWorkbook.Worksheets("Feuil1") ' Feuille de travail cible
' Définir la plage des données (exemple: Colonne A de la ligne 2 à la dernière ligne)
Set dataRange = ws.Range("A2:A" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row)
' Calculer le min et le max dans la plage
minValue = Application.WorksheetFunction.Min(dataRange)
maxValue = Application.WorksheetFunction.Max(dataRange)
' Parcourir chaque cellule et appliquer la formule de normalisation Min-Max
For Each cell In dataRange
currentValue = cell.Value
If maxValue = minValue Then
normalizedValue = 0 ' éviter la division par zéro
Else
normalizedValue = (currentValue - minValue) / (maxValue - minValue)
End If
' Écrire la valeur normalisée dans la colonne B (même ligne)
cell.Offset(0, 1).Value = normalizedValue
Next cell
MsgBox "Normalisation terminée !", vbInformation
End Sub

Explication détaillée étape par étape

Étape et Explication:
1-  Définir la feuille : `Set ws = ThisWorkbook.Worksheets(« Feuil1 »)` fixe la feuille active pour le traitement
2- Déterminer la plage: `Set dataRange = ws.Range(« A2:A » & …)` trouve la dernière ligne avec données
3- Trouver Min et Max: `minValue` et `maxValue` capturent les valeurs extrêmes
4- Boucle sur chaque cellule: La boucle `For Each cell` parcourt les données pour appliquer la formule
5- Formule de normalisation: `normalizedValue = (x – min) / (max – min)` est la formule standard
6- Écriture du résultat: `cell.Offset(0, 1)` écrit dans la colonne B (colonne adjacente)
7- Fin et message: Une MsgBox pour signaler la fin du traitement

Avantages de ce code
1 – Facilement adaptable pour plusieurs colonnes.
2 – Peut être converti en procédure générique (par exemple, passer la colonne source et cible en argument).
3 – Compatible avec de grands tableaux grâce à la gestion dynamique de plage.

Bonus – Version Z-Score (Normalisation centrée-réduite)

Sub NormalisationZScore()
Dim ws As Worksheet
Dim dataRange As Range
Dim cell As Range
Dim meanValue As Double
Dim stdDevValue As Double
Dim currentValue As Double
Dim normalizedValue As Double
Set ws = ThisWorkbook.Worksheets("Feuil1")
Set dataRange = ws.Range("A2:A" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row)
meanValue = Application.WorksheetFunction.Average(dataRange)
stdDevValue = Application.WorksheetFunction.StDev(dataRange)
For Each cell In dataRange
currentValue = cell.Value
normalizedValue = (currentValue - meanValue) / stdDevValue
cell.Offset(0, 1).Value = normalizedValue
Next cell
MsgBox "Normalisation Z-Score terminée !", vbInformation
End Sub

Personnalisation possible
– Ajouter la gestion d’erreurs.
– Permettre à l’utilisateur de sélectionner la plage avec un `InputBox`.
– Générer automatiquement un rapport avec un graphique après la normalisation.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x