Horodatage

J

JJ

Guest
Bonjour,
J'ai un tableau Excel de 10 colonnes et une cinquantaine de lignes avec la colonne F qui sert à l'horodatage (cellule sous la forme:
JJ/MM/AAAA 2espaces HH:MM fin de la cellule tabulée à droite)
Je voudrais supprimer toutes les lignes du tableau dont l'heure est comprise entre 08:00 et 18:00 (peu importe la date) ou inversement conserver les autres horaires de soirée
Comment puis je faire?
Puis je automatiser par une macro?
La difficulté vient que les cellules colonne F contiennent la date ET l'heure
a+
Merci
 

MichelXld

XLDnaute Barbatruc
bonjour JJ , bonjour Michael

tu peux aussi tester cette macro


Dim i As Integer, x As Integer
Dim Debut As Integer
Dim Cible As Date
i = Range('F65536').End(xlUp).Row

For x = i To 1 Step -1
Debut = InStr(Cells(x, 6), ' ')
Cible = Mid(Cells(x, 6), Debut, Len(Cells(x, 6)) - Debut)

If Cible >= #8:00:00 AM# And Cible <= #6:00:00 PM# Then Rows(x).Delete
Next x



bonne soiree
MichelXld
 

Humansoft

XLDnaute Occasionnel
Bnosoir le forum, bonsoir jj

Voici une autre macro que j'ai testé::

Sub Cache()

Dim zv_Nbr As Byte
Dim zv_Deb, zv_Fin As Variant

zv_Deb = 8: zv_Fin = 18

Sheets('Feuil1').Select
For zv_Nbr = 1 To 50
If Val(Mid$(Range('F' & zv_Nbr & '').Value, 12, 4)) < zv_Deb Then
Rows(zv_Nbr & ':' & zv_Nbr).Select
Selection.EntireRow.Hidden = True
ElseIf Val(Mid$(Range('F' & zv_Nbr & '').Value, 12, 4)) = zv_Fin Then
If Val(Mid$(Range('F' & zv_Nbr & '').Value, 15, 2)) >= 1 Then
Rows(zv_Nbr & ':' & zv_Nbr).Select
Selection.EntireRow.Hidden = True
End If
ElseIf Val(Mid$(Range('F' & zv_Nbr & '').Value, 12, 4)) > zv_Fin Then
Rows(zv_Nbr & ':' & zv_Nbr).Select
Selection.EntireRow.Hidden = True
End If
Next zv_Nbr


End Sub

Bonne découverte,

Vincent
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir JJ, sigma+, MichelXLD, Humansoft,

Pour le même pris JJ ;) , voici une 4ème solution possible :
Sub Traitement()
Dim C As Range, Plage As Range
Dim T As Date
      For Each C In Range(Cells(1, 6), Cells(65536, 6).End(xlUp))
            On Error Resume Next
            T = TimeValue(C.Value)
            On Error GoTo 0
            Select Case T
            Case TimeValue('08:00:00') To TimeValue('18:00:00')
                  If Plage Is Nothing Then
                        Set Plage = C
                  Else
                        Set Plage = Union(Plage, C)
                  End If
            End Select
      Next C
      If Not Plage Is Nothing Then
            Plage.Delete
      End If
End Sub
Cordialement,
 
J

JJ

Guest
Bonsoir, j'ai écrit la macro qui fonctionne parfaitement Merci

Question importante:

-Est il possible de rajouter une condition, supprimer aussi toutes les lignes (quelque soit l'horodatage) dont la colonne D contiendrait 'JEAN' ou 'PAULINE' ? (l'horodatage est en colonne F)

fignolage : !!(pas nécessaire)
- Est il possible de copier le résultat de toutes ces lignes supprimées dans la feuille suivante du classeur pour y faire des calculs?
Si cela est possible, la macro peut elle automatiquement faire la somme de la colonne H (prix) sur la nouvelle feuille créée?

Merci beaucoup et Bon WE
JJ
 

MichelXld

XLDnaute Barbatruc
bonjour JJ , Michael , Vincent et Didier

tu peux tester

Option Explicit
Option Compare Text

Sub Test()
Dim i As Integer, x As Integer
Dim Debut As Integer
Dim Cible As Date
i = Feuil1.Range('F65536').End(xlUp).Row

For x = i To 1 Step -1
If Feuil1.Cells(x, 4) = 'JEAN' Or Feuil1.Cells(x, 4) = 'PAULINE' Then

Transfert x
Rows(x).Delete

Else

Debut = InStr(Feuil1.Cells(x, 6), ' ')
Cible = Mid(Feuil1.Cells(x, 6), Debut, Len(Feuil1.Cells(x, 6)) - Debut)
If Cible >= #8:00:00 AM# And Cible <= #6:00:00 PM# Then
Transfert x
Feuil1.Rows(x).Delete
End If

End If
Next x

i = Feuil2.Range('H65536').End(xlUp).Row
Feuil2.Cells(i + 1, 8).Formula = '=SUM(H2:H' & i & ')'
End Sub

Sub Transfert(x As Integer)
Dim i As Integer
Dim j As Byte

i = Feuil2.Range('F65536').End(xlUp).Row + 1

For j = 1 To 8
Feuil2.Cells(i, j) = Feuil1.Cells(x, j)
Next j
End Sub



bonne journée
MichelXld

Message édité par: michelxld, à: 17/09/2005 13:12
 
J

JJ

Guest
Bonjour à tous
Réponse à Michel, la macro fonctionne super bien sauf une erreur (Formula Sum.....) j'ai remplacé par FormulaLocal =somme(H... comme un calcul normal et ca marche !
Bon Dimanche et merci pour votre aide à tous
JJ
 
J

JJ

Guest
J'ai besoin (encore !!) d'un peu d'aide pour la suite d'un calcul suite à l'installation de la macro de Michel sur la feuille 2 (résultat)

J'ai réussi à y faire des tests colonne D(prénoms) et H (Horodatage) qui mettent automatiquement en caractères gras ( cel.Font.Bold=True) certaines cellules (uniquement dans les colonnes D ou F ) selon mes conditions de test et ca marche!!

Toutefois je voudrais à nouveau y supprimer toutes les lignes dont les cellules de la colonne F (Horodatage) sont en gras MAIS qui n'ont pas AUSSI la cellule de la colonne D en gras.

Comment l'écrire?
MERCI
Bon dimanche a tous
JJ
 
J

JJ

Guest
Bonjour,
Je suis arrivé à faire le test en gras par la commande IF.....Offset...Then et ca marche !!! (un coup de chance!)
Une petite question qui m'embête:
La macro générale Test() fonctionne parfaitement et chàîne les macros successives sauf la dernière qui ne s'exécute pas auto et je dois la lancer manuellement alors qu'elle est bien à la suite des 4 premières , Pourquoi?
a+
JJ
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 264
Membres
103 498
dernier inscrit
FAHDE