Boucle simple qui ne fonctionne pas

Bonjour,

Je commence la programmation de macro sur Excel et je ne trouve pas comment faire ma tâche qui semble très simple.

J'aimerais mesurer l'intervalle de temps entre le moment où la valeur à la colonne P, à ligne i, passe de 1 à 0.

Le temps se trouve à la colonne B.

J'ai un problème avec la saisie des données ainsi qu'avec mes conditions "if".

Voici le code:

Public Sub Temps()
Dim i As Long
Dim time_start As Date, time_end As Date

time_start = 0 '12:00:00 AM
time_end = 0 '12:00:00 AM

Range("P6").Select 'First line of data
i = Range("P6").Row 'Firt line

Do Until IsEmpty(ActiveCell) And time_end = 0 And time_start = 0
    
    If Range("P" & i).Value = 1 Then
       time_start = Range("B" & i).Value
    End If
    
    If Range("P" & i).Value = 0 and Not(time_start =0)Then
        time_end = Range("B" & i).Value
    End If
    i = i + 1
    
Loop

Range("U6").Value = time_end - time_start

End Sub


Merci de votre aide.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  1. Bonjour,

    Merci beaucoup pour ton aide.

    J'aimerais juste savoir comment je pourrais ajouter un lien sur le nom du fichier. Par exemple, le fichier serait sur le bureau, son nom serait "test.xlsx" et la feuille serait "feuil1".

    Merci de votre aide.
    0
    1. Modérateur
      Bonjour,

      Que donnerait quelque chose de ce genre :
      Sub getDelai()
      Dim valData As Integer
      Dim valTime As Date
      
      Dim maFeuille As Worksheet
      Set maFeuille = ActiveSheet
      
      Dim colTime As Integer
          colTime = 2 'B
      Dim colData As Integer
          colData = 16 'P
      Dim Derniere_Ligne As Long
      
      Dim time_start As Date
      Dim time_end As Date
      
      Derniere_Ligne = maFeuille.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
      
      'Boucle de la ligne 6 à -> Derniere_Ligne
      For i = 6 To Derniere_Ligne
      
       valData = maFeuille.Cells(i, colData).Value
       valTime = maFeuille.Cells(i, colTime).Value
       If (Not IsEmpty(valData)) Then
          If ((valData = 1 And time_start = "00:00:00")) Then time_start = (valTime)
          If (valData = 0 And Not time_start = "00:00:00" And time_end = "00:00:00") Then
            time_end = (valTime)
            'Debug.Print ("time_start :" & time_start & "  - time_end:" & time_end)
            maFeuille.Range("U6").Value = timeDifinHMS(time_start, time_end)
            Exit For
          End If
       End If
      Next
      End Sub
      Function timeDifinHMS(dtmSart, dtmEnd)
      
       Dim intSeconds As Integer
       Dim intHours As Integer
       Dim intMinutes As Integer
       
       Dim result As Date
       
       intSeconds = DateDiff("s", dtmSart, dtmEnd)
       intHours = intSeconds \ 3600
       intMinutes = intSeconds \ 60 Mod 60
       intSeconds = intSeconds Mod 60
      
        result = CDate(intHours & ":" & intMinutes & ":" & intSeconds)
        timeDifinHMS = result
      End Function
      
      

      1