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:
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