Calcul de temps avec des 10 éme de secondes

JBARBE

XLDnaute Barbatruc
Bonjour,
Je reviens vers vous pour le calcul de temps avec des 10 éme de secondes !
Merci à l'avance et bonne soirée !
ecart.jpg
 

Pièces jointes

  • Ecart.xls
    66 KB · Affichages: 28

job75

XLDnaute Barbatruc
Bonjour à tous,

Voyez le fichier joint et ce code :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 5 Then Exit Sub
Cancel = True
[B:B].Interior.ColorIndex = xlNone 'RAZ
[E:E].ClearContents 'RAZ
With Cells(Target.Row, 2)
    If Not .Text Like "##:##:##*" Then Exit Sub
    .Interior.ColorIndex = 6 'jaune
    With Target.Resize([B:B].Find("", .Cells, xlValues).Row - Target.Row)
        .FormulaR1C1 = "=RC2-R" & Target.Row & "C2"
        .Value = .Value 'supprime les formules
    End With
End With
End Sub
A+
 

Pièces jointes

  • Ecart(1).xls
    64 KB · Affichages: 14

JBARBE

XLDnaute Barbatruc
Bonjour job 75
Pas mal ça !
Le double clic, il fallait y penser !
J'ai neutralisé des lignes de code dont je n'ai pas besoin !
Merci beaucoup !
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 5 Then Exit Sub
Cancel = True
'[B:B].Interior.ColorIndex = xlNone 'RAZ
'[E:E].ClearContents 'RAZ
With Cells(Target.Row, 2)
    If Not .Text Like "##:##:##*" Then Exit Sub
    '.Interior.ColorIndex = 6 'jaune
    With Target.Resize([B:B].Find("", .Cells, xlValues).Row - Target.Row)
        .FormulaR1C1 = "=RC2-R" & Target.Row & "C2"
        .Value = .Value 'supprime les formules
    End With
End With
End Sub
 

Modeste geedee

XLDnaute Barbatruc
Bonjour job 75
Pas mal ça !
Le double clic, il fallait y penser !
:rolleyes: comme dit précédemment , je reste persuadé que les données en colonne 2 ne sont pas du bon type !!! (texte avec caractère invisible)

VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 5 Then Exit Sub
Cancel = True
[B:B].Interior.ColorIndex = xlNone 'RAZ
[E:E].ClearContents 'RAZ
i = 1
While Cells(i, 2) <> 0
Cells(i, 5) = Cells(1, 2) - Cells(i, 2)
i = i + 1
Wend
End Sub
une validation dans la barre de formule pour chaque cellule de la colonne 2
permet au code de fonctionner sans erreur
 

job75

XLDnaute Barbatruc
:rolleyes: comme dit précédemment , je reste persuadé que les données en colonne 2 ne sont pas du bon type !!! (texte avec caractère invisible)
Il n'y a pas de "caractère invisible", simplement les données en colonne B sont des textes (importés probablement).

Bien sûr si on les revalide on obtient des nombres.

Mon code fonctionne dans les 2 cas, textes ou nombres.
 

Modeste geedee

XLDnaute Barbatruc
Il n'y a pas de "caractère invisible", simplement les données en colonne B sont des textes (importés probablement).
Bien sûr si on les revalide on obtient des nombres.
Mon code fonctionne dans les 2 cas, textes ou nombres.
Oui nous sommes d'accord ...
mais tu passes par une fonctionnalité de feuille de calcul ...
.FormulaR1C1 = "=RC2-R" & Target.Row & "C2"
sans cette ligne, le code VBA ne sais pas interpréter les valeurs de la colonne 2
et
If Not .Text Like "##:##:##*" Then Exit Sub
devient inutile !!!
 

JBARBE

XLDnaute Barbatruc
Oui nous sommes d'accord ...
mais tu passes par une fonctionnalité de feuille de calcul ...
.FormulaR1C1 = "=RC2-R" & Target.Row & "C2"
sans cette ligne, le code VBA ne sais pas interpréter les valeurs de la colonne 2
et
If Not .Text Like "##:##:##*" Then Exit Sub
devient inutile !!!
Re,
Dans cette démonstration les activell.offset(0,-3) et activecell.offset(-1,-3) comprenaient des valeurs de temps et non de texte !
Ainsi il a fallut recourir à une formule pour effectuer un calcul ! Le VBA sans formule bug !
Merci et bonne journée !

ecartB.jpg
 

JBARBE

XLDnaute Barbatruc
Il n'y a pas de "caractère invisible", simplement les données en colonne B sont des textes (importés probablement).

Bien sûr si on les revalide on obtient des nombres.

Mon code fonctionne dans les 2 cas, textes ou nombres.
Re,
Les données proviennent de la saisie dans une boite de dialogue !
Mais avant la boite de dialogue, je saisissais directement dans Excel et il y avait le même probléme !
Merci à tous de s'être penché sur mon probléme si particulier et bonne journée !
 

Dranreb

XLDnaute Barbatruc
C'est sûr, en VBA c'est pratiquement aussi compliqué à convertir en Double qu'à restituer en String depuis un Double !
VB:
Sub test()
Dim Txt As String, Temps As Double
Txt = "00:00:30,5"
Temps = TimeValue(Left(Txt, 5)) + Mid$(Txt, 7) / 86400
MsgBox Format(Temps, "hh:mm:") & Format(Temps * 86400 - Int(Temps * 1440) * 60, "00.00")
End Sub
 

Discussions similaires