Cette question est un peu ancienne, mais à ce jour elle ne semble pas avoir de réponse. J'ai également vu des questions similaires sur un certain nombre de sites, mais je n'ai pas encore trouvé de réponse impliquant uniquement des fonctions Excel intégrées. Cependant, il est assez facile de résoudre ce problème avec VBA. Vous n'avez même pas besoin de savoir comment programmer pour ce faire, car la fonction requise est si simple.
Avec votre classeur ouvert, appuyez simplement sur Alt + F11 (pour ouvrir l'éditeur VBA) puis cliquez sur l'élément de menu Insérer > Module
Dans le nouveau module VBA, entrez ce qui suit:
Public Function FMT$(ByVal Value, ByVal strFormat)
FMT = VBA.Format$(Value, strFormat)
End Function
Ce que cela fait, c'est simplement utiliser la propre Format
fonction de VBA au lieu de la TEXT
fonction d'Excel . C'est exactement ce que vous voulez.
Cette nouvelle fonction formatera n'importe quelle date (ou nombre) selon la chaîne de format que vous spécifiez. Il interprétera la chaîne de formatage en utilisant la notation standard ( en-US ), quels que soient les paramètres régionaux du système d'exploitation.
Pour l'utiliser dans votre classeur, tapez simplement =FMT(A1, "yyyymmdd_hhss")
au lieu de =TEXT(A1, "yyyymmdd_hhss")
. (Bien sûr, vous pouvez modifier la référence de cellule et la chaîne de formatage si nécessaire.)
Au fait, vous pouvez nommer la fonction comme vous le souhaitez. J'ai choisi FMT
parce que c'était court et parce que la fonction peut formater des nombres et des dates. Mais vous pouvez choisir quelque chose de plus descriptif si vous le souhaitez. N'oubliez pas d'utiliser le même nom dans votre feuille de calcul que dans le code VBA.
Notez que les chaînes de format VBA ne sont pas exactement les mêmes que les chaînes de format personnalisé d'Excel (par exemple, utilisez "n" au lieu de "m" pendant quelques minutes), mais elles sont très similaires. Regardez ici pour plus de détails ou recherchez MSDN pour «Fonction de formatage (Visual Basic pour Applications)». Faites défiler vers le bas pour voir les différents spécificateurs de format de date.
Méthode 2
Une autre approche qui utilise également VBA, mais qui pourrait en fait être plus facile à maintenir, est la suivante:
- Appliquez le format de date souhaité à une cellule à l'aide de la boîte de dialogue Format de cellule normale. Cette cellule peut être sur une feuille masquée si vous préférez - elle n'a pas besoin d'être affichée pour l'utilisateur final. Supposons que vous avez appliqué le format
yyyymmdd\_hhss
à la cellule $ A $ 1 (notez que le trait de soulignement doit être échappé comme indiqué).
- Ajoutez la
GetFormat
fonction (illustrée ci-dessous) à un module VBA dans votre classeur.
- Entrez
=GetFormat($A$1, TRUE)
dans une autre cellule (par exemple $ B $ 1 )
- Cette fonction renverra la version localisée de la chaîne de format. Ainsi, même si vous avez initialement formaté $ A $ 1 avec
yyyymmdd\_hhss
, lorsque vous ouvrez le classeur sur un ordinateur en utilisant la langue française (par exemple), la fonction s'affiche aaaammjj\_hhss
.
- Maintenant, référencez simplement la deuxième cellule dans toutes vos
TEXT
fonctions. Par exemple: =TEXT(F22, $B$1)
.
Voici le code VBA:
Public Function GetFormat$(Cell As Range, Optional ByVal UseLocal As Boolean)
If UseLocal Then
GetFormat = Cell.NumberFormatLocal
Else
GetFormat = Cell.NumberFormat
End If
End Function
Cela nous permet «d'inspecter» la cellule que vous avez initialement formatée ($ A $ 1) pour récupérer la chaîne de formatage localisée. Cette chaîne représentera le même format que vous avez appliqué, mais elle utilisera les lettres correctes pour TEXT à interpréter ("j" au lieu de "d" par exemple), de sorte que la valeur affichée des dates sera constante dans tous les paramètres régionaux. Si vous souhaitez utiliser un seul format de date pour l'ensemble de votre classeur, vous ne devrez effectuer les étapes 1 à 4 qu'une seule fois. Répétez ensuite l'étape 5 (la fonction TEXTE) dans toutes les cellules où vous l'utilisez actuellement, mais au lieu de coder en dur un format, vous feriez simplement référence à la cellule qui contient la chaîne de format localisée ( $ B $ 1 dans les instructions d'exemple) .
Notez que le deuxième argument GetFormat
indique à la fonction de renvoyer ou non la version localisée (qui dépend des paramètres régionaux) ou la version "standard" (qui est toujours basée sur en-US).
Voici quelques captures d'écran qui pourraient rendre cela plus clair.
- Dans la figure, la colonne 1 répertorie plusieurs représentations d'une même date avec différents formats appliqués.
- Notez que les lignes 2 et 3 utilisent les formats de date "système par défaut" d'Excel. (Ceux-ci sont indiqués par un astérisque de début dans la boîte de dialogue Format et ils indiquent que le format de date par défaut de l'utilisateur doit être utilisé.) Notez également que la ligne 5 utilise un LCID entre crochets, ce qui force la langue utilisée pour les noms de mois et de jour à être l'anglais ( différents LCID peuvent être utilisés pour spécifier d'autres langues).
- La deuxième colonne affiche le résultat de
GetFormat(Cell, FALSE)
pour chaque cellule de la colonne 1. (Rappelez-vous que FALSE
pour le deuxième paramètre, la fonction renvoie les formats NON localisés ).
- La troisième colonne montre ce qui
GetFormat(Cell, TRUE)
retourne pour chaque cellule de la colonne 2. (c'est-à-dire les formats localisés ).
- La quatrième colonne affiche le résultat de la fonction TEXTE en utilisant la valeur de date brute d'origine et le résultat localisé de
GetFormat
pour recréer le format indiqué dans la colonne 1. Notez toutefois qu'aucune mise en forme numérique n'a été appliquée à cette colonne. Les valeurs sont un résultat direct de la fonction TEXT.
Les résultats ci-dessus pour le cas anglais (États-Unis) ne sont pas très intéressants, mais vous pouvez les comparer avec les résultats suivants qui ont été obtenus en changeant les paramètres régionaux de mon système d'exploitation en divers autres paramètres régionaux. Il est important de noter qu'en utilisant GetFormat
en combinaison avec, TEXT
nous pouvons conserver un résultat constant pour les formats numériques (ceux qui n'incluent pas les noms de jour ou de mois) dans tous les paramètres régionaux. Et en contraignant la langue à l'aide d'un LCID (comme dans la ligne 5), nous pouvons même conserver un format constant en incluant également les noms de jour et de mois.
Cette méthode fonctionne pour la plupart des paramètres régionaux, mais il convient de noter que les scripts utilisés pour représenter les chiffres hindou-arabes ne sont PAS les mêmes dans tous les paramètres régionaux. Par conséquent, les paramètres régionaux tels que ceux des paramètres régionaux népalais (Inde) entraîneront des formats de date qui «semblent» différents des dates en-US. Mais ceux-ci sont en fait dans le même "format" en termes de positions des nombres - ils utilisent simplement des symboles différents pour les nombres.