Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calculer horaires dans listview vba excel

2 réponses
Avatar
Gortex
Bonjour,
Je souhaite travailler sur des horaires dans une listview
pour chaque jour de la semaine dans des champs entree ;champs sortie ;champs heures de jour ;champs heures de nuit ;champs total heures de travail ;
J'ai besoin de pouvoir faire des calcules entre les champs comme avec ces trois formules
dans les champs de la listview

heures de jour
=SI(D13=0;"";SI(E13>D13;MAX(0;MIN(E13;DebN)-MAX(D13;FinN));MAX(0;DebN-MAX(D13;FinN))+MAX(0;MIN(E13;DebN)-FinN)))

heures de nuit
=SI(D13=0;"";D14-F13)

total heures de travail
=SI(ESTERREUR(E13-D13);"";(SI(ESTVIDE(D13:E13);" ";MOD(E13-D13;1))))

J'ai fais une tentative d'adition comme ca sans résulta satisfaisant
.ListItems(N).ListSubItems(6).Text = .ListItems(N).ListSubItems(6).Text + .ListItems(N).ListSubItems(8).Text

Voici ce qui charge la listview
Sub Recherche_Infos_Affichage_LVW()
Dim rs As Object
Dim DT1, dt2
Dim PartTxt, Sql, Sql1, N, L, C, d, E, NbF
On Error Resume Next
Set rs = CreateObject("ADODB.recordset")
PartTxt = TextBox1

Sql = "select * from ["XXXXXXX"] where ["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%'"
rs.Open Sql, Conn, 3, 3
If Not rs.EOF Then
rs.MoveFirst
NbF = rs.Fields.Count
NbRecord = rs.RecordCount
N = 1
Do While Not rs.EOF
With ListView1
.ListItems.Add , , rs.Fields(0)
For L = 2 To NbF

.ListItems(N).ListSubItems.Add , , rs.Fields(L - 1)
Next L
If .ListItems(N) = TextBox1 Then .ListItems(N).Bold = True
If .ListItems(N).ListSubItems(7).Text = "XXXXXXX" Then
.ListItems(N).Bold = True
.ListItems(N).ForeColor = vbGreen
For C = 1 To .ColumnHeaders.Count - 1
.ListItems(N).ListSubItems(C).Bold = True
.ListItems(N).ListSubItems(C).ForeColor = vbGreen 'couleur colonne 8
Next C
End If

If .ListItems(N).ListSubItems(7).Text = "XXXXXXX" Then
.ListItems(N).Bold = True
.ListItems(N).ForeColor = vbBlue
For d = 1 To .ColumnHeaders.Count - 1
.ListItems(N).ListSubItems(d).Bold = True
.ListItems(N).ListSubItems(d).ForeColor = vbBlue 'couleur colonne 7
Next d
End If

If .ListItems(N).ListSubItems(8).Text = "XXXXXXX" Then
.ListItems(N).Bold = True
.ListItems(N).ForeColor = vbRed
For E = 1 To .ColumnHeaders.Count - 1
.ListItems(N).ListSubItems(E).Bold = True
.ListItems(N).ListSubItems(E).ForeColor = vbRed 'couleur colonne 7
Next E
End If
End With
N = N + 1
rs.MoveNext
Loop
Label2.Caption = NbRecord & " enregistrement(s) !"
Else
MsgBox "Attention: pas d'enregistrement trouvé!!"
End If
rs.Close
Set rs = Nothing

End Sub

2 réponses

