Additionner 1 heure à un champ hh:mm

Résolu
vbadebutant Messages postés 5 Statut Membre -  
 Yves -
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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. vbadebutant Messages postés 5 Statut Membre
       
      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
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    3. vbadebutant Messages postés 5 Statut Membre
       
      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
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
  2. Yves
     
    J'ai finalement trouvé. Merci pour votre aide!

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