Problème de comparaisons d'heures

Bonjour,

Mon problème est celui-ci :

Je dois savoir si entre la première occurrence "STATIONPLEINE" de chaque station (colonne C) et la première "STVIDE" il y a pas plus de deux heures de délais sinon j'ai une erreur de traçage. Un de mes problèmes est que les autres "STATIONPLEINE" parasitent car le départ est à l'heure de la première occurrence sans tenir compte des heures des autres.

J'espère avoir été le plus clair possible.

Je n'arrive pas à trouver la solution de ce problème.

Merci pour votre aide.

Alain

10classeur4.xlsx (12.14 Ko)

Bonjour

Si j'ai bien compris

voir ci-joint

4horaires.xlsx (16.41 Ko)

Bonjour le fil, bonjour le forum,

Arf ! Chris m'a poté au coiffeau !... Tans pis, j'envoie quand même :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim J As Integer 'déclare la variable J (incrément)
Dim LD As Integer 'déclare la variable LD (Ligne de Début)
Dim LF As Integer 'déclare la variable LF (Ligne de fin)

Set O = Worksheets("Feuil1") 'définit l'onglet O
O.Cells.Interior.ColorIndex = xlNone 'aucune couleur dans les cellules de l'onglet O
TV = O.Range("B3").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    D(TV(I, 3)) = "" 'alimente le dictionnaire avec les données de la colonne 3 du tableau des valeur (=> colonne D)
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les élément du tableau temporaire TMP
    For I = 1 To UBound(TV, 1) 'boucle 2 : boucle sur toutes les lignes I du tableau des valeurs TV
        'condition si la donnée ligne I colonne 3 de TV est égale à l'lélément J de TMP et si la donnée ligne I colonne 1 de TV vaut "STATIONPLEINE"
        If TV(I, 3) = TMP(J) And TV(I, 1) = "STATIONPLEINE" Then
            LD = I + 2 'définit la ligne de départ LD (+2 car le tableau commence à la ligne 3)
            'définit la ligne de fin LF (recherche "STVIDE" dans la colonne B après la ligne de début)
            LF = O.Columns(2).Find("STVIDE", O.Cells(LD, "B"), xlValues, xlWhole).Row
            If (O.Cells(LF, "F") - O.Cells(LD, "F")) * 3600 > 300 Then 'condition 2 : si la différence est supérieure à deux heures
                O.Cells(LD, "B").Resize(1, 5).Interior.ColorIndex = 4 'colore la ligne de début en vert
                O.Cells(LF, "B").Resize(1, 5).Interior.ColorIndex = 4 'colore la ligne de fin en vert
                Exit For 'sort de la boucle 2
            End If 'fin de la condition 2
        End If 'fin de la condition 1
    Next I 'prochaine ligne de la boucle 2
Next J 'prochain élément de la boucle 1
End Sub

[Édition]

Moi les gens qui se montrent soit disant dans la lune et qui pondent pareilles formules me stupéfient. C'est femme tout crème aux œufs voire épouse tout flan... Je suggère qu'on les expédie sur une autre planète tellement ils sont énervants...

Bonjour 78chris

Merci pour ta formule qui marche très bien .

de mon coté j'ai continué à me creuser la tête et j'ai trouvé une macro ; c'est peut-être pas la meilleure mais elle marche

Bonne journée.

Sub calcul_delta()

    Sheets("importation").Activate
    Set myrange = Range("D:D")
    stationpleine = 0

    derligne = Range("B65535").End(xlUp).Row

        For x = 1 To derlign

            If Cells(x, 2) Like "STATIONPLEINE" Then
                stationpleine = 1
                station = Cells(x, 4).Value
                HeureStationPleine = Cells(x, 6).Value
                nboccurrence = WorksheetFunction.CountIf(myrange, station)
                    For I = 0 To nboccurrence
                        If Cells(x + I, 2).Value Like "STVIDE" Then
                            heurestvide = Cells(x + I, 6).Value
                            Delta = heurestvide - HeureStationPleine
                            Cells(x + I, 8) = Delta
                            Exit For
                        End If
                    Next I
                x = x + I
            End If

        Next x

End Sub

Bonjour ThauThème

Merci pour ta réponse .

Je vais l'essayer de suite.

Que penses tu de ma macro, moins élaborée que la tienne ??

Bonne journée

Alain

Rechercher des sujets similaires à "probleme comparaisons heures"