[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 !
guy8572
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 04 déc. 2018 17:22

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

Message par guy8572 »

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
Fichier météo
Fichier météo
Dernière modification par guy8572 le 06 déc. 2018 20:34, modifié 2 fois.
LibreOffice 7.6.2 sous Windows 11
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 3929
Inscription : 06 oct. 2008 10:03

Re: Compléter les lignes manquantes

Message par Oukcha »

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/ ... 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.
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
guy8572
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 04 déc. 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Message par guy8572 »

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 7.6.2 sous Windows 11
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Calc]Compléter les lignes manquantes

Message par Piaf »

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

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
Cliquez pour l'animation
Cliquez pour l'animation
A+
Pièces jointes
guy8572.ods
(12.05 Kio) Téléchargé 94 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
guy8572
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 04 déc. 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Message par guy8572 »

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
Message
XNet_Meteo - Copie.ods
Données météo
(393.33 Kio) Téléchargé 95 fois
LibreOffice 7.6.2 sous Windows 11
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 09:05

Re: [Calc]Compléter les lignes manquantes

Message par joel275 »

Bonjour,

pour ton message d'erreur, lis ce tuto (jusqu'au bout) https://forum.openoffice.org/fr/forum/v ... 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.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 623
Inscription : 10 août 2017 00:15

Re: [Calc]Compléter les lignes manquantes

Message par Jurassic Pork »

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

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

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é 109 fois
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Calc]Compléter les lignes manquantes

Message par Churay »

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

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...
guy85
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 06 juil. 2017 17:57

Re: [Calc]Compléter les lignes manquantes

Message par guy85 »

Le fichier csv contient de 1 jour à 31 jours
Office Version 5.3.0.3 sous Windows 10
guy85
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 06 juil. 2017 17:57

Re: [Calc]Compléter les lignes manquantes

Message par guy85 »

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
guy8572
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 04 déc. 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Message par guy8572 »

pour ton message d'erreur, lis ce tuto (jusqu'au bout) viewtopic.php?f=39&t=50996
Ça c'est fait.
LibreOffice 7.6.2 sous Windows 11
guy8572
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 04 déc. 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Message par guy8572 »

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

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 vous 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 7.6.2 sous Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25142
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: [Calc]Compléter les lignes manquantes

Message par Dude »

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.
guy8572
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 04 déc. 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Message par guy8572 »

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é 100 fois
LibreOffice 7.6.2 sous Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25142
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: [Calc]Compléter les lignes manquantes

Message par Dude »

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
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 623
Inscription : 10 août 2017 00:15

Re: [Calc]Compléter les lignes manquantes

Message par Jurassic Pork »

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é 1937 fois
XNet_Meteo_Calc.png
XNet_Meteo_Calc.png (12.97 Kio) Consulté 1937 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

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 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
guy8572
Membre OOrganisé
Membre OOrganisé
Messages : 54
Inscription : 04 déc. 2018 17:22

Re: [Calc]Compléter les lignes manquantes

Message par guy8572 »

Bonjour,
Merci pour vos réponses
Cordialement
LibreOffice 7.6.2 sous Windows 11
Verrouillé