Jim a besoin d’avancer la date dans une cellule particulière d’un mois à minuit le 14/15 de chaque mois (00:00:00 le 15), et il s’est demandé comment cela pouvait être fait.

Comme pour de nombreux problèmes dans Excel, la réponse dépend de la nature des données impliquées et de ce que vous voulez faire exactement. Si la date dans la cellule est la date du jour et que vous voulez simplement que la cellule affiche le mois en cours jusqu’au 14, puis le mois suivant, vous pouvez utiliser une formule telle que la suivante:

=CHOOSE(IF(DAY(NOW())>14,MONTH(NOW())+1,MONTH(NOW())), "January","February","March","April","May","June", "July","August","September","October","November", "December","January")

Cette formule renvoie le nom d’un mois, pas une date. Si vous préférez avoir une date renvoyée, vous pouvez utiliser cette formule:

=IF(DAY(NOW())>14,DATEVALUE(IF(MONTH(NOW())=12,1, MONTH(NOW())+1) & "/" & DAY(NOW()) & "/" & IF(MONTH( NOW())=12,YEAR(NOW())+1,YEAR(NOW()))),NOW())

Ces deux formules tiennent compte du «bouclage de fin d’année» lorsque vous avancez de décembre à janvier. Une version plus courte de cette dernière formule peut être créée si vous utilisez la fonction DATE au lieu de la fonction DATEVALUE:

=DATE(YEAR(NOW()),MONTH(NOW())+((DAY(NOW())>14)*1),1)

Cette formule, contrairement à l’exemple DATEVALUE, renvoie toujours une date correspondant au premier jour d’un mois donné.

Si vous voulez vraiment avancer la valeur d’une date particulière dans une cellule, vous devez utiliser une macro pour effectuer la tâche. En outre, vous devez vous assurer que la macro ne s’exécute qu’une fois par mois, à une heure donnée, un jour particulier. Par exemple, si vous souhaitez que la macro s’exécute à 00:00:00 le 15 de chaque mois, vous devez configurer la macro pour qu’elle vérifie la date et l’heure, puis s’exécute à cette date et heure particulières. Vous devez également vous assurer que le classeur contenant la macro était ouvert à cette date et heure.

La macro suivante récupère la date dans une cellule et l’augmente d’un mois. La macro suppose que vous disposez d’une plage nommée, DateCell, qui fait référence à la cellule à mettre à jour.

Sub IncreaseMonth()

Dim dDate As Date     dDate = Range("DateCell").Value     Range("DateCell").Value = _       DateSerial(Year(dDate), _       Month(dDate) + 1, Day(dDate))

End Sub

Pour vous assurer que la macro s’exécute au moment approprié, vous auriez besoin d’une autre macro. La macro suivante est conçue pour être exécutée chaque fois que le classeur est ouvert:

Private Sub Workbook_Open()

If Day(Now) = 14 Then     Application.OnTime ("23:59:59"), "IncreaseMonth"

End If End Sub

Notez que cette macro particulière définit la méthode OnTime afin qu’il exécute la macro AugmentationMonth à 23:59:59 le 14. Cette date et cette heure ont été choisies car elles sont plus faciles à attraper que 00:00:00 le 15.

N’oubliez pas que la macro AugmentationMonth ne s’exécutera que si vous ouvrez le classeur le 14 et laissez le classeur ouvert jusqu’au 15.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (2180) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

lien: / excelribbon-Automatically_Advancing_by_a_Month [Avance automatique d’un mois].