Problem Excel Localisation et formatage de dates [Résolu]

Signaler
Messages postés
25
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 août 2007
-
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
20 novembre 2006
-
Bonjour á tous,

Je suis desole de devoir poster ici mais je planche sur un probleme Excel que je n'arrive pas á resoudre et je ne trouve aucun forum qui puisse m'y repondre... Bon je sais que c'est un peu hors sujet vu que mon probleme est 100% Excel et pas VBA mais vu la qualité de la communaute j'ose esperer une réponse...

J'ai un probleme de localisation de Excel avec la formule de formatage "=TEXTE()"

J'ai des cellules comprenant la formule suivante:

= "Du " & TEXTE(MAX(A1:A20);"jj/mm/aa") & " au " & TEXTE(MAX(A1:A20);"jj/mm/aa") & "."

Cela marche pour certaines machines et pour d'autres non...

Si la machine parle pas le fraçais mais anglais j'obtiens la valeure suivante: " Du jj/03/aa au jj/04/aa." au lieu du " Du 21/03/06 au 12/04/06." attendu.

Malheureusement, je ne peux pas configurer/installer tout les PC des utilisateurs de ces feuilles qui ont des versions parfois Fr, En ou Sp de Office et Windows... Respectivement le format doit changer d'une machine á l'autre comme suit: "dd/mm/aa", "dd/mm/yy" et "jj/mm/aa"...

Donc comment faire pour trouver un moyen que cela fonctionne correctement pour tous? J'aimerais trouver une solution propre á ce probleme...

Merci á tous et á toutes...

(Heu si vous avez une idee de forum plus adapté ou je devrais aller m'adresser n'hesitez pas á me le faire savoir... en pm si vous ne voulez pas mettre de liens sur le forum)

12 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
J'ai une solution très très simple, mais c'est 50 % excel, 50 % vba !

Quand tu es dans excel, appuie sur Alt + F11 (éditeur vb), fais Insertion, Module et colle ce code :

Public Function Concatenation(ByVal PlageRecherche As Range) As String
    Concatenation = "Du " & _
      Format(Application.WorksheetFunction.Max(PlageRecherche), "dd/mm/yy") _
      & " au " & _
      Format(Application.WorksheetFunction.Max(PlageRecherche), "dd/mm/yy")
End Function

--Mortalino--

Ensuite, au lieu de tes formules, quand tu veux ton résultat, dans la cellule concernées tapes :
=concatenation(A1:A20)
et le résultat devrait s'afficher.

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

et si on trouve une solution en vba, cela te conviendrait-il ?
Sachant que cela me semble difficile de déterminer la version du langage avec Excel seul...

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Messages postés
25
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 août 2007

Merci pour la rapidité de ta réponse Mortalino,

:)

Heu en fait il s'agit d'un projet VBA un livre centralisant (resumant, organisant, clasifiant, statifiant, etc. avec moultes macros) des centaines de petits livres sans VBA ...
Malheureusement le probleme se trouve dans les livres de données (sans VBA) que je ne peux (je ne devrait) malheureusemant pas trop toucher... Enfin si il n'y a pas d'autres moyens je suis preneur au moins pour evaluer la faisabilité.

L'ideal aurait ete une sorte de formule genre =TEXT_NOLOCAL(value,"FORMAT") que je n'ai pas trouvée...

(Soit dit en passant je trouve ça quand-même un peu **@!?# la localisation dans la syntaxe des formules etc... que cela soit pour la communication sur Internet entre differentas pays ou au niveau de la portabilité des projets VBA ou non...)
Messages postés
50
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
23 janvier 2008

Salut,

tu peux essayer de mettre ta formule avec a la place de jj/mm/aa --> dd/mm/yy car il me semble que le language par defaut etant l'anglais excel le reconnait toujours quelques soir la langue du pc.

Sinon je me risque a un truc peut etre moyen.....
tu formates, avec le click droit tes cellule B2 et B3 (ou celle que tu veux du moment quelles sont inutiles pr autre chose..) avec jj/mm/aa

ta cellule cible ou tu veux le resultat est B1.
tu lances la macro.

Sub DateFunc()
    Dim myRange As Range
    Set myRange = Sheets("Mafeuille").Range("A1:A20")
    
    Range("B2").Value = Application.WorksheetFunction.Min(myRange)
    Range("B3").Value = Application.WorksheetFunction.Max(myRange)
    Range("B1").Value = "Du" & Range("B2").Text & "Au" & Range("B3").Text & "."

End Sub

Comme tu fais le formatage des cellules sur le fichier source et non dans ta formule, excel n'aura aucun pb a interpreter.
Desole impossible a teste mon PC est en anglais sans possibilite de changement...

PS: j'ai change le Max pour Min....sinon ca fesait "Du (Max) au (Max)",....
j'espere que ca t'aidera...
Desole impossible a teste mon PC est en anglais sans possibilite de changement...

carvals
Messages postés
25
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 août 2007

Merci Carvals,

J'ai déjà essayé de remplacer par "dd/mm/yy" mais ça foire (sauf sur certaines becanes que je nommerais ici d'anglophones)... Le =TEXTE() est directement dans une cellule du livre Excel.

Sinon en ce qui concerne ta Sub elle semble interessante, je vais analyser cela voire si cela peut me convenir bien que je prefererais une solution 100% Excel...

En tout cas merci pour ta réponse,

