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. 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
  2. bonjour,
    il ne manque pas la ligne 3, mais li manque 220300
    0
    1. 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,
        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