Menu

Lignes manquantes

Messages postés
490
Date d'inscription
dimanche 18 novembre 2007
Dernière intervention
6 décembre 2018
-
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
Afficher la suite 

Votre réponse

4 réponses

Messages postés
23175
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
13 décembre 2018
0
Merci
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
Guy72
Messages postés
490
Date d'inscription
dimanche 18 novembre 2007
Dernière intervention
6 décembre 2018
-
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
Commenter la réponse de Vaucluse
Messages postés
490
Date d'inscription
dimanche 18 novembre 2007
Dernière intervention
6 décembre 2018
0
Merci
bonjour,
il ne manque pas la ligne 3, mais li manque 220300
Commenter la réponse de Guy72
Messages postés
5606
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
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à
Commenter la réponse de cs_Le Pivert
Messages postés
490
Date d'inscription
dimanche 18 novembre 2007
Dernière intervention
6 décembre 2018
0
Merci
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.
cs_Le Pivert
Messages postés
5606
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
Pour LibreOffice je ne peux pas t'aider!
Commenter la réponse de Guy72