Lignes manquantes

Résolu
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

  1. 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
    1. Contributeur
      Pour LibreOffice je ne peux pas t'aider!
      0
  2. Contributeur
    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
    1. bonjour,
      il ne manque pas la ligne 3, mais li manque 220300
      0
      1. Contributeur
        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
        1. 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