Conversion en heure du tableau enedis linky

re,

sisi le fichier CSV, j'arrive a le généré sur énédis sans soucie, le probleme etant qu'en 1 ans j'ai changé 3 fois de type de visualisation.

actuelement je suis en tranche de 15mn, mais je voulais les voir en heure ( ça je pense que tu la compris du coup ^^ )

ta formule est très bien, mais je ne comprend pas pourquoi elle ne fonctionne pas sur mon dernier essaie ici, regarde les tranches en 30mn ou en 15mn. la moyenne ne se calcule pas :/ je ne sais pas pourquoi

24essaie.zip (295.39 Ko)

re,

vous savez me joindre le fichier CSV ?

le chiffre dans la 2ième colonne c'est toujours la consommation par heure (et alors la moyenne) même si c'est par quinze minutes ou une demie heure ?

avec quelque suppléments.

Ce zip, c'est celui de ce matin ?

10test-macro-1.zip (908.60 Ko)

re, pour le fichier csv, je vous le met en PJ ( du coup c'est le même que celui que j'ai posé en 1er page )

la récupération ressemble a ça :

2022 07 30 18 11 54 suivre mes mesures espace particulier

ici on choisis le type de data que l'on veux, puis :

2022 07 30 18 12 08 mes telechargements espace particulier

voila ce que l'on trouve dans la partie " mes téléchargements":

du coup le fichier, c'est celui la :

pour la question du document du matin, je ne pourrais pas te dire, a vrai dire, il y en a beaucoup j'en suis a cette version en PJ.

celle ci n'a pas de TDC car je n'en veux pas dans un 1er temps.

a l'ouverture il y a le document tel qu'on le récupère sur enedis ( si j'ouvre le csv avec excel, j'ai 100% la même choses )

puis j'applique la macro que j'ai inclue pour le moment dans ce document ( donc c'est pour ça l'extention xlsm ) avec la combinaison de touche

ctrl shift A

je passe de ça :

2022 07 30 18 22 29 essaie xlsm microsoft excel

a ça :

2022 07 30 18 22 38 essaie xlsm microsoft excel

jusqu'a la ligne 548 du document, enédis me donner les valeurs par heure, le 13 aout 2021, ils ont changer pour me fournir la relève en demis-heure, puis dèrnièrement en quart-d'heure...

dans cette macro qui ce trouve dans la feuille en PJ, j'avais inclue ta formule :

    Range("D2").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(OR(ROW()=2,HOUR([@Heure])<>HOUR(SUM(R[-1]C[-2]))),AVERAGE(OFFSET([@Colonne3],,,SUM(--(HOUR(RC[-2]:R[3]C[-2])=HOUR(RC[-2]))),)),""-"")"

celle çi est très bien car elle fait vraiment la distinction en automatique entre les heures les demis heures et les quart d'heure, par contre

la ou quand toi tu m'a donné la feuille ce matin avec la formule valide, ici dans ma version ( dans laquel j'ai copier collé ta formule ) je n'ai pas les moyennes qui ce font.

je ne sais pas pourquoi.

15essaie.zip (295.39 Ko)

après de multiple essaie, je suis toujours bloqué sur cette dernière étape de calcule de moyenne.

je n'arrive pas a comprendre pourquoi celle çi ne fait pas la moyenne :/

édit, je pense que c'est les accolade en début et fin de formule, c'est le seul truc qui change que je n'arrive pas a remettre

EDIT 2 : BINGO, c'est bien ce ctrl maj entré a faire a la fin, je vais voir pour refaire la macro au propre en incluant ça

bonjour,

les TCD, ils sont vraiment facile à apprendre et à utiliser !!! https://www.excel-pratique.com/fr/formation-excel/tableau-croise-dynamique

moi, j'ai excel365, on ne voit plus la distinction avec ces formules matricielles.

Ma derniere version avec quelque suppléments

* un bouton pour lire un fichier CSV

* un bouton pour plus ou moins de details par mois (=montrer ou cacher les jours)

