Additionner 1 heure à un champ hh:mm

Résolu/Fermé
vbadebutant Messages postés 5 Date d'inscription vendredi 22 février 2013 Statut Membre Dernière intervention 28 mai 2013 - 27 mai 2013 à 18:10
 Yves - 29 mai 2013 à 17:15
Bonjour, j'écris une procédure en VBA à l'intérieur de laquelle j'essaie d'additionner 1 à un heure. Lorsque je teste ma commande directement dans Excel, elle fonctionne. Dans VBA, j'ai une erreur:
Range("P2").Select
ActiveCell.FormulaR1C1 = "=SI(D2>54;P2+'01:00';P2)"

Si je change les ' de chaque côté de 01:00 pour des ", il me donne aussi une erreur

Où est mon erreur?

Merci!

2 réponses

f894009 Messages postés 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
27 mai 2013 à 20:05
Bonjour,

Si vous voulez incrementez une cellule, il ne faut pas ecrire une formule dedans car vous ecrasez ce qui y etait ecrit.

parenthese sur FormulaR1C1: les references cellules de la formule doivent etre en R et C pas D2 ou P2 voir aide excel

excel compte en jour, pour ajouter 1 heure: 1/24

Sub test()
    If Range("D2") > 54 Then
        Range("P2") = Range("P2") + (1 / 24)
    End If
End Sub


A+
0
vbadebutant Messages postés 5 Date d'inscription vendredi 22 février 2013 Statut Membre Dernière intervention 28 mai 2013
Modifié par vbadebutant le 27/05/2013 à 20:13
Je comprends cette forme d'écritur pour le If Then mais je v=ne vois pas comment l'intégrer dans ma programmation. En fait, j'aurais dû donner plus de détails... Désolé. Voici la sous-routine au complet. D2 contient une valeur entre 0 et 60 et P2 une heure en formet hh:mm comem 09:00. Si D2 > 54, je dois ajouter une heure au champ P2 et ainsi de suite jusqu'à la fin de la colonne.

Sub M0225_Additionner_1_heure()
'
' Si la minute avant synchronisation est égale à 56, 57, 58, 59 ou 60, on doit
' ajouter 1 heure à la valeur hh:mm synchronisé
'

'
' On définit la colonne en format hh:mm
'
Columns("P:P").Select
Selection.NumberFormat = "hh:mm;@"

'
' On définit une plage de travail en copiant le contenu de la colonne E dans la colonne P
'
Range("E2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("P2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

' Si la minute synchronisée est entre 55 et 60, la minute synchronisée sera mise à zéro et on
' doit ajouter 1 heure à l'heure synchronisée (hh:mm synchronisée)

ActiveCell.FormulaR1C1 = "=SI(D2>54;P2+"01:00";P2)"
Range("P2").Select
Selection.Copy
Range("p3").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste

End Sub
0
f894009 Messages postés 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
28 mai 2013 à 07:53
Bonjour,

Sub M0225_Additionner_1_heure()
    ' Si la minute avant synchronisation est égale à 56, 57, 58, 59 ou 60, on doit
    ' ajouter 1 heure à la valeur hh:mm synchronisé
    
    ' On définit la colonne en format hh:mm
    Columns("P:P").Select
    Selection.NumberFormat = "hh:mm;@"

    ' On définit une plage de travail en copiant le contenu de la colonne E dans la colonne P
    Range("E2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("P2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                            :=False, Transpose:=False
    Application.CutCopyMode = False

    ' Si la minute synchronisée est entre 55 et 60, la minute synchronisée sera mise à zéro et on
    ' doit ajouter 1 heure à l'heure synchronisée (hh:mm synchronisée)

    'ActiveCell.FormulaR1C1 = "=SI(D2>54;P2+"01:00";P2)"
    
    If Range("D2") > 54 Then
        Range("P2") = Range("P2") + (1 / 24)
    End If
    
    Range("P2").Select
    Selection.Copy
    Range("p3").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveSheet.Paste

End Sub
0
vbadebutant Messages postés 5 Date d'inscription vendredi 22 février 2013 Statut Membre Dernière intervention 28 mai 2013
28 mai 2013 à 15:33
Bonjour, merci de m'aider. Ça ne fonctionne pas. Cette procédure place un résultat dans la cellule mais la copie, par la suite, ne fait que recopier cette valeur dans toutes les cellules. J'ai besoin de placer une instruction dans P2 et ensuite, recopier cette formule dans les cellules dessous. C'est pour cette raison que j'essayais de faire fonctionner l'instruction 'ActiveCell.FormulaR1C1 = "=SI(D2>54;P2+"01:00";P2)"

Une idée sur la façon d'y arriver?

Merci
0
f894009 Messages postés 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
28 mai 2013 à 16:36
Nous en revenons au debut vous ne pouvez pas ecrire une formule dans une cellule qui a elle meme comme parametre.

la formule est:

Range("P2").FormulaLocal = "=SI(D2>54;P2+CNUM(" & Chr(34) & "01:00" & Chr(34) & ");P2)"

mais cela ne peut pas marcher
0
J'ai finalement trouvé. Merci pour votre aide!

Où dois-je aller pour inscrire cette question comme résolue?
0