Insertion automatique de ligne vide entre plusieurs heures

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

johanexcel

XLDnaute Nouveau
Bonjour à tous, me voila tout nouveau sur ce forum! J'espère donc y trouver mon bonheur.

Je vous explique. J'ai un tableau contenant une suite d'heure au format hh:mm:ss dans la colonne A.
Normalement chaque ligne devrais faire +1min par rapport à la précédente(cf exemple).
Je voudrais que lorsque la différence entre 2 ligne n'est plus égale à une minute, une ligne vide s'insere automatiquement entre les deux.
Je sais que sa se gère par macro j'ai vu des sujet semblable mais ils ne géraient pas le problème de l'heure en plus.
J'espère avoir été claire dans mon explication


Merci d'avance!!
 

Pièces jointes

Re : Insertion automatique de ligne vide entre plusieurs heures

Bonjour johanexcel,

Bienvenue sur XLD,

peut-être (mais ça crée plein de lignes)

Code:
Sub InserLigne()
Dim i As Long
    For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
        If Range("A" & i).Value <> "" And Range("A" & i - 1).Value <> "" Then
        If Range("A" & i).Value - Range("A" & i - 1).Value > TimeValue("00:01:00") Then
        Rows(i).Insert
        End If
        End If
    Next i
End Sub
 
Re : Insertion automatique de ligne vide entre plusieurs heures

Bonjour johanexcel, Re Toto 🙂
Une proposition qui insère autant de ligne qu'il manque de minute (sans prendre en considération les secondes...)
VB:
Private Sub CommandButton1_Click()
Dim i&, F&, D&
For i = Cells(Rows.Count, 1).End(3).Row To 2 Step -1
    If Cells(i, 1) <> "" Then
        F = CLng(Split(Format(Cells(i, 1).Value, "hh:mm:ss"), ":")(1))
        D = CLng(Split(Format(Cells(i - 1, 1).Value, "hh:mm:ss"), ":")(1))
        If F > (D + 1) Then Rows(i).Resize(Int(F - (D + 1))).Insert
    End If
Next i
End Sub
Cordialement
 

Pièces jointes

Re : Insertion automatique de ligne vide entre plusieurs heures