Le TCD sur cette feuille montre les moyennes.

Puis une feuille avec les min, moyennes et max par mois.

Puis une feuille avec les max consommations par heure et mois pour voir quand cela ce passe. (pour anticiper au tarif de capacité qu'on pense à créer ici en Belgique). Il y a un tas de curves mais on sait les filtrer avec ces slicers.

22test-macro-1.zip (1.24 Mo)

La formula en colonne E, elle est matricielle chez vous ?

en effet, sur la formule que tu m'a communiqué hier ( celle ou je n'avais pas les moyennes quand je la copier coller ) j'avais des {} au debut et fin de formule.

je ne connais pas les formule matriciel, je ne sais même pas a quoi ça sert réelement, j'ai fait une recherche google pour trouvé comment l'appliqué.

du coup, j'ai continuer la macro un peu ce matin ( voir la pj )

dans l'idée, je part toujours de la même base ( le csv d'énédis que je C/C pour le moment dans ce classeur qui a la macro )

puis j'applique la macro, a la suite de ça, je continue un peu avec une nouvelle macro, si le résultat et ok, alors j'inclue cette dernière dans la macro principal.

si tu veux un "changelog" :

suite au succès de ta formule, la macro copie tout le tableau dans une nouvelle feuille en mode donnée brut, je perd donc l'affichage des dates, heures, formules.

