Calcul entre l'heure d'ouverture du fichier et valeur

Bonjour le forum,

Je rencontre un problème pour la mise à jour d'un calcul dont le résultat doit orienté un choix dans ma macro.

Ayant un temps d'exécution de macro relativement long, je lance le fichier la nuit (par le biais du planificateur de tache) pour qu'il recalcule quotidiennement un nombre conséquent de donnée. Je souhaite lorsque qu'il est ouvert en journée qu'il ne met pas à jour l'ensemble des données.

J'ai donc 3 cellules :

1: l'heure à laquelle le planificateur de tache ce lance (saisie manuel)

2: =HEURE(MAINTENANT())

3: = cellule 1 - cellule 2

Si la valeur de la cellule 3 "=0" alors j'exécute sinon je n'exécute pas

Cette "stratégie" fonctionne bien seulement lorsque je ré-ouvre mon fichier pour la première fois en journée, la cellule "maintenant" ne se calcul pas assez vite et du coup ma macro se lance. Par contre si j'enregistre une fois la macro exécuté, l'heure est mise à jour. Lorsque je ré-ouvre la macro ne s'exécute pas.

Mon code ci dessous,

Merci d'avance pour votre aide.

Private Sub Workbook_Open()

'autorise la mise à jour uniquement sur le fichier KPI en AUTO

If ThisWorkbook.Name = "KPI.xlsm" Then

Sheets("KPI").Select

Application.Calculate

Range("BA1").Select

ActiveCell.FormulaR1C1 = "=HOUR(NOW())"

Range("bb2").Select

ActiveCell.FormulaR1C1 = "=NOW()"

Range("BC1").Select

ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"

Range("BC2").Select

Application.Calculate

'lance la macro en auto uniquement si l'heure de la journée correspond à la cellule KPI - BC1 (doit être en adéquation avec le planificateur de tâche)

If Range("bc1") = 0 Then

'execution macro de mise à jour

Call import

ActiveWorkbook.Save

'sauvegarde mensuelle (si dernier jour du mois enregistrement sous kpi)

If Range("bc2") = 2 Then

Dim chemin As String, fichier As String

chemin = ThisWorkbook.Path

fichier = Range("ba3") & ".xlsm"

ActiveWorkbook.SaveAs Filename:=fichier

End If

Application.Quit

End If

Else

Application.Quit

End If

End Sub

Bonjour,

Tu forces un recalcul en début de macro, suivi d'un test pour savoir si elle doit se poursuivre ou non...

NB- Je conseille d'utiliser les balises Code pour rendre ton code mieux lisible dans ton post... (une fois fait, je lirai peut-être, quoiqu'avec le nombre de Select que j'ai déjà aperçu au passage, ce n'est pas sûr, je suis déjà saturé pour aujourd'hui de code mal écrit...)

Cordialement.

MFerrand,

Etant novice sur les forums et débutant en VBA je m'excuse de ne pas être parfait sur la présentation et "l'écriture".

Ne demandant que à m'améliorer je suis venu chercher de l'aide et des conseils sur le forum.

Suite à vos remarques, j'espère avoir mis les "balises codes" correctement. (code ci dessous)

Pour revenir à mon problème, effectivement j'ai forcé un recalcul, j'ai également tenté de réécrire les formules directement par l'intermédiaire de la macro en espérant que l'heure "instantané" soit prise en compte. Forcé de constaté l'échec de mes tentatives, j'espère pouvoir être aiguillé sur une solution.

J'espère que vous aurez un peu de temps à consacrer à ma problématique, car ca fait plusieurs semaines que j'essaie divers solutions sans résultat.

Cordialement

Bonne journée

Private Sub Workbook_Open()

'autorise la mise à jour uniquement sur le fichier KPI en AUTO

If ThisWorkbook.Name = "KPI.xlsm" Then

Sheets("KPI").Select

Application.Calculate

Range("BA1").Select

ActiveCell.FormulaR1C1 = "=HOUR(NOW())"

Range("bb2").Select

ActiveCell.FormulaR1C1 = "=NOW()"

Range("BC1").Select

ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"

Application.Calculate

'lance la macro en auto uniquement si l'heure de la journée correspond à la cellule KPI - BC1 (doit être en adéquation avec le planificateur de tâche)

If Range("bc1") = 0 Then

'execution macro de mise à jour

Call import

ActiveWorkbook.Save

'sauvegarde mensuelle (si dernier jour du mois enregistrement sous kpi)

Else

Application.Quit

End If

End Sub

Voilà ta macro :

  • sous balises Code,
  • indentée !
  • légèrement arrangée mais sans modification sur le fond...
Private Sub Workbook_Open()
    Dim chemin As String, fichier As String
    If ThisWorkbook.Name = "KPI.xlsm" Then
        With Worksheets("KPI")
            .Range("BA1").Formula = "=HOUR(NOW())"
            .Range("BB2").Formula = "=NOW()"
            .Range("BC1").Formula = "=BA1-BB1"
            .Calculate
            If .Range("BC1") = 0 Then
                Import
                ThisWorkbook.Save
                If .Range("BC2") = 2 Then
                    chemin = ThisWorkbook.Path & "\"
                    fichier = .Range("BA3") & ".xlsm"
                    ThisWorkbook.SaveAs chemin & fichier
                End If
                Application.Quit
            End If
        End With
    Else
        Application.Quit
    End If
End Sub

Je ne me prononcerais pas sur la cohérence de la condition, les éléments font en partie défaut, mais je peux dire que si je dois opérer à une heure précise, j'utiliserais Application.OnTime pour programmer à l'ouverture l'heure à laquelle j'exécuterais la macro...

Par contre le dernier Application.Quit me paraît incohérent ! On fait un enregistrement (de sauvegarde ?) du classeur. Ce nouveau classeur contiendra la macro, et chaque fois que l'on essaiera de l'ouvrir, il se refermera ! (sauf à l'ouvrir en désactivant les macros)...

Cordialement.

Tout d'abord, un grand merci.

Ca à l'air de fonctionner, en modifiant manuellement l'heure du PC. test final demain matin.

Pour info, le second enregistrement permet de faire une sauvegarde en fin de mois dans un autre répertoire.

Encore Merci

Rechercher des sujets similaires à "calcul entre heure ouverture fichier valeur"