Lignes manquantes

Résolu/Fermé
Guy72 Messages postés 901 Date d'inscription dimanche 18 novembre 2007 Statut Membre Dernière intervention 24 avril 2024 - Modifié le 4 déc. 2018 à 11:00
Guy72 Messages postés 901 Date d'inscription dimanche 18 novembre 2007 Statut Membre Dernière intervention 24 avril 2024 - 6 déc. 2018 à 18:23
Bonjour,

J'ai un fichier .csv avec 43000 lignes.
Mais dans ces lignes, il y a des lignes manquantes.
Comment puis-je aller à l'endroit ou il manque une ligne pour pouvoir recopier à sa place (la ligne supérieure ou inférieure) ?

Par exemple en colonne B il y a le temps:
ligne 1: 220000 = 22 h 00 mn 00 s
ligne 2: 220100 = 22 h 01 mn 00 s
ligne 3: 220200 = 22 h 02 mn 00 s
ligne 4: 220400 = 22 h 04 mn 00 s (il manque la ligne 3)
sur 4 lignes, ça va, mais sur 43000 lignes, ça devient compliqué.

Merci de votre aide
Cordialement

Modif:
Je me suis trompé.
Mon message sur libre Office a été supprimer.
Mais je préférerais avoir celui de Libre-Office et pas celui de Excel

Configuration: Windows 10, Google Chrome

4 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
4 déc. 2018 à 11:32
Bonjour
il ne manque pas la ligne 3 dans votre exemple?

ceci dit, pour régler ça:
une colonne hors champ, par exemple Z
on commence en Z2:
=SI(B2="";B1;B2)
à tirer sur la hauteur

en suite copier Z et faire un collage spécial valeur sur B

crdlmnt
0
Guy72 Messages postés 901 Date d'inscription dimanche 18 novembre 2007 Statut Membre Dernière intervention 24 avril 2024 21
6 déc. 2018 à 18:23
Bonjour,
Oui, c'est une solution (que j'aurais dû trouver) pour rrpérer les lignes manquantes.
C'est déjà plus facile
Merci de ton aide
0
Guy72 Messages postés 901 Date d'inscription dimanche 18 novembre 2007 Statut Membre Dernière intervention 24 avril 2024 21
4 déc. 2018 à 11:35
bonjour,
il ne manque pas la ligne 3, mais li manque 220300
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
5 déc. 2018 à 13:58
Bonjour,

En vba on utilise la fonction Split pour séparer la 1ère portion de texte jusqu'au signe = que l'on met dans la colonne B;
Ensuite on fait une boucle sur la colonne B pour voir si l'écart entre 2 lignes consécutives est égale à 100.
Si ce n'est pas le cas on saisie dans la colonne C "ligne manquante"

Voir ceci pour les boucles sur colonnes

https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/

Option Explicit
Private Sub CommandButton1_Click()
Splitcolonne
End Sub
'https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/
Sub Splitcolonne()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1") 'adapter le nom de la feuille
    NoCol = 1 'lecture de la colonne A
    Application.ScreenUpdating = False
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
        Var = FL1.Cells(NoLig, NoCol)
        FL1.Cells(NoLig, NoCol + 1) = Split(Var, "=")(0)
    Next
    Application.ScreenUpdating = True
    Set FL1 = Nothing
    Lignemanquante
End Sub
Sub Lignemanquante()
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
Dim i As Integer
    Set FL1 = Worksheets("Feuil1") 'adapter le nom de la feuille
    NoCol = 2 'lecture de la colonne B
    Application.ScreenUpdating = False
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4) - 1
    Var = FL1.Cells(NoLig, NoCol)
       If FL1.Cells(NoLig + 1, NoCol) = FL1.Cells(NoLig, NoCol) + 100 Then
    Else
   FL1.Cells(NoLig, NoCol + 1) = "ligne manquante"
  i = i + 1
    End If
    Next
    MsgBox "vous avez: " & i & " lignes manquantes"
    Application.ScreenUpdating = True
    Set FL1 = Nothing
End Sub



il ne restera plus qu'a insérer les lignes aux endroits voulus

Voilà
0
Guy72 Messages postés 901 Date d'inscription dimanche 18 novembre 2007 Statut Membre Dernière intervention 24 avril 2024 21
5 déc. 2018 à 15:04
Bonjour,
J'ai la macro adéquat pour Excel, mais pas pour "LibreOffice".
Sub 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

Comme je l'ai mis à la fin de mon message, je me suis trompé, je voulais une macro (la même que le code ci-dessus) mais pour un fichier csv dans "LibreOffice".

Voir exemple avec Excel fichier joint avec le texte :

Comment puis-je compléter les lignes manquantes en prenant celle du dessus ou du dessous.
Ce qui doit faire au total 1440 lignes.
Sur l'exemple, il manque 21 lignes.
Voir là ou il y a les cellules en jaunes

Fichier joint (Excel):
https://www.cjoint.com/doc/18_12/HLfisc727Mb_Recuperation-des-donnees.xlsm"]https://www.cjoint.com/doc/18_12/HLfisc727Mb_Recuperation-des-donnees.xlsm
Je souhaiterais avoir la même chose, mais avec "LibreOffice" dans un fichier .csv

Fichier joint .csv pour LibreOfice
https://www.cjoint.com/doc/18_12/HLfocL43qsb_Recuperation-des-donnees.csv

J'avais mis la même question dans "LibreOffice", mais on me l'a supprimée (ça faisait doublon)
Maintenant, je ne sais plus comment m'expliquer.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
5 déc. 2018 à 15:52
Pour LibreOffice je ne peux pas t'aider!
0