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

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