Boucle simple qui ne fonctionne pas
vincent024
Messages postés
7
Statut
Membre
-
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:
Merci de votre aide.
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
-
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
-
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.