Tout d'abord, laisser moi vous expliquer la situation problèmatique à laquelle je fis face :

Je développe une application en VBA sous Excel de gestion de commande de matériel informatique... bref, ça à la limite on s'en tape !
Le problème était que mon application nécessite un nombre important de date à gérer, dont un grand nombre doit être saisie à la main par l'utilisateur via un formulaire. Ces données étaient par la suite recopiées dans ma feuille de calcul... Et là c'était le drame.

En effet, nos amis anglo-saxons inversent le mois et le jour pour des dates du style 07/06/2008. Chez nous ceci équivaut au 7 Juin 2008, mais outre-manche et outre-atlantique c'est le 6 Juillet 2008.

Lors du remplissage d'une ligne vide, l'insertion se faisait (le plus souvent) correctement, mais lors de la modification d'une ligne du classeur (je repasse par mon formulaire) le mois et le jour se retrouvaient inversés, et ce pour chaque modification successive ! Embêtant un peu ...

Même en changeant le format de la cellule concerné par la date foireuse ou en changeant les paramètres régionaux, ça ne marchait pas comme je voulais.
Au bout d'un moment de réflexion je suis parvenu à ça :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
If FormulaireEdition.suiviDateDeadline.Text <> "" Then
        MyDateToFormat = CStr(FormulaireEdition.suiviDateDeadline.Text)
        MyDateDay = Left(FormulaireEdition.suiviDateDeadline.Text, 2)
        MyDateMonth = Mid(FormulaireEdition.suiviDateDeadline.Text, 4, 2)
        MyDateYear = Right(FormulaireEdition.suiviDateDeadline.Text, 2)
        Cells(RowID, "P").Value = CDate(MyDateMonth & "/" & MyDateDay & "/" & MyDateYear)
        Cells(RowID, "P").Value = Format(Cells(RowID, "P").Value, "dd/mm/yy")
    End If
Je récupère sous la forme de chaîne ma date entrée dans le formulaire, et, avant de l'inscrire directement au format Français (format demandé dans le formulaire), je dissèque ma chaîne grace aux fonctions de traitement de String left, mid et right.
Je récupère le jour, le mois et enfin l'année de cette manière.
Je reconstruis ensuite une date au format GB/US.
Et enfin, je formate ma cellule pour obtenir le format souhaité.

Du coup, ça marche, enfin !
Je peux faire 37 modification de ma ligne de commande de matériel les doigts dans le nez sans me soucier du format de ma date !

Je voulais faire partager cette petite chose qui souvent représente une montagne pour beaucoup de gens, et pour laquelle peu de solutions adéquates se trouvent sur la Toile.

Sur ce, à une prochaine, et bon code !

Momostovoi