je réaplique le format de cellule sur les dates/heures, puis je filtre le tableau pour affiché uniquement les valeurs vide ( #N/A ou - de ta formule ) puis je supprime les lignes.

a la suite de ça je fait réaparaitre le tableau en totalité.

c'est maintenant que je vais apprendre a joué avec le TDC ainsi que les filtres.

peut etre entre temps, je vais faire une conversion watts vers kilowatts, je ne sais pas encore.

watt c'est bien pour les valeurs en dessous de 1000, mais en hivers je suis a ~ 60 000 watt, du coup 60kw c'est plus parlant, je ne sais pas ce que je vais faire encore ^^

execution de la macro : ctrl shift A ( comme d'ab )

6essaie-ok.zip (296.04 Ko)

re, beau boulot pour un dimanche

en VBA, Select et Activate, on essaie à eviter cela, parce que cela ralentit tout, mais ce sont des problèmes pour plus tard ... .

2 corrections, la fomulaArray, il y a un "iferror" pour eviter ce #DIV et il divise le résultat par 1.000 pour les kW et un petit peu plus loin, il change le format et ajoute virtuellement " kW" au chiffre

Selection.FormulaArray = _
     "=iferror(IF(OR(ROW()=2,HOUR([@Heure])<>HOUR(SUM(R[-1]C[-2]))),.001*AVERAGE(OFFSET([@colonne3],,,SUM(--(HOUR(RC[-2]:R[3]C[-2])=HOUR(RC[-2]))),)),""-""),""-"")"     '>>>>>>>>>>>>>>>>>>>>>>>>>>>>changement 1
     Columns("A:D").Select
     Selection.Copy
     Sheets.Add After:=ActiveSheet
     Range("A1").Select
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                     :=False, Transpose:=False
     Range("A1").Select
     Range(Selection, Selection.End(xlToRight)).Select
     Range(Selection, Selection.End(xlDown)).Select
     Application.CutCopyMode = False
     ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$D$17858"), , xlYes).Name _
               = "Tableau3"
     Columns("A:A").Select
     Selection.NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
     Columns("B:B").Select
     Selection.NumberFormat = "h:mm;@"
     Columns("C:C").Select
     Selection.Delete Shift:=xlToLeft
     Columns("c:c").NumberFormat = "0.00 kW"  '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>changement 2
merci,

tu sais, je n'ai pas spécialement de talent dans le VBA, j'avais regardé un peu passé un temps, mais j'ai un peu tout oublié.

actuellement j'étais sur la suppression de la page qui devient inutile. ( cette fois ça pris sur le net, pour prendre en compte toutes les feuilles ormis celle en cours, peut importe le nom de la feuille )

2022 07 31 10 48 57 microsoft visual basic pour applications essaie ok xlsm module1 code

après pour tout ce qui a déjà était crée en macro je m'embête pas plus que ça, je fais " enregistrer une macro" c'est pour ça que le code n'est pas beau.

je vais regarder pour inclure la tienne

re,

il est vraiment nécessaire d'apprendre à utiliser des TCD, voir le link plus haut, parce qu'il fait tout le boulot à partir du moment que les données sont en ordre.

Regardez à mes macros, quelque format conditionelles et c'est tout.

oui, je sais bien que c'est très pratique, je m'en servirais après, quand j'aurais supprimé les feuilles inutiles.

tout ce que vous ( les membres ) m'avez envoyé en essaie comporté des TDC, c'est bien que c'est utile ^^

comme vous avez ajouter une feuille après celle ci (Sheets.Add After:=ActiveSheet) et il n'y avait qu'une feuille

If Sheets.Count >1 Then Sheets(1).Delete

merci,

j'avance petit a petit avec du code dégeulasse je le voie un peu, donc je sais que pour vous, ça doit etre vraiment pas propre, petite question, je m'ataque au TDC, enormément de problemme pour le crée en vba car en version enregistrement de macro, cela ne fonctionné pas. j'ai compris mon problemme, c'est surtout le nomage automatique des éléments type tableau ou feuille ( par exemple quelquefois il cherche la feuille 17 mais elle n'existe plus, et la création suite a un nouveau lancement de macro crée la 18 ... )

je vais essayé d'optimisé cela a la fin, car l'execution est longue ( 15-20sc ~ ) j'ai vue quelques astuce, notament le rafraichissement de l'ecran.

ici, comment je pourrais faire pour faire un range sans valeurs fixe ?

    ' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> passer en last row ??? <<<<<<<<<<<<<<<<<<<<<<<<
    ActiveChart.SetSourceData Source:=Range("$A$3:$B$377")
2022 07 31 15 15 18 essaie ok xlsm microsoft excel

car il et certain que je ne finirais pas tout le temps en B377

j'avance a mon ritme, mais je comprend ce que je fais =)

Bonjour

Sur tous les forums, on déconseille fortement de créer un TCD par VBA

Cela ne sert à rien dans 99% des cas

Cette obsession du VBA te fait perdre un temps infini là ou moins de 10 clics donnent un résultat pertinent et facilement évolutif...

bonjour,

78Chris a (de nouveau) raison, on crée des outils une fois et on les recycle à chaque fois. Donc préparez vos donnez et puis vous les collez dans un tableau qui est la source d'un TCB. Ce tableau a l'advantage d'avoir un nom, qu'on utilise comme source, donc cela est dynamique.

je sais que je perd un temps monstre, enfin ça me permet d'apprendre un peu quand même.

l'objectif final c'est aussi la diffusion de la macro pour les gens dans le même cas que moi, c'est pour cela que je veux tout automatisé

a terme ça se passera comme ça :

  • ouvrir le csv d'enedis
  • appliquer la macro
  • terminé

je voulais surtout que ça ce génère automatiquement, mais je vais continuer a me penché dessus

bonjour, pour ouvrir un fichier CSV et récupérer les données, vous pouvez le faire comme çà ...

20essaie-ok.zip (511.29 Ko)

re,

voila ce que j'ai fais, en dépis de vos avertissements

je croise les doigts pour que ça ne me génère pas de bug a la longue.

mais du coup ça reviens quasiment a ce que je veux, il me manque 2-3 petites choses a faire dessus.

19essaie-oneil4-prg.zip (302.50 Ko)

quand j'aurais inclue la macro sur mon pc et non plus sur la feuille, je pourais généré des nouvelle collecte de data, par exemple tout les mois, pour mieux les visualisé

commande macro ctrl+alt+a

BsALV, ton dernier fichier, il est top car je pense qu'il et bien mieux optimisé que le miens, je le voie sur la durée d'execution de la génération du csv sous forme de tableau.

je pense réelement qu'un mix de cette commande avec la macro peut rendre le truc bien plus rapide.

Edit : il est rapide car il convertie pas les demis heures ou les quart d'heure, mais le coup du bouton c'est pas mal pour chargé le CSV aussi.

re,

il n' a pas collé les données pendant l'heure d'hiver = GMT +01:00 au lieu de GMT (Greenwich Mean Time)+02:00, donc à partir du 31/10/21 02:00 jusqu'au 27/3/22 02:00

l'erreur est la partie rouge dans cette ligne, donc effacez la partie rouge de cette ligne

If a(i) Like "####-##-##T##:##:##+02:00*" Then 'si cela commence comme çà, donc date & "T" & heure & le reste

Il y a donc quelque chose à corriger (que je n'ai pas fait) à ce moment là, l'heure d'été est jusqu à 02:59:59 GMT+02:00 et une seconde plus tard c'est 02:00:00 GMT+01:00

été >>> hiver

image

hiver >>> été = saute de 01:59:59 GMT+01:00 à 03:00:00 GMT+02:00

image

macro corrigée

Sub Lire_CSV()

     '************************************************
     'ouvrir un fichier CSV et traduire ces données vers le tableau
     '************************************************

     Dim File2Open, fileNo As Integer
     Set dict = CreateObject("scripting.dictionary")     'dictionaire pour rassembler les données

     Set lo = Range("TBL_Données").ListObject     '>>> le tableau structuré pour les données
     If lo.ListRows.Count Then lo.DataBodyRange.Delete     's'il n'est pas vide, alors vider

     File2Open = Application.GetOpenFilename("Text Files (*.csv), *.csv", Title:="Sélectionnez votre CSV-fichier de ENEDIS")
     If File2Open = False Then Exit Sub

     t = Timer
     fileNo = FreeFile     'Get first free file number
     Open File2Open For Input As #fileNo     'ouvrir le fichier
     a = Split(Input$(LOF(fileNo), fileNo), vbLf)     'lire et séparer les données au "saut de ligne"
     Close #fileNo     'fermer le fichier

     For i = 0 To UBound(a)    'boucle tout les pièces séparées
          If a(i) Like "####-##-##T##:##:##*" Then     'si cela commence comme çà, donc date & "T" & heure & le reste
               sp = Split(Replace(Replace(Replace(a(i), "T", "+"), ";", "+"), ";", "+"), "+")   'séparer ce string au charactère "T" et "+"
               If UBound(sp) >= 3 Then If Len(sp(3)) Then dict.Add dict.Count, Array(CDbl(DateValue(sp(0))), CDbl(TimeValue(sp(1))), CDbl(sp(3)))
          End If
     Next

     If dict.Count Then lo.ListRows.Add.Range.Range("A1").Resize(dict.Count, 3).Value = Application.Index(dict.items, 0, 0)

     MsgBox File2Open & vbLf & vbLf & Format(dict.Count, "#,###") & " lignes lu en " & Format(Timer - t, "0.0\s"), vbInformation, "Ready"
End Sub

salut merci bien pour la modif,

ce matin, j'ai voulu essayer d'optimiser et de rendre propre ce qui était déjà crée c'est un peu un challenge pour moi.

je te montre ce que j'ai fait pour le moment, je pense que c'est déjà plus propre :

Sub enedis()
'
' enedis Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+A
'

'optimisation
Application.ScreenUpdating = False
' selection des 3 lignes du haut pour la supression
    Rows("1:3").Select
    Selection.Delete Shift:=xlUp

' décalage des valeurs sur la colonne J pour libéré la colonne A
    Columns("A:C").Select
    Selection.Cut
    Columns("J:J").Select
    ActiveSheet.Paste
    Columns("J:J").Select

' découpage des valeurs que énédis fournis dans le fichier csv de base puis collage en A1
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
    FieldInfo:=Array(Array(0, 1), Array(10, 1), Array(11, 1), Array(16, 1)), _
    TrailingMinusNumbers:=True

' supression des valeurs useless
    Range("B:B,D:D,E:E,F:F,G:G,H:H,I:I,J:J").Select
    Range("J1").Activate
    Selection.Delete Shift:=xlToLeft

' mise en tableau des valeurs restante
    Range("A1:B1,C1").Select
    Range("C1").Activate
    Selection.End(xlDown).Select
    Range("A1:C1").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$C$17857"), , xlNo).Name = _
    "Tableau1"

' format de cellule
    Columns("A:A").Select
    Selection.NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
    Selection.ColumnWidth = 26.29
    Columns("B:B").Select
    Selection.NumberFormat = "h:mm;@"
    Range("Tableau1[[#Headers],[Colonne1]]").Select
    ActiveCell.FormulaR1C1 = "Date"
    Range("Tableau1[[#Headers],[Colonne2]]").Select
    ActiveCell.FormulaR1C1 = "Heure"

' création d'une nouvelle colonne heure
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "résultat"
    Range("D2").Select

' formule pour crée la colonne de la conssomation en heure
    Selection.FormulaArray = _
    "=iferror(IF(OR(ROW()=2,HOUR([@Heure])<>HOUR(SUM(R[-1]C[-2]))),.001*AVERAGE(OFFSET([@colonne3],,,SUM(--(HOUR(RC[-2]:R[3]C[-2])=HOUR(RC[-2]))),)),""-""),""-"")"
    Columns("A:D").Select

a ça :

Sub enedis()
'
' enedis Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+A
'

' Renomme la feuille en DATA
    ActiveSheet.Name = "DATA"

' selection des 3 lignes du haut pour la supression
    Rows("1:3").Delete Shift:=xlUp

' décalage des valeurs sur la colonne E pour libéré la colonne A
    Range("A:C").Cut Range("E:E")

' découpage des valeurs que énédis fournis dans le fichier csv de base puis collage en A1
    Columns("E:E").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
    FieldInfo:=Array(Array(0, 1), Array(10, 1), Array(11, 1), Array(16, 1)), _
    TrailingMinusNumbers:=True

' supression des valeurs useless////////////////////////// voir pour supprimé les 3 d'un coup
    Range("E1").EntireColumn.Delete
    Range("D1").EntireColumn.Delete
    Range("B1").EntireColumn.Delete

' mise en tableau des valeurs restante + creation de la collone resultat final

    Range("A1:D1").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.ListObjects.Add(xlSrcRange, Selection, , xlGuess).Name = _
    "TABLE1"

' format de cellule
    Columns("A:A").Select
    Selection.NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
    Columns("B:B").Select
    Selection.NumberFormat = "h:mm;@"

 'ARRET ICI NOMAGE DES COLLONE DU TABLEAU A FAIRE !!!!!!!!!!!!

' formule pour crée la colonne de la conssomation en heure
    Selection.FormulaArray = _
    "=iferror(IF(OR(ROW()=2,HOUR([@Heure])<>HOUR(SUM(R[-1]C[-2]))),.001*AVERAGE(OFFSET([@colonne3],,,SUM(--(HOUR(RC[-2]:R[3]C[-2])=HOUR(RC[-2]))),)),""-""),""-"")"
    Columns("A:D").Select

j'ai pas mal d'erreur d'execution a corrigé quand je modifie le code, actuellement, j'en suis au nommage des colonnes de tableau.

je me suis mis une petite note sur la supression des colonnes, car je n’ai pas réussi à supprimer toutes les colonnes en même temps, obligé de le faire une après l'autre.

voila, je suis content de moi pour le moment, je sais que je peu utilisé la feuille quand je veux, la c'est juste du "bonus"

après a mon niveau de débutant, j'ai plus de facilité a lire ce que j'ecrit dans cette macro que ce que tu me propose par exemple plus haut, même si c'est forcément moins optimisé

Rechercher des sujets similaires à "conversion heure tableau enedis linky"