Calculer horaires dans listview vba excel

Le
Gortex offline Hors ligne
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
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Michel__D
Le #26571850
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
gortex offline Hors ligne
Le #26571932
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
Poster une réponse
Anonyme