[Résolu][Calc] Compléter les lignes manquantes

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu][Calc] Compléter les lignes manquantes

Messagepar guy8572 » 06 Déc 2018 18:53

Bonjour,
Pour "LibreOffice"
Jusque là, je n'ai pas trouvé de solution.

1) J'ai une station météo qui récupère les données de plusieurs sondes (Pression, température, humidité, vent, soleil).
2) Ces données, sont récupérées toutes les minutes par un logiciel : "Xnet_Meteo".
3) Les données récupérées par ce logiciel vont dans un fichier qui s'appelle : "Xnet_Meteo.csv
4) Tous les jours, je récupère donc 1440 données, pour un mois =44640 lignes.
5) MAIS, il y a (colonne B) des minutes qui n'apparaissent pas, donc, il manque des lignes complètes.

C'est ces lignes qu'il faut que j'ajoute , pas facile de les trouvées.
Je les trouvent avec la formule simple : =SI(B3-B2=100;"";"manque")
Quand la ligne est repérée, je copie soit celle d'avant ou celle d'après que j'insère entre les deux, et je change le texte de la colonne B.
Cette méthode est trop longue, pour une dizaine lignes, ça va, mais pour 1440 lignes par jour, c'est compliqué



Si vous pouviez m'aider, ça m'arrangerais
Merci
Cordialement
Pièces jointes
Capture fichier.JPG
Fichier météo
Dernière édition par guy8572 le 06 Déc 2018 20:34, édité 2 fois.
LibreOffice 5.2.7.2 sous Windows 10 (Obligation de version)
guy8572
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 04 Déc 2018 17:22

Re: Compléter les lignes manquantes

Messagepar Oukcha » 06 Déc 2018 19:19

Bonjour,

  • Image

    Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

    Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche. Avez-vous remarqué comment étaient les autres questions postées ?

    Lisez ce fil pour savoir quelle balise utiliser : http://user.services.openoffice.org/fr/forum/sutra27295.html#27295

    N'oubliez pas que le terme "Macro" ou "OpenOffice" ne doit pas être employé car il est implicite. Essayer de synthétiser au mieux ce que vous cherchez à faire.

    Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

    Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même sous peine de voir votre sujet verrouillé.


  • Vous avez illustré votre question avec des fichiers en provenance d'un site tiers. Or, souvent ces sites n'assurent aucune pérennité sur les données qu'ils hébergent.

    C'est pour cela que nous préférerons que vous utilisiez notre service de pièce-jointe dont le lien est mentionné en bas lorsque vous écrivez votre message : -comment-joindre-un-fichier-sur-ce-forum.html

    Veuillez corriger votre message en utilisant le bouton "Editer" (situé à droite) et en mettant en ligne votre fichier correctement.

    Vous en remerciant par avance.

Merci de votre collaboration.
                                        
:arrow: A lire avant tout ! Image
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
 
Message(s) : 3024
Inscrit le : 06 Oct 2008 09:03

Re: [Calc]Compléter les lignes manquantes

Messagepar guy8572 » 06 Déc 2018 20:31

Bonsoir
N'oubliez pas que le terme "Macro" ou "OpenOffice"

Si je ne mets pas "LibreOffice", on ne peux pas savoir de quelle logiciel je parle ?

Lisez ce fil pour savoir quelle balise utiliser

Comme je ne suis pas habitué, effectivement, j'ai oublié (merci de l'avoir fait)

Vous avez illustré votre question avec des fichiers en provenance d'un site tiers

J'ai pourtant cherché, mais apparemment pas assez.
D'ailleurs, c'est bien plus simple comme ça.

Merci
Cordialement
LibreOffice 5.2.7.2 sous Windows 10 (Obligation de version)
guy8572
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 04 Déc 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Messagepar Piaf » 07 Déc 2018 01:32

Bonsoir
Les copies d'écran c'est bien mais ça ne remplace pas un fichier :roll:
Comme je n'ai pas le courage de recopier les données de la copie d'écran, un petit exemple à tester et à adapter à ton fichier.
Code : Tout sélectionner   AgrandirRéduire
Global Valeur as Long,i as Long

