Améliorer lecture/copie feuille d'un classer + suppression ligne

Tibo2

XLDnaute Nouveau
Bonjour à tous,

J'ai un petit problème pour lire des données et pouvoir les modifier pour travailler dessus.
On me fournit un fichier excel qui me donne des informations avec des points toutes les 10 min (je les veux seulement toutes les heures) et à la fin de chaque journé me donne les totaux dans des lignes à la suite (ce qui ne m'intéresse pas).

J'ai donc fait une macro qui importe les colonnes qui m'intéresse, puis supprime les lignes vides, puis fait les calculs qui m'intéresse c'est à dire faire la moyenne de 6 points de mesure (soit 6 lignes) et me les écrit dans une nouvelle colonne, puis supprime les nouvelles lignes vides.

Ce que j'ai fait marche, mais c'est loin d'être optimale j'en suis persuadé... et vu le nombre de données que je devrais traiter (un peu moins de 100 000 lignes...) si quelqu'un a une idée pour éviter toutes ces boucles... mon problème principale est par exemple la gestion de la suppression d'une ligne et donc le décalage du Range dans lequel je me ballade. J'espère avoir été clair... et merci d'avance

A la suite le code, en 2 procédure, la première charge le fichier et fait le premier nettoyae. Le deuxième s'occupe de mettre en forme et faire les calculs:
VB:
 Sub recup_moyenne()
classeur_actif = ActiveWorkbook.Name
feuille_active = ActiveSheet.Name

'date_ARENH = Range("A3").Value

MsgBox "Choisissez un fichier svp"
Message = Application.Dialogs.Item(xlDialogOpen).Show 'arg3:=True
If Message = 0 Then
MsgBox "Choisissez un fichier svp"
Else
nom1_complet = ActiveWorkbook.Name

Sheets(1).Select
Range("B1").Select

'Selection.End(xlDown).Select
'ligne_fin = ActiveCell.Row
Ligne_fin = Range("B100000").End(xlUp).Row

'If Range("A1").Value = date_ARENH Then

'Range("B1:B" & Ligne_fin).Copy
Union(Range("B1:B" & Ligne_fin), Range("E1:E" & Ligne_fin)).Copy
Workbooks(classeur_actif).Activate
Sheets(feuille_active).Activate
Range("A2").Select
ActiveCell.PasteSpecial xlPasteValues
'Else
' MsgBox ("Les dates ne correspondent pas, merci de vérifier svp")
'End If
Application.DisplayAlerts = False
Workbooks(nom1_complet).Close savechanges:=False
Application.DisplayAlerts = True
End If
'Suppression des lignes vides
Range("A100000").End(xlUp).Select
Do
If IsEmpty(ActiveCell) Then
ActiveCell.EntireRow.Delete
End If
ActiveCell.Offset(-1, 0).Select
Loop Until ActiveCell.Row = 1
End Sub

Public Sub Tri()
Dim N As Byte
Dim N2 As Integer
Dim ValeurCelluleCumulee As Single
Dim c As Range
N = 0
N2 = 2
ValeurCelluleCumulee = 0

Ligne_fin = Range("A65536").End(xlUp).Row
For Each c In Range("A3:A" & Ligne_fin)
N = N + 1
ValeurCelluleCumulee = c.Offset(0, 1).Value + ValeurCelluleCumulee
If N = 6 Then
N2 = N + N2
Range("C" & N2).Value = Month(c.Value)
Range("D" & N2).Value = Weekday(c.Value)
If Weekday(c.Value) <= 5 Then
Range("E" & N2).Value = "Semaine"
Else
Range("E" & N2).Value = "Week-End"
End If
Range("F" & N2).Value = Hour(c.Value)
Range("G" & N2).Value = ValeurCelluleCumulee / 6
N = 0
ValeurCelluleCumulee = 0
End If
Next c
Range("C100000").End(xlUp).Select
Do
If IsEmpty(ActiveCell) Then
ActiveCell.EntireRow.Delete
End If
ActiveCell.Offset(-1, 0).Select
Loop Until ActiveCell.Row = 2
Range("B1").EntireColumn.Delete
End Sub
 

Pièces jointes

  • Essaie_ChargerFichier.xlsm
    48 KB · Affichages: 25

pyfux

XLDnaute Occasionnel
Re : Améliorer lecture/copie feuille d'un classer + suppression ligne

Bonjour,

Pour gagner un peu de temps de traitement, regarde de ce côté:
Optimisation macro Excel

Je te conseil de mettre une trace afin d'identifier quels sont les traitements les plus long afin d'intervenir sur les parties de code incriminées.
Comme ça je ne vois pas trop ce qui peut être amélioré et je ne comprend pas bien le code de suppression des lignes. Tu supprimes tout?

Courage.
Pyfux
 

Tibo2

XLDnaute Nouveau
Re : Améliorer lecture/copie feuille d'un classer + suppression ligne

Merci pour le lien pyfux.

Non je ne supprime pas tout. Ce n'est pas très évident à expliquer... A la suite, un extrait des données que j'importe. Comme je veux ces données que toutes les heures et pas toutes les 10 min, je fais une moyenne de 6 données de (23:10 à 00:00 par exemple). Pour faire mon calcul facilement je supprime avant les lignes Jour Max, Min, Moyenne et total qui ne m'intéresse pas et me gêne pour faire le calcul. Après je fais le calcul mais je me retrouve pour 1 calcul avec 1 ligne ou j'ai le résultat du calcul et la date, par exemple le 01/04/12 23:00 Moyenne et 5 lignes qui ne m'intéresse pas donc je supprime ces 5 lignes. Le programme marche mais c'est quand même très tordu ce que je fais. Si quelqu'un à une meilleur méthode ou alors voit comment imbriquer toutes mes boucles je suis preneur :). Merci à tous et bon wk pour les veinards!

01/04/2012 22:50 3043,333 1246,667 18260 7480
01/04/2012 23:00 3021,667 1255 18130 7530
01/04/2012 23:10 3026,667 1250 18160 7500
01/04/2012 23:20 3031,667 1265 18190 7590
01/04/2012 23:30 3003,333 1241,667 18020 7450
01/04/2012 23:40 2966,667 1183,333 17800 7100
01/04/2012 23:50 2990 1191,667 17940 7150
02/04/2012 00:00 2965 1171,667 17790 7030
Jour Maximum 21130 9300
Jour Minimum 16150 6130
Jour Moyenne 18411,806 7967,222
Jour Total 441883,333 191213,333
02/04/2012 00:10 2900 1108,333 17400 6650
02/04/2012 00:20 2898,333 1130 17390 6780
 

Tibo2

XLDnaute Nouveau
Re : Améliorer lecture/copie feuille d'un classer + suppression ligne [RESOLL]

Bonjour à tous,

Si cela peut rendre service à qqn. En fait c'est la suppression des lignes qui me faisait perdre beaucoup de temps dans la procédure. Pour évider ce problème, je fais donc un seul passage mais je réécris tout dans une nouvelle feuille et supprime /ferme l'ancienne. Ca me fait gagner énormement de temps.

Bonne journée
 

Statistiques des forums

Discussions
312 328
Messages
2 087 316
Membres
103 515
dernier inscrit
Cherbil12345