Selon cette question, j'ai le problème suivant:
Je veux utiliser une fonction Excel (pas la mise en forme des cellules) comme TEXT (A1, {date_pattern})
Mais la personne qui a répondu à ma question précédente m'a fait constater que le modèle de date change en fonction des paramètres régionaux de Windows.
Cependant, mon système d'exploitation (Windows 7) est en anglais et la suite Office également. En regardant dans mes paramètres régionaux, il montre même un modèle en utilisant la notation anglaise (dd.MM.yyyy)
Je veux savoir s'il existe un moyen de désactiver un tel comportement à partir d'Excel, ce qui signifie que je veux toujours utiliser les modèles anglais et jamais les modèles localisés car je ne veux pas que le comportement de ma feuille Excel change en fonction de la localisation du lecteur.
Un cas simple serait de reformater un champ de date de manière centrée sur l'ordinateur comme ceci: "aaaammjj_hhss" ceci est reconnu universellement et peut être trié de haut en bas facilement. Mais comme je suis dans la partie française de la Suisse, je devrais écrire "aaaammjj_hhss" et si j'envoie cet Excel à un collègue à Zurich, il ne pourrait pas voir la date correcte car il a obtenu la localisation suisse-allemande (son excel s'attendrait à ce que "jjjjmmtt_hhss")
Nous avons été assez intelligents pour installer toutes les fenêtres et le bureau en anglais, mais nous rencontrons toujours des problèmes comme celui-ci, car ce lien vers les paramètres régionaux du système d'exploitation.
Pour moi, la modification des paramètres Windows n'est pas une option car tous les autres programmes utilisent ces paramètres.
Réponses:
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:
Ce que cela fait, c'est simplement utiliser la propre
Format
fonction de VBA au lieu de laTEXT
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:
yyyymmdd\_hhss
à la cellule $ A $ 1 (notez que le trait de soulignement doit être échappé comme indiqué).GetFormat
fonction (illustrée ci-dessous) à un module VBA dans votre classeur.=GetFormat($A$1, TRUE)
dans une autre cellule (par exemple $ B $ 1 )yyyymmdd\_hhss
, lorsque vous ouvrez le classeur sur un ordinateur en utilisant la langue française (par exemple), la fonction s'afficheaaaammjj\_hhss
.TEXT
fonctions. Par exemple:=TEXT(F22, $B$1)
.Voici le code VBA:
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.
GetFormat(Cell, FALSE)
pour chaque cellule de la colonne 1. (Rappelez-vous queFALSE
pour le deuxième paramètre, la fonction renvoie les formats NON localisés ).GetFormat(Cell, TRUE)
retourne pour chaque cellule de la colonne 2. (c'est-à-dire les formats localisés ).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.
la source
Pour les dates, vous pouvez réellement définir un format qui oblige Excel à utiliser un certain environnement local. Si vous définissez le format numérique de la cellule contenant votre date sur quelque chose comme
Excel affichera votre date dans un environnement local américain (hex 409)
Gotcha: La notation YMD est localisée et se transforme donc en JMT sur un système allemand par exemple. Vous devrez donc peut-être adapter la chaîne de format à votre situation, mais je m'attendrais à ce qu'elle se comporte comme les formules (traduction automatique) sur des systèmes utilisant une langue différente (comme vous semblez le savoir).
Voir ici pour plus de détails: /programming/894805/excel-number-format-what-is-409
et ici pour une liste des locales: http://support.microsoft.com/kb/221435
la source
Même si cette question est un peu ancienne, je suis tombé sur une autre solution (simple!) Et je poste ici par souci d'exhaustivité / référence.
J'ai essayé la réponse de ricovox avec succès, mais je voulais une solution sans VBA.
Testé également la solution de MarinD. Mais, comme indiqué dans les commentaires, si vous avez besoin de prendre en charge plusieurs formats spécifiques à un pays, cela peut devenir assez difficile à gérer.
Et maintenant à ma solution: utiliser les fonctions natives Excel YEAR (), MONTH () et DATE (), enveloppées dans TEXT () pour remplir les zéros en face. Avec la date en A1:
=TEXT(YEAR(A1),"0000")&"-"&TEXT(MONTH(A1),"00")&"-"&TEXT(DAY(A1),"00")
me donne la date au
YYYY-MM-DD
format, indépendamment du fait que les paramètres régionaux actuels nécessitentYYYY-MM-DD
ouAAAA-MM-JJ
ou tout autre nom localisé pour l'année / mois / date.Excel traduit automatiquement ses formules natives.
la source
Un moyen très simple d'éviter tout le désordre est de créer une liste de jours de dates connues et d'utiliser la liste dans votre fonction.
la source
Un moyen simple de résoudre le problème du format de date des paramètres régionaux d'Excel consiste à utiliser la
CHOOSE
fonction:Dans ces exemples, vous obtiendrez le jour et le mois en lettres sans utiliser les formats locaux comme "Mmmm" ou "Dddd" ou "Jjjj".
la source
Si votre date de référence est dans la cellule A1:
la source
if(if(if...
tous les formats dans le monde, ce serait très difficile à gérer.J'ai maintenant utilisé une logique similaire à la méthode 2 donnée avec les macros. Les macros fonctionnent, mais généralement lorsque vous envoyez un fichier d'une organisation à une autre, les macros ne passeront pas par l'échange ou l'antivirus ne les laissera pas s'exécuter. J'ai donc simplement renommé ia cell en format de date. Dans cette cellule, j'ai simplement saisi le texte jj / mm / aaaa. Donc, lorsque j'utilise la fonction texte, j'utilise le nom de la cellule pour le format, par exemple = texte (C1, format de date) et cela semble fonctionner (précisément pour la Suisse, cela fonctionne).
À votre santé...
UNE.
la source
=TEXT(C1,dateformat)
fonctionnerait (avec ladateformat
cellule contenantdd/mm/yyyy
) quand=TEXT(C1, "dd/mm/yyyy")
ne fonctionne pas? (Ou cela fonctionne-t-il?)Je ne peux pas croire que personne n'ait proposé les formats nommés comme solution.
Si vous formatez une date et que vous la saisissez,
=TEXT(A1,"Short Date")
elle utilisera automatiquement le format approprié en fonction du paramètre régional sans aucun problème entre les régions."Long Date" est également une entrée acceptable et fonctionnera de manière transparente dans toutes les régions. Il sera également converti en une date correcte dans VBA avec cvdate quelle que soit la version utilisée.
la source
Je laisse tomber une autre alternative élégante à mon humble avis tirée de: Réponse de Stackoverflow par @Taosique
la source
#VALUE
erreur). Même si le mot commence par "m", il y a plus que 2 options ici. L'Allemagne, la Pologne et la Hongrie ont chacune des codes de mise en forme différents pour n'en nommer que quelques-uns.Je sais, en retard à la fête, mais en examinant cela moi-même, je viens de trouver une solution de travail sur ExcelBanter qui n'a pas besoin de VBA.
La voie à suivre consiste à utiliser l'ancien système de macros Excel v4. Il est toujours accessible via des plages nommées ou des feuilles de macro v4. Ce fut aussi une expérience d'apprentissage pour moi; une page sur Excel hors grille et une sur le site de Ron de Bruin ont été de belles introductions. Ce dernier a également un lien vers un classeur contenant la même solution.
Fondamentalement, l'ancienne fonction de macro Excel v4 GET.WORKSPACE peut être utilisée pour obtenir des méta-informations sur beaucoup de choses, y compris le format de date localisé utilisé. GET.WORKSPACE (37) renvoie un tableau de tous les caractères utilisés pour toutes sortes de séparateurs, etc., où l'index 19-20-21 contient la lettre utilisée pour le formatage de l'année, du mois et du jour. Ainsi, l'utilisation d'INDEX (GET.WORKSPACE (37), 19) renvoie "y" dans les paramètres de langue anglaise, "j" dans le néerlandais et "a" dans l'espagnol. Combinez cela avec un REPT pour générer le code à 4 lettres et vous avez terminé. Le problème est cependant que les anciennes fonctions v4 (comme GET.WORKSPACE) ne peuvent être utilisées que par les feuilles de macro de style v4 et les plages nommées.
Donc:
=REPT(INDEX(GET.WORKSPACE(37),19),4)
=TEXT(A1, MonthFormat)
la source