Suppression de ligne suivant heure

Bonjour tout le monde

Alors voici ma question.

il s'agit, apres avoir importer un fichier texte de supprimer toute les lignes des évenements qui ont eu lieu avant 06:00:00 (l'heure se trouvant en colonne B).

les événements étant dans l'ordre, faut-il tester toutes les cellules B et supprimer celle qui sont inferieur a 06:00:00

ou trouver la premiere superieur ou egal a 06:00:00 et supprimer toutes les ligne d'avant?

(je parle de rapidité car le vrai fichier a 45000 lignes et qu'il faut en supprimer à chaque fois environ 10 000) et il y a deux feuille à faire.

et bien sur, comment faire...?

Cordialement

-- Jeu Mar 25, 2010 9:10 am --

-- Jeu Mar 25, 2010 9:13 am --

Bonjour tout le monde,

alors j'ai trouvé cela :

Sub supp()
For i = [B65000].End(xlUp).Row To 1 Step -1
    If Cells(i, 2) < "06" Then Cells(i, 2).EntireRow.Delete
Next i
End Sub

mais je me base sur le premier nombre de l'heure, ce qui ne va pas car sur la deuxieme feuille que j'ai a trier ensuite il va falloir que que supprime toutes les lignes supérieures a 05:59:59. donc il faut vraiment que je me base sur un format d'heure.

de plus je me demande toujours s'il ne serait pas plus rapide dans l'execution, au lieu de traiter toute les ligne de chercher la premiere ligne > 06:00:00 et de supprimer tout ce qui est avant (sauf ligne d'entête) et sur la deuxieme feuille faire pareil mais rechercher la derniere inferieur ou egal a 05:59:59 et supprimer toutes les ligne d'apres

Après reflexion, il y a une deuxieme difficulté, pour la premiere suppression il faut le faire sur toute les feuilles dont le nom d'onglet commence par "ABC2" et pour la deuxiéme pour les feuilles dont le nom commence par "BCD2"

je remet un fichier avec plus de données

merci pour vos reponses

Bonjour,

Quel est le bon fichier ?

retire-en un

Claude

re

desolé j'avais pas vu

j'ai trouvé ça :

Sub SupprimeLigneSi()
'(format des cellules hh:mm:ss)
Dim x As Integer
Dim Cible As Date
Application.ScreenUpdating = False
For x = Range("B65536").End(xlUp).Row To 1 Step -1
Cible = Cells(x, 2)
If Cible < #06:00:00 AM# Then Rows(x).Delete
Next x
Application.ScreenUpdating = True
End Sub

ca a l'air de marcher mais comment faire comme dit dans mon message precedent pour qu'elle s'applique a toutes les feuilles dont le nom commence par "ABC2"

re,

Peux-tu reformuler la question clairement,

"ABC2x" quel critère ?

"BCD2x" quel critère ?

Combien de feuilles en tout ?

toutes les feuilles sont-elles structurées pareille ?

Faut-il prendre en compte les dates ou seulement les heures ?

Pour éviter d'avoir à reprendre la macro, il serait bon d'avoir une feuille

avec la structure réelle (quelques lignes suffit)

Amicalement

Claude

re:

alors la macro pour supprimer toutes les ligne avant 06:00:00

se trouve sur toutes les feuilles dont le nom d'onglet commence par ABC2 , il y a ABC21 et ABC22. a savoir, c'est un fichier .txt que j'importe et s'il comporte plus de 65536 ligne, le reste se met sur ABC22. cette feuille est donc susceptible d'être vide (suivant la longueur du fichier texte importé). ABC23 n'existera surement jamais mais avec le temps, je ne peut pas etre sur.

Toute les données sont disposées exactement de la même façon.

la seule chose qui change sur BCD21 et BCD22 est que je supprime toute les lignes dont l'heure (toujours en colonne B) est supérieur a 06:00:00 et que sur ABC21 et ABC22, il ne faut pas supprimer la ligne d'entête, la premiere ligne.

on se moque de la date

mon fichier est au boulot mais si tu peut faire avec l'exemple que j'ai joint, je pense que ca irat, je ne sait pas creer la macro mais je progresse en les modifiant et en adaptant au fichier réel, et de toute façon la stucture du fichier est tres proche de l'exemple, la seule chose c'est le nbre de colonnes que je ne me rapelle pas.

j'espers que je suis clair

re,

en résumé:

ABC, on supprime heure < 6

BCD, on supprime heure > 6

il ne faut pas supprimer la ligne d'entête, la premiere ligne.

il n'y a pas de ligne d'en-tête sur ton fichier, tu veux parler de la ligne 1 ?

c'est çà ?

Tu n'as pas répondu sur le nombre de feuilles à traiter (environ)

Claude

bonsoir

oui c'est ça et :

feuille ABC2: il y en a deux (ABC21 et ABC22) a savoir que ABC21 aura toujours des valeurs mais ABC22 peut-etre vide

feuille BCD2: il y en a deux (BCD21 et BCD22) a savoir que BCD21 aura toujours des valeurs mais BCD22 peut-etre vide

oui, il faut garder la ligne1

maguetlolo

re,

feuille ABC2: il y en a deux (ABC21 et ABC22) a savoir que ABC21 aura toujours des valeurs mais ABC22 peut-etre vide

Tu veux dire sans aucune données à part les en-têtes ?

donc si vide, on passe cette feuille.

3ème rappel : combien de feuilles à traiter (environ)

Claude

re

oui, il n'y aurat peut-etre que les entêtes si le fichier texte importé tiens sur la premiere feuille

je t'ai répondu mais je pense que je ne doit pas avoir compris ta question:

Avec ABC21; ABC22;BCD21;BCD22, ça fait quatre feuilles maxi a traiter. (2 avec < à 06:00:00 ET 2 avec > à 22:00:00°

Bonjour à tous,

Ici, la macro tri la colonne "heure" sur toutes les feuilles,

colore en jaune la colonne "A" (pour tester) les lignes à supprimer

 Sub SupprLignes()
Dim Lg&, x&, i As Byte, Plg As Range
'Macros par Claude Dubois pour "maguetlolo" Excel-Pratique le 26/03/10
        Application.ScreenUpdating = False
    For i = 2 To Worksheets.Count
        With Worksheets(i)
            If .Range("a2") <> "" Then 'passe si vide
                Lg = .Range("A65536").End(xlUp).Row
                '------ tri colonne heure ------
                .Range("a1:k" & Lg).Sort Key1:=.Range("B1"), Order1:=xlAscending, _
                Header:=xlGuess, OrderCustom:=1, MatchCase:=False
                .Range("o1").Value = "06:00:00"
                x = WorksheetFunction.Match(.Range("o1"), .Range("b:b"), 1) + 1

                If Left(.Name, 3) = "ABC" Then
                    Set Plg = .Range("a2:a" & x - 1)
                Else
                    Set Plg = .Range("a" & x & ":a" & Lg)
                End If
                .Range("o1").ClearContents
                    Plg.Interior.ColorIndex = 6 'pour test (à supprimer)
                    'Plg.EntireRow.Delete        'retirer l'apostrophe pour activer
            End If
        End With
    Next
End Sub

à tester sur fichier réel

page d'accueil à placer en 1er

Amicalement

Claude

édit: tu me diras le temps de traitement

Bonjour

Merci à toi Claude, ça m'a l'air parfait. je te tiendrai au courant

Cordialement

Rechercher des sujets similaires à "suppression ligne suivant heure"