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.