Boucle simple qui ne fonctionne pas

vincent024 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
vincent024 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
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.
A voir également:

2 réponses

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