Sub Main
Dim oDoc as Object, maFeuille as Object, oCurseur as Object, maZone as Object
Dim y as Long
   oDoc = thisComponent
   maFeuille = oDoc.CurrentController.ActiveSheet
   oCurseur = maFeuille.createCursor
   oCurseur.gotoEndOfUsedArea(False)
   y = oCurseur.RangeAddress.EndRow
   maZone = maFeuille.getCellRangeByPosition(1,0,1,y)
   For i = UBound(maZone.DataArray) To 0 Step - 1
      If i > 0 then
      Valeur = maZone.dataArray(i - 1)(0)
         If (maZone.dataArray(i)(0) - Valeur) > 100 Then
            Trouver(maZone, maZone.dataArray(i)(0))
         End If
      End If   
   Next i
End Sub

Sub Trouver(Zone as Object,val)
Dim Cherche As Object, zSrc as Object, zDest as Object, maFeuille as Object
Dim trouv As Variant
   Cherche = Zone.createSearchDescriptor
   With Cherche
      .SearchString = val
   End With
   trouv = Zone.findFirst(Cherche)
   Zone.Rows.insertByIndex(trouv.CellAddress.Row,1)
   maFeuille = thisComponent.CurrentController.ActiveSheet
   zSrc = maFeuille.getCellRangeByPosition(trouv.CellAddress.Column -1,trouv.CellAddress.Row,trouv.CellAddress.Column,trouv.CellAddress.Row)
   zDest = maFeuille.getCellRangeByPosition(trouv.CellAddress.Column -1,trouv.CellAddress.Row -1,trouv.CellAddress.Column,trouv.CellAddress.Row - 1)
   zDest.DataArray = zSrc.DataArray
   maFeuille.getCellByPosition(trouv.CellAddress.Column,trouv.CellAddress.Row - 1).Value = val - 100
End Sub
Lignes.gif
Cliquez pour l'animation
A+
Pièces jointes
guy8572.ods
(12.05 Kio) Téléchargé 13 fois
Libre Office Version: 6.1.5 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5572
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

Re: [Calc]Compléter les lignes manquantes

Messagepar guy8572 » 07 Déc 2018 07:28

Bonjour,

Merci pour ta réponse.
J'ai essayé, mais rien ne fonctionne. J'avoue que je ne connais rien à "LibreOffice".
Voici une image du message que j'ai quand je veux exécuter la macro.
Que faut-il faire ?

Je ne vois pas ou est le code.
Voici mon fichier avec l'extension ods, alors que moi, je l'utilise avec l'extension csv.

Cordialement
Pièces jointes
Message.JPG
Message
XNet_Meteo - Copie.ods
Données météo
(393.33 Kio) Téléchargé 11 fois
LibreOffice 5.2.7.2 sous Windows 10 (Obligation de version)
guy8572
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 04 Déc 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Messagepar joel275 » 07 Déc 2018 10:06

Bonjour,

pour ton message d'erreur, lis ce tuto (jusqu'au bout) viewtopic.php?f=39&t=50996
pour trouver la macro fournie par Piaf avec son document, tu ouvres le doc et tu vas dans le menu Outils --> Macros --> Gérer les macros --> Libre Office basic... puis dans la boîte de dialogue, tu développes "guy8572.ods" et tu verras apparaitre la macro dans un éditeur de textes qui te permet de la modifier à volonté ou de la recopier dans un autre document.

Pour que les macros puissent s'exécuter, n'oublie pas de diminuer leur sécurité:
Outils --> Options développe "LibreOffice", clique sur "Sécurité" bouton "Sécurité des macros...." , clique sur "Niveau moyen", puis redémarre Libre Office.

A plus.
OpenOffice 4.1.2 LibreOffice 5-4-6 Windows 8.1
joel275
PassiOOnné
PassiOOnné
 
Message(s) : 709
Inscrit le : 10 Jan 2009 09:05

Re: [Calc]Compléter les lignes manquantes

Messagepar Jurassic Pork » 08 Déc 2018 08:42

hello,
voici ce que je te propose :

le principe :
1 - On copie toutes les données (plage nommée Data) de la feuille données (Données XNet-Meteo) dans une matrice (zdata) pour accélérer les traitements.
2 - On balaie les lignes dans la matrice
3 - Pour chaque ligne on l'écrit dans une nouvelle matrice (zdata2).
3 - Si la différence entre les temps de la ligne courante et celle de la ligne suivante est différente de 100 ou 24 heures (cas du passage à minuit) on considère qu'il y a un problème :
on duplique alors la ligne , on ajoute 1 minute au temps et on écrit cette nouvelle ligne dans la nouvelle matrice. On mémorise aussi la ligne posant problème dans un tableau (LignesLouches)
4 - A la fin du balayage, on met un marqueur sur les lignes posant problème et on affiche ces lignes dans une fenêtre d'avertissement.
5 - On copie la matrice de sortie dans la feuille 2 (Correction des données).
Voici le code :
Code : Tout sélectionner   AgrandirRéduire
Sub CorrigerData()
Dim oDoc As Object, sh1 As Object, sh2 As Object
Dim zone As Object, Cible As Object
Dim zdata As Variant, zLigne As Variant
Dim x as integer,n as integer, DiffTemps as integer
Dim monTemps as date, monTempsSuivant as date
Dim LignesLouches(1000) As Integer
Dim AffLig As String
oDoc = ThisComponent
sh1 = oDoc.Sheets.getByName("Données XNet_Meteo")
sh2 = oDoc.Sheets.getByName("Correction des données")
zone = sh1.getCellRangeByName("Data")
zdata = zone.getDataArray
Dim zdata2((Ubound(zdata)+ 1000)) As Object
    n=0
    cplig = 0
    On Error Goto ErrorHandler
    for x = 0 to UBound(zdata) - 1       
         zdata2(n) = zdata(x)
         rem monTemps = TimeValue(Format(zdata(x)(1),"00:00:00"))
         rem monTempsSuivant =  TimeValue(Format(zdata(x+1)(1),"00:00:00"))
         rem  DifTemps = DateDiff("s",monTemps,monTempsSuivant)
         rem  if DifTemps <> 60 and DifTemps<> -86340 then
         monTemps = zdata(x)(1)
         monTempsSuivant = zdata(x+1)(1)
         DifTemps = monTempsSuivant - monTemps         
             if DifTemps <> 100 and DifTemps <> -235900 then
             rem print x
             LignesLouches(cplig) = x+2
             cplig = cplig + 1
             zligne = DuplicateArray(zdata(x))
             zligne(1) = zligne(1) + 100
             zdata2(n+1) = zligne
             n=n+1
          end if       
    n = n+1
    next x
zdata2(n) = zdata(x)
For x=0 to cplig - 1
    AffLig = Afflig + LignesLouches(x) + " "
    sh1.getCellByPosition(1,LignesLouches(x)-1).CellBackColor = &HFFe7c6
Next x
print cplig & " Lignes louches :" & AffLig
redim preserve zdata2(n)
Cible = sh2.getCellRangeByPosition(0,1,Ubound(zdata(0)),n+1)
Cible.ClearContents(com.sun.star.sheet.CellFlags.VALUE + _
      com.sun.star.sheet.CellFlags.DATETIME + _
      com.sun.star.sheet.CellFlags.STRING)
Cible.setDataArray(zdata2)
Exit Sub
ErrorHandler:
print "Erreur à la ligne : " + x
End sub


Code : Tout sélectionner   AgrandirRéduire
Function DuplicateArray(Source)
Dim x as Integer
Dim Dupli(UBound(Source))
For x = 0 to Ubound(Source)
Dupli(x) = Source(x)
next x
DuplicateArray = Dupli
End Function


Ami calmant, J.P
Pièces jointes
XNet_Meteo - JP.ods
(86.06 Kio) Téléchargé 13 fois
LibreOffice 6.1.x sous windows 10 et LibreOffice 6.0.x sous linux - OpenOffice 4.1.5 sous windows 10
Avatar de l’utilisateur
Jurassic Pork
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 224
Inscrit le : 09 Août 2017 23:15

Re: [Calc]Compléter les lignes manquantes

Messagepar Churay » 08 Déc 2018 18:59

Bonsoir,

Préférant les codes compacts, je me permets d'interviens pour pondérer
Jurassic Pork a écrit:hello,
1 - On copie toutes les données (plage nommée Data) de la feuille données (Données XNet-Meteo) dans une matrice (zdata) pour accélérer les traitements.
2 - On balaie les lignes dans la matrice

Si le .csv ne contient qu'une journée, il a au plus 1440 lignes, qui peuvent se balayer directement dans la feuille sans gréver le temps de traitement.
Sur cette bécane qui n'est pas une bête de compétition, une quinzaine d'insertions (parmi 1431 lignes utiles) prend 140 systemTicks, soit moins d'une seconde. Par contre le code est plus compact :P

Code : Tout sélectionner   AgrandirRéduire
Option Explicit

Sub Main
Dim oSheet AS Object, oCursor AS Object, aDatas()
Dim nRow AS Long, nRowMax AS Long, nColMax AS Long, nDelta AS Long
   oSheet = thisComponent.Sheets.getByName("Données XNet_Meteo")
   oCursor = oSheet.createCursor : oCursor.gotoEndOfUsedArea(False)
   nRowMax = oCursor.RangeAddress.EndRow
   nColMax = oCursor.RangeAddress.EndColumn
   aDatas = oSheet.getCellRangeByPosition(1, 0, 1, nRowMax).DataArray
   
   FOR nRow = nRowMax TO 1 STEP -1
      nDelta = oSheet.getCellByPosition(1, nRow).Value - oSheet.getCellByPosition(1, nRow-1).Value
      IF nDelta > 100 AND nDelta <> 4100 THEN
         oSheet.Rows.insertByIndex(nRow, 1)
         oSheet.getCellRangeByPosition(0, nRow, nColMax , nRow).setDataArray(oSheet.getCellRangeByPosition(0, nRow+1, nColMax , nRow+1).DataArray)
         oSheet.getCellByPosition(1, nRow).Value = oSheet.getCellByPosition(1, nRow+1).Value - 100
         ' Pour repérer l'insertion, activer la ligne suivante
         ' oSheet.getCellByPosition(1, nRow).CellBackColor = 16776960
         nRow = nRow+1
      ENDIF
   NEXT nRow
End Sub
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
 
Message(s) : 2668
Inscrit le : 30 Avr 2009 05:54
Localisation : CATALUNYA

Re: [Calc]Compléter les lignes manquantes

Messagepar guy85 » 09 Déc 2018 12:23

Le fichier csv contient de 1 jour à 31 jours
Office Version 5.3.0.3 sous Windows 10
guy85
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 15
Inscrit le : 06 Juil 2017 16:57

Re: [Calc]Compléter les lignes manquantes

Messagepar guy85 » 09 Déc 2018 13:05

Le problème dans la macro, c'est qu'elle prend en compte (par exemple 125900 et 130000 (la différence est normal e) donc elle ne doit pas s'en occuper.
Office Version 5.3.0.3 sous Windows 10
guy85
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 15
Inscrit le : 06 Juil 2017 16:57

Re: [Calc]Compléter les lignes manquantes

Messagepar guy8572 » 11 Déc 2018 15:19

pour ton message d'erreur, lis ce tuto (jusqu'au bout) viewtopic.php?f=39&t=50996

Ça c'est fait.
LibreOffice 5.2.7.2 sous Windows 10 (Obligation de version)
guy8572
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 04 Déc 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Messagepar guy8572 » 11 Déc 2018 15:26

Je ne sait pas si ça peu aider ??, voici le code que j'ai si je récupère le fichier csv avec Excel (ça fonctionne).
Mais je ne peux pas le réenregistrer dans mon logiciel météo (il n'accepte les fichiers .csv que venant de "LibreOffice"
Là le fichier s'appel "Recuperation_des_données"

Code : Tout sélectionner   AgrandirRéduire
ub Rétablir_LignesManquantes()
    Dim lgn, n&, i&, j%, k%, t&, dt&
    With Worksheets("Recuperation_des_donnees")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        t = (.Cells(n, 2) \ 100) Mod 100 + (.Cells(n, 2) \ 10000) * 60
        Application.ScreenUpdating = False
        For i = n To 3 Step -1
            t = (1440 + t - 1) Mod 1440
            dt = (.Cells(i - 1, 2) \ 100) Mod 100 + (.Cells(i - 1, 2) \ 10000) * 60
            If dt <> t Then
                j = t - dt - 1: lgn = .Cells(i - 1, 1).Resize(, 62).Value
                .Range(.Cells(i, 1), .Cells(i + j, 1)).EntireRow.Insert
                For k = 0 To j
                    .Cells(i + k, 1).Resize(, 62).Value = lgn
                    .Cells(i + k, 2) = (((dt + k + 1) \ 60) * 100 + (dt + k + 1) Mod 60) * 100
                Next k
                t = dt
            End If
        Next i
    End With
End Sub



La modération a écrit:4 messages à la suite c'est 3 de trop.
Merci d'arrêter votre monologue. Vous disposez d'un bouton Éditer en haut à droite de chaque message et d'un autre bouton ajout si vous désirez ajouter un complément lorsqu'il n'y a pas de réponse.
LibreOffice 5.2.7.2 sous Windows 10 (Obligation de version)
guy8572
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 04 Déc 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Messagepar Dude » 26 Déc 2018 18:46

guy8572 a écrit:il n'accepte les fichiers .csv que venant de "LibreOffice"

A priori, personne ne comprend rien à ce que tu exposes.

guy8572 a écrit:Les données récupérées par ce logiciel vont dans un fichier qui s'appelle : "Xnet_Meteo.csv

Mets donc en ligne ce CSV (que tu encapsuleras dans un ZIP) qu'on puisse comprendre.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20556
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc]Compléter les lignes manquantes

Messagepar guy8572 » 01 Jan 2019 17:38

Bonjour,
Meilleurs vœux à tous.
Voici le fichier.

Ce fichier est créé par le logiciel "Xnet_Meteo".
Si j'ouvre ce logiciel plusieurs fois par jours (pour mettre à jours le logiciel météo "GraphWeather"), il manque des lignes.
Voir le lien de mon site:
meteofloralies.free.fr
Si je ne l'ouvre pas pendant plusieurs jours, il n'y a pas de lignes manquantes.
A part les 11 premières lignes (les mois précédents, voir colonne A (sauf pour 2019)), je dois replacer les lignes manquantes, en prenant, soit celles du dessus ou du dessous pour qu'il ne manque pas une minute (c'est ce que je fais tous les jours).

Je me demandais donc, si il était possible de le faire avec une macro.
Après avoir fait le remplacement, je formate la colonne B avec 6 chiffes, puis j'enregistre et je recommence le lendemain.
Par contre, il ne faut rien d'autre dans le fichier (pas de formules etc...).

Cordialement
Pièces jointes
XNet_Meteo.7z
Données météo
(313.83 Kio) Téléchargé 8 fois
LibreOffice 5.2.7.2 sous Windows 10 (Obligation de version)
guy8572
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 04 Déc 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Messagepar Dude » 02 Jan 2019 16:47

guy8572 a écrit:je formate la colonne B avec 6 chiffes

Un nombre avec des zéros non significatifs est une vue de l'esprit.
Si tu veux réellement avec cela lors de l'importation, il suffit de régler l'assistant en mettant ta colonne en Texte.
no_problemo.png
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20556
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc]Compléter les lignes manquantes

Messagepar Jurassic Pork » 02 Jan 2019 18:05

hello,
bonne année à tous :
avec la macro expliquée dans le message du 8 décembre de cette discussion voilà ce que j'obtiens concernant les lignes qui sont susceptibles de ne pas être bonnes dans ton fichier csv :

XNet_Meteo.png
XNet_Meteo.png (8.83 Kio) Consulté 262 fois



XNet_Meteo_Calc.png
XNet_Meteo_Calc.png (12.97 Kio) Consulté 262 fois


Edit : je n'ai traité que les 8000 premières lignes . La macro pour l'instant ne fonctionne pas avec 50000 lignes.
Voilà c'est corrigé en remplaçant les integer par des long dans ma macro :
Code : Tout sélectionner   AgrandirRéduire
Dim oDoc As Object, sh1 As Object, sh2 As Object
Dim zone As Object, Cible As Object
Dim zdata As Variant, zLigne As Variant
Dim x as long,n as long, DiffTemps as long
Dim monTemps as date, monTempsSuivant as date
Dim LignesLouches(2000) As Long
Dim AffLig As String
oDoc = ThisComponent
sh1 = oDoc.Sheets.getByName("Données XNet_Meteo")
sh2 = oDoc.Sheets.getByName("Correction des données")
zone = sh1.getCellRangeByName("Data")
zdata = zone.getDataArray
Dim zdata2((Ubound(zdata)+ 2000)) As Object

et voilà toutes les lignes louches :
Xnet_Meteo_Lignes_A_Verifier.png


Ami calmant, J.P
LibreOffice 6.1.x sous windows 10 et LibreOffice 6.0.x sous linux - OpenOffice 4.1.5 sous windows 10
Avatar de l’utilisateur
Jurassic Pork
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 224
Inscrit le : 09 Août 2017 23:15

Re: [Calc]Compléter les lignes manquantes

Messagepar guy8572 » 24 Jan 2019 08:24

Bonjour,
Merci pour vos réponses
Cordialement
LibreOffice 5.2.7.2 sous Windows 10 (Obligation de version)
guy8572
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 04 Déc 2018 17:22


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 7 invité(s)