Juls
Messages postés
25
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 août 2007

Oui!
Que c'est élégant comme solution Mortalino ...

Je pense que je vais trancher:
Sur mon livre resumant les resultats (deja remplit de VBA) je vais instaurer ton systeme Mortalino mais je laisserais les petits livres de données non VBA (+/- 250) sans macros et tant pis pour ceux qui ne n'ont pas leur Excel bien localisé lá ou il le faudrait ...

Donc cela marchera pour tous sur le livre qui resume les 250 mais il y aura l'erreure sur chacun des petits en fonction de la version d'Excel utilisée ...

En tout cas merci beaucoup pour vos aides á tout les deux.

(Si jamais je trouve et que j'utilise une autre solution je le ferais savoir ici-même)

Encore merci,

Julien
Messages postés
50
Date d'inscription
lundi 20 novembre 2000
Statut
Membre
Dernière intervention
23 janvier 2008

ouais je m'incline.
well done!

carvals
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Rhoulz: Si jamais tu trouves une façon d'y arriver, laisse-le savoir
parce que j'ai eu le même problème aujourd'hui et que je ne voyais rien
d'autre qu'une Function du genre de celle de Mortalino... Moi aussi je
dois travailler sur des machines avec configuration Windows
différentes... et ce n'est pas toujours simple...


Mais j'aimerais bien savoir si une fonction interne d'Excel pourrait le faire...

Si jamais je trouve de mon côté, je laisserai ma solution.

MPi
Messages postés
25
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 août 2007

Evidemment si j'en trouve "une plus mieux" je la poste...

Mais je ne crois pas que je pourrais en trouver de meilleures que celle que Mortalino a postée.
Ou encore de celle qui conciste á laisser une note (ou de le faire soi-même) concernant la configuration regionales des SO des utilisateurs...

Enfin j'ai déjà beaucoup chercher (Il faut dire que comme ce problème n'est pas VBA j'ai bien chercher avant de venir ici) et sans succès. En conclusion on est jamais mieux servi que par Code-Source...

Merci á la communauté, toujours aussi efficace!
Messages postés
25
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 août 2007

Re-bonjour,

Voila je viens de trouver une solution assez tordue mais qui peut-être peut faire progresser le truc pour ne pas devoir passer par du VBA (Enfin il s'agit de l'idée partagée á travers d'un forum espagnol par un(e) certain(e) karla_gemi):

L'idée est en gros:

- 1 cellule A1 avec la valeur date (01/01/2001) p. ex.
- 1 autre cellule B1 appliquant la formule Excel suivante: "=text(A1;"mmmm")"
Cette cellule B1 donnant le moi ecrit en lettre.

(Rem: dans mon cas cela marche car je veux differencier les versions espagnoles (m comme mes), françaises (m comme moi) et anglaises (m comme month))

Ces deux cases etant cachées de préférence...

Ensuite pour appliquer ma formule au lieu du
= "Du " & TEXTE(MIN(A1:A20);"jj/mm/aa") & " au " & TEXTE(MAX(B1:B20);"jj/mm/aa") & "."

Je le fais avec une conditionelle "=si(B1="janvier"; LAFORMULEVERSION_FR;Si(B2 = "enero";LAFORMULEVERSION_SP;Si(B2 = "enero";LAFORMULEVERSION_SP;"localisation non reconnue")))

Enfin attention tout de même, cela marche +/- bien car j'ai déjà trouvé un cas ou cela ne fonctionnait pas:

Un PC est en version espagnol full, retourne la valeur "enero" mais comprend le formatage en Anglais c.a.d.Bien que sa config regionale du panneau de controle de Winchose soit configurer en Sp ("aa" año) sur le panneau de config regional de Xp, mais "aa" rien en formatge de date en Excel il faut mettre "yy" pour avoir l'année mais "mmmm" retourne la valeur "enero" (janvier en Sp)...

Allez comprendre moi je n'y parviens pas!
Messages postés
25
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
30 août 2007

Une autre possibilité qui m'a été suggérée (également 100% VBA-free... j'aime bien le VBA mais c'est parfois mieu de pouvoir s'en passer).

C'est de ne pas utiliser de TEXTO (ou juste pour les partie non ambigues) mais d'utiliser et concateniser les fonctions d'année, moi et jour dans un texte:

Exemple (fct version Ang.):
= "Depuis " & DAY(MAX(A1:A20)) & "/" & MONTH(MAX(A1:A20)) & "/" & YEAR(MAX(A1:A20)) & " au " & Etc.

Voila ça ajoute de la matière á cette réflexion...

julien
Messages postés
27
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
20 novembre 2006

salut,

J'ai à peu prés le même soucis. 
Voila pour mon taffe, j'ai fait une feuille de calcul de perte de charge pour des tyauteries. J'ai dévelloppé ma feuille sous VBA et sur un PC français. Jusque là tout va bien. Le souci se présente dès que je passe ma feuille de calcul sur un PC allemand, certaines valeurs (surtout les valeurs qui ont des décimales) se transforme en date. C'est à dire, par exemple, je tape la valeur 23.9 et j'obtiens 37007. Je comprends pas trop le problème. J'ai bien essayé de formater les cellules à l'ouverture du classeur mais rien n'y fait.

Nota: toutes les valeurs sont tapées via une fenêtre VBA

Es ce que quelqu'un aurait une petite idée..

merci d'avance

damdam04