Merci à vous deux pour vos réponse si rapide! La solution de Efgé me convient encore mieu que prévu!
Je vais tous de meme vous demandez deux dernières petites choses:
- Comment faire pour que la macro de Efgé ne soit active que sur la feuille 1 par exemple
- Et comment faire pour que la macro s'applique automatiquement sans l'appui sur le bouton( à l'ouverture du fichier par exemple)


Encore merci les pros!
 
Re : Insertion automatique de ligne vide entre plusieurs heures

Re à tous
Pour répondre aux questions, à mettre dans le module ThisWorkbook:
VB:
Private Sub Workbook_Open()
Dim i&, F&, D&
Application.ScreenUpdating = False
With Sheets("Feuil1")
    .Activate
    For i = .Cells(Rows.Count, 1).End(3).Row To 2 Step -1
        If .Cells(i, 1) <> "" Then
            F = CLng(Split(Format(.Cells(i, 1).Value, "hh:mm:ss"), ":")(1))
            D = CLng(Split(Format(.Cells(i - 1, 1).Value, "hh:mm:ss"), ":")(1))
            If F > (D + 1) Then .Rows(i).Resize(Int(F - (D + 1))).Insert
        End If
    Next i
End With
Application.ScreenUpdating = True
End Sub
Cordialement
 
Re : Insertion automatique de ligne vide entre plusieurs heures

Re
A bien y réfléchir, ma proposition ne vas pas du tout..😱
Il n'y aura pas de gestion des heures entre 59 minutes et 01 par exemple.
Il faudrait vraiment gérer des heures et non valeurs.
Ca, je ne sais pas faire...
Désolé
Je reste à l'écoute du fil pour voir la solution.
Cordialement
 
Re : Insertion automatique de ligne vide entre plusieurs heures

Je suis vraiment désolé mais je suis pire que débutant!
le fichier que je vous ai fournit tout à l'heure était juste un exemple.
Le dernier code que vous m'avez fournit, je peux bien le faire fonctionner un autre classeur?
Comment dois-je procéder?

Vous m'avez dis "a mettre dans Workbook". Je vais dans mon fichier excel, je crée une macro et je colle votre code.

J'imagine que ce n'est pas de cette façon...
 
Re : Insertion automatique de ligne vide entre plusieurs heures

Zut j'ai pas vu votre message entre temps. En tout cas dans ce que je veux faire je n'est pas besoin de gerer les heures. Je veux juste que si il y un un "saut" de minute, une ligne soit insérée. Si la soustraction des minutes est supérieur à 1 alors on insère une ligne. Dans le fichier excel que je fournit, je récupere l'information minute. Il y a t'il pas une solution en travaillant avec des soustractions?
 

Pièces jointes

Dernière édition:
Re : Insertion automatique de ligne vide entre plusieurs heures

Re
Mon dernier code est à mettre dans le module ThisWorkbook.
Alt+11 dans le projet VBA il ne faut pas le mettre dans un module standart mais dans le module ThisWorkbook
Cela fonctionnera dans tous les classeurs du moment qu'il y a une feuille nommée "Feuil1" et, evidemment, que les données en colonne A soient des heures de types hh:mm:ss
Pour le décalage des heures :
Si l'on passe de 02:59:00 à 03:01:00 la ligne ne sera pas crée.
Je regarde mais, comme dis précédemment, pour l'instant je ne sais pas...
Cordialement
 
Re : Insertion automatique de ligne vide entre plusieurs heures

Bonjour à tous!

Alors personne d'autre ne peux m'aider dans mon problème?

Edgé a déja fait une bonne partie. Mais effectivement il faudrais gérer des heures et non des valeurs pour que le décalage soit pris en compte dans ce cas la par exemple: 09:58:59
10:00:00


Help me please!!
 

Pièces jointes

Re : Insertion automatique de ligne vide entre plusieurs heures

Bonjour johanexcel, le fil,
Bon, une proposition pas très jolie, jolie, mais qui semble fonctionner...
Le code est dans le bouton mais il est prévu pour être mis dans le ThisWorkBook.
VB:
Private Sub CommandButton1_Click()
Dim i&, j&, k&, F&, D&
Dim T(159) As Long
k = 0
For i = 1 To 2
    For j = 0 To 59: T(k) = j: k = k + 1: Next j
Next i
Application.ScreenUpdating = False
With Sheets("Feuil1")
    .Activate
    For i = .Cells(Rows.Count, 1).End(3).Row To 2 Step -1
        If .Cells(i, 1) <> "" And .Cells(i - 1, 1) <> "" Then
            F = CLng(Split(Format(.Cells(i, 1).Value, "hh:mm:ss"), ":")(1))
            D = CLng(Split(Format(.Cells(i - 1, 1).Value, "hh:mm:ss"), ":")(1))
            For j = LBound(T) To UBound(T) - 1
                If D = T(j) And F <> T(j + 1) Then
                    k = j
                    Do
                        k = k + 1
                        Rows(i).Insert
                    Loop Until F = T(k + 1)
                    Exit For
                End If
            Next j
        End If
    Next i
End With
Application.ScreenUpdating = True
End Sub
Cordialement
 

Pièces jointes

Re : Insertion automatique de ligne vide entre plusieurs heures

Merci de vous y ètre penchez dessus!

Effectivement le code semble fonctionner avec ce petit exemple. Pour le tester vraiment il faut que je le met dans mon fichier final qui comprend pas loin de 2000lignes et donc 2000h.

Je colle bien le code dans le wokrbook de mon fichier mais il y a une érreure :"erreure d'exécution 9, l'indice n'appartient pas a la sélection".


Savez vous d'ou cela peut venir?

Merci d'avance
 
Re : Insertion automatique de ligne vide entre plusieurs heures

Oui Oui ma feuille à bien le même nom que dans le code.

Regardez par exemple, quand je met votre code dans cette feuille qui est presque mon fichier final et bien le programme plante...
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour