Lignes manquantes

Résolu
Guy72 Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   -  
Guy72 Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   -
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. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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. Guy72 Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   25
       
      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. Guy72 Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   25
     
    bonjour,
    il ne manque pas la ligne 3, mais li manque 220300
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  4. Guy72 Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   25
     
    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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Pour LibreOffice je ne peux pas t'aider!
      0