Avatar
Michel__D
Bonjour,
Le 13/04/2021 Í  20:04, Gortex a écrit :
Bonjour,
Je souhaite travailler sur des horaires dans une listview
pour chaque jour de la semaine dans des champs entree ;champs sortie ;champs
heures de jour ;champs heures de nuit ;champs total heures de travail ;
J'ai besoin de pouvoir faire des calcules entre les champs comme avec ces trois
formules
dans les champs de la listview
heures de jour
=SI(D13=0;"";SI(E13>D13;MAX(0;MIN(E13;DebN)-MAX(D13;FinN));MAX(0;DebN-MAX(D13;FinN))+MAX(0;MIN(E13;DebN)-FinN)))
heures de nuit
=SI(D13=0;"";D14-F13)
total heures de travail
=SI(ESTERREUR(E13-D13);"";(SI(ESTVIDE(D13:E13);" ";MOD(E13-D13;1))))
J'ai fais une tentative d'adition comme ca sans résulta satisfaisant
.ListItems(N).ListSubItems(6).Text = .ListItems(N).ListSubItems(6).Text +
.ListItems(N).ListSubItems(8).Text
Voici ce qui charge la listview
Sub Recherche_Infos_Affichage_LVW()
Dim rs As Object
Dim DT1, dt2
Dim PartTxt, Sql, Sql1, N, L, C, d, E, NbF
On Error Resume Next
Set rs = CreateObject("ADODB.recordset")
PartTxt = TextBox1
Sql = "select * from ["XXXXXXX"] where ["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or ["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%'"
rs.Open Sql, Conn, 3, 3
If Not rs.EOF Then
rs.MoveFirst
NbF = rs.Fields.Count
NbRecord = rs.RecordCount
N = 1
Do While Not rs.EOF
With ListView1
.ListItems.Add , , rs.Fields(0)
For L = 2 To NbF
.ListItems(N).ListSubItems.Add , , rs.Fields(L - 1)
Next L
If .ListItems(N) = TextBox1 Then .ListItems(N).Bold = True
If .ListItems(N).ListSubItems(7).Text = "XXXXXXX" Then
.ListItems(N).Bold = True
.ListItems(N).ForeColor = vbGreen
For C = 1 To .ColumnHeaders.Count - 1
.ListItems(N).ListSubItems(C).Bold = True
.ListItems(N).ListSubItems(C).ForeColor = vbGreen 'couleur colonne 8
Next C
End If
If .ListItems(N).ListSubItems(7).Text = "XXXXXXX" Then
.ListItems(N).Bold = True
.ListItems(N).ForeColor = vbBlue
For d = 1 To .ColumnHeaders.Count - 1
.ListItems(N).ListSubItems(d).Bold = True
.ListItems(N).ListSubItems(d).ForeColor = vbBlue 'couleur colonne 7
Next d
End If
If .ListItems(N).ListSubItems(8).Text = "XXXXXXX" Then
.ListItems(N).Bold = True
.ListItems(N).ForeColor = vbRed
For E = 1 To .ColumnHeaders.Count - 1
.ListItems(N).ListSubItems(E).Bold = True
.ListItems(N).ListSubItems(E).ForeColor = vbRed 'couleur colonne 7
Next E
End If
End With
N = N + 1
rs.MoveNext
Loop
Label2.Caption = NbRecord & " enregistrement(s) !"
Else
MsgBox "Attention: pas d'enregistrement trouvé!!"
End If
rs.Close
Set rs = Nothing
End Sub

Pour faire la chose tu pourrais fournir :
1) Un exemple de ce que te retourne le Recordset
2) un exemple de La valeur de ListView1.ListItems(N).ListSubItems(7).Text
et de ListView1.ListItems(N).ListSubItems(8).Text
3) Ce que tu veux faire exactement
Avatar
gortex
Le mercredi 14 Avril 2021 à 18:47 par Michel__D :
Bonjour,
Le 13/04/2021 Í  20:04, Gortex a écrit :
Bonjour,
Je souhaite travailler sur des horaires dans une listview
pour chaque jour de la semaine dans des champs entree ;champs sortie ;champs
heures de jour ;champs heures de nuit ;champs total heures de travail ;
J'ai besoin de pouvoir faire des calcules entre les champs comme avec ces
trois
formules
dans les champs de la listview
heures de jour
=SI(D13=0;"";SI(E13>D13;MAX(0;MIN(E13;DebN)-MAX(D13;FinN));MAX(0;DebN-MAX(D13;FinN))+MAX(0;MIN(E13;DebN)-FinN)))
heures de nuit
=SI(D13=0;"";D14-F13)
total heures de travail
=SI(ESTERREUR(E13-D13);"";(SI(ESTVIDE(D13:E13);"
";MOD(E13-D13;1))))
J'ai fais une tentative d'adition comme ca sans résulta satisfaisant
.ListItems(N).ListSubItems(6).Text = .ListItems(N).ListSubItems(6).Text +
.ListItems(N).ListSubItems(8).Text
Voici ce qui charge la listview
Sub Recherche_Infos_Affichage_LVW()
Dim rs As Object
Dim DT1, dt2
Dim PartTxt, Sql, Sql1, N, L, C, d, E, NbF
On Error Resume Next
Set rs = CreateObject("ADODB.recordset")
PartTxt = TextBox1
Sql = "select * from ["XXXXXXX"] where ["XXXXXXX"]
like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%' or
["XXXXXXX"] like '%" & PartTxt & "%'"
rs.Open Sql, Conn, 3, 3
If Not rs.EOF Then
rs.MoveFirst
NbF = rs.Fields.Count
NbRecord = rs.RecordCount
N = 1
Do While Not rs.EOF
With ListView1
.ListItems.Add , , rs.Fields(0)
For L = 2 To NbF
.ListItems(N).ListSubItems.Add , , rs.Fields(L - 1)
Next L
If .ListItems(N) = TextBox1 Then .ListItems(N).Bold = True
If .ListItems(N).ListSubItems(7).Text = "XXXXXXX" Then
.ListItems(N).Bold = True
.ListItems(N).ForeColor = vbGreen
For C = 1 To .ColumnHeaders.Count - 1
.ListItems(N).ListSubItems(C).Bold = True
.ListItems(N).ListSubItems(C).ForeColor = vbGreen 'couleur colonne 8
Next C
End If
If .ListItems(N).ListSubItems(7).Text = "XXXXXXX" Then
.ListItems(N).Bold = True
.ListItems(N).ForeColor = vbBlue
For d = 1 To .ColumnHeaders.Count - 1
.ListItems(N).ListSubItems(d).Bold = True
.ListItems(N).ListSubItems(d).ForeColor = vbBlue 'couleur colonne 7
Next d
End If
If .ListItems(N).ListSubItems(8).Text = "XXXXXXX" Then
.ListItems(N).Bold = True
.ListItems(N).ForeColor = vbRed
For E = 1 To .ColumnHeaders.Count - 1
.ListItems(N).ListSubItems(E).Bold = True
.ListItems(N).ListSubItems(E).ForeColor = vbRed 'couleur colonne 7
Next E
End If
End With
N = N + 1
rs.MoveNext
Loop
Label2.Caption = NbRecord & " enregistrement(s) !"
Else
MsgBox "Attention: pas d'enregistrement trouvé!!"
End If
rs.Close
Set rs = Nothing
End Sub
Pour faire la chose tu pourrais fournir :
1) Un exemple de ce que te retourne le Recordset
2) un exemple de La valeur de ListView1.ListItems(N).ListSubItems(7).Text
et de ListView1.ListItems(N).ListSubItems(8).Text
3) Ce que tu veux faire exactement
Bonjour
(1)
ID Date entrée sortie total J jour nuit
1 ven-01-janv 20:00 03:00 00:00 00h00 00h00
(2)
ListView1.ListItems(N).ListSubItems(7).Text = 20:00
ListView1.ListItems(N).ListSubItems(8).Text = 03:00
(3)
ID Date entrée sortie total J jour nuit
1 ven-01-janv 20:00 03:00 07:00 1h00 6h00
Début heurs de nuit = 21h00
Fin heurs de nuit = 6h00