[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 !

[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
Fraîchement OOthentifié
 
Message(s) : 8
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) : 2951
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
Fraîchement OOthentifié
 
Message(s) : 8
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é 4 fois
Libre Office Version: 6.0.7 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5467
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é 4 fois
LibreOffice 5.2.7.2 sous Windows 10 (Obligation de version)
guy8572
Fraîchement OOthentifié
 
Message(s) : 8
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) : 700
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é 2 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) : 202
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) : 2665
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


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Google [Bot] et 2 invité(s)