Boucle simple qui ne fonctionne pas

vincent024 Messages postés 7 Statut Membre -  
vincent024 Messages postés 7 Statut Membre -
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. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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
  2. vincent024 Messages postés 7 Statut Membre
     
    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