XL 2016 Macro pour automatiser le nettoyage d'un fichier

kevint13

XLDnaute Nouveau
Bonjour tout le monde,
Je sollicite votre aide pour établir une macro qui va changer ma vie !

Voici en détail mon besoin :

Pour chaque colonne du tableau :
- Vérifier que chaque cellule de la colonne ne contient pas de texte. S'il y a du texte (peu importe le texte) remplacer la valeur par la moyenne de la colonne en question :
1570024639374.png

Une fois la première colonne vérifiée, passer à la colonne suivante et répéter l'opération pour vérifier toutes les colonnes une par une.

Spécificités :
1) J'ai toujours une colonne avec des dates (généralement c'est la première), cette colonne ne doit pas être traitée ou ne doit pas changer.
2) Il m'arrive d'avoir plusieurs niveaux (ligne) de titre, il faudrait peut-être pouvoir indiquer à la macro à quel N° de ligne commencer ? :

1570024922594.png


J'espère avoir été assez explicite sur la problématique, merci encore pour votre aide !
 

kevint13

XLDnaute Nouveau
Je pense avoir trouvé !
VB:
Sub nettoyer_fichier()
Dim LG&, CL&, i&, PlG As Range
Dim Titre As Double
Titre = InputBox("Combien de ligne de titre : ", "Ligne de titre")
LG = Cells(Rows.Count, 1).End(xlUp).Row
CL = Cells(Titre + 1, 2).End(xlToRight).Column
On Error Resume Next
For i = 2 To CL
Set PlG = Cells(Titre + 1, i).Resize(LG - Titre)
PlG.SpecialCells(2, 2).Value = Application.Average(PlG)
Set PlG = Nothing
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Tu n'as testé le code que j'ai posté dans le message#16?
Car pas eu de retour sur celui-ci de ta part.

J'en suis fort marri, du coup je me reverse un petit verre, tout en affichant un air chafouin... (snif)

EDITION: Je viens de voir ton message, trop tard
Du coup, je remis l'alcool dans la bouteille et désormais affiche une mine réjouie ;)
 

Staple1600

XLDnaute Barbatruc
Re

Une dernière proposition (avant de passer à table)
Et avec ce que j'ai compris par rapport à cette histoire de lignes de Titre
VB:
Sub test_III()
Dim LG&, CL&, i&, j&, PremL&, PlG As Range
LG = Cells(Rows.Count, 1).End(3).Row
    For j = 1 To 10
        If IsDate(Cells(j, 1)) Then
        PremL = Cells(j, 1).Row
        Exit For
        End If
    Next j
CL = Cells(PremL, 2).End(xlToRight).Column
On Error Resume Next
For i = 2 To CL
Set PlG = Cells(PremL, i).Resize(LG - 4)
PlG.SpecialCells(2, 2).Value = Application.Average(PlG)
Set PlG = Nothing
Next
End Sub
 

Discussions similaires

Réponses
12
Affichages
217
Réponses
8
Affichages
362

Statistiques des forums

Discussions
311 713
Messages
2 081 806
Membres
101 819
dernier inscrit
lukumubarth