Idem pour Excel version Windows sur un portable et peu importe l'ordinateur car c'est Excel interprétant le clavier …
Version imprimable
Bonjour,
dans tous les cas le symbole décimale est le point [.] dans vba!
il faut arrêté de ce prendre la tête sur le sujet!
Excel parementer régionaux ou suivant le type de formatage imprégné à la cellule. vba anglet!
Si Application.UseSystemSeparators == True alors Application.International(xlDecimalSeparator) est égal au séparateur décimal du système*
Si Application.UseSystemSeparators == False alors Application.International(xlDecimalSeparator) est égal à Application.DecimalSeparator**
*: Le séparateur décimal du système est défini ici : Control Panel> Region and Language> Format > Additional Settings> Decimal symbol
**: Application.DecimalSeparator est défini ici dans Excel : File > Options > Advanced > Decimal separator
Pour résumer Application.International(xlDecimalSeparator) est le séparateur qui apparaît dans les cellules contenant des valeurs numériques
oui j'ai bien compris mais pourquoi vouloir qu'Excel ne respecte ne respecte pas la culture de l'utilisateur?
Assertions toujours fausses ‼ Encore une fois je ne peux laisser passer de telles inepties !
Et c'est pourtant simple, un gamin en CM2 (~10 ans !) a compris rien qu'en lisant l'aide … 8-)
C'est incroyable, tout y est sans compter le tutoriel ni les exemples dans les discussions de ce forum ‼‼Francis a raison !
La propriété International(xlDecimalSeparator) renvoie toujours le séparateur décimal du système et est
totalement indépendante de la propriété UseSystemSeparators, peu importe donc la valeur de cette dernière ‼Francis a raison !
Aucun rapport, les propriétés étant indépendantes l'une de l'autre et la propriété DecimalSeparator étant modifiable ‼
Du reste à l'installation UseSystemSeparators est égale à True et les deux propriétés sont aussi égales !
Encore une fois, elles sont indépendantes de la propriété UseSystemSeparators …Francis a raison !
Uniquement si UseSystemSeparators est égale à True, sinon Excel prend la propriété DecimalSeparator !
Evidemment si ces deux propriétés sont égales … mais comme DecimalSeparator est modifiable !
Le tableau du post #15 est pourtant clair, à la portée de n'importe quel débutant ‼
Et rien qu'en regardant le paramétrage dans les options d'Excel, l'exemple dans l'aide VBA,
le tutoriel et les discussions dans ce forum ‼ Rien qu'en effectuant le test en VBA !Francis a raison !
pur quoi il en serait autrement? c'est déjà son mode de fonctionnement à vba!
le séparateur décimal international ou anglet même combat!
C'est comme si tu voulais connaitre la provenance de produits mad in Usa!
Office 2013 and later
Renvoie des informations relatives aux paramètres de pays/région et internationaux en cours. Type de données Variant en lecture seule.
https://msdn.microsoft.com/fr-fr/lib.../ff840213.aspx
Code:
1
2
3
4
5
6 Sub test() Dim a As Double a = 1.2 Debug.Print a Debug.Print a * 2.3 End Sub
Impossible rien qu'en lisant l'aide de cette propriété International, toujours pas lue d'où ta confusion initiale persistante !
Bien lire aussi l'aide de la propriété UseSystemSeparators, et exécuter donc son exemple …
De mon côté différents ordinateurs avec différentes versions d'Excel dont la version 2010 se comportent exactement
comme le tableau du post #15 expliquant clairement le choix d'Excel quant au séparateur décimal …
Je n'ai plus de version anglaise à disposition mais vu le nombre de mes codes y ayant tourné (et y tournant encore !)
j'aurais eu à coup sûr des retours m'informant que mes procédures d'importation ne tenaient pas compte du séparateur décimal !
Et je n'ai jamais constaté de différence avec une version locale d'Excel …
Si vraiment tu es sûr de toi, nous demandons à voir une vidéo dans laquelle apparaîtra le code utilisé
ainsi que son incidence sur une feuille de calculs et des affichages avant / après dans la fenêtre Exécution.
On veut bien te croire mais comme nous ne croyons que ce que nous constatons …
Joindre aussi en .xls ou en .zip le classeur utilisé.
Francis a raison !
Hello,
le post est marqué comme résolu, est-ce le cas ou on a toujours un point qui bloque ?
j'ai l'impressions qu'il as trouvé une solution par dépit, mais qu'il subsiste des incompréhensions!*
d'où notre forme de harcèlement don j'ai bien conscience.
Bonjour à tous,
sans vouloir mettre de l'huile sur le feu je suis plutôt d'accord avec francis60.
est pour moi faux.Citation:
Comme pourtant indiqué dans l'aide VBA, Application.International(xlDecimalSeparator) est ce séparateur décimal "système"
Application.International(xlDecimalSeparator) reflète TOUJOURS le séparateur utilisé à ce moment par excel et non le séparateur système régional, même si l'aide semble dire autre chose.
C'est à dire Application.International(xlDecimalSeparator) = le séparateur système si Application.UseSystemSeparators = True,
ou bien = le séparateur défini dans les options d'excel (donc Application.DecimalSeparator) si Application.UseSystemSeparators = False
C'est ce séparateur qu'on retrouve bien dans les décimaux sur feuille.
Par contre la fenêtre Execution de VBE et la fenêtre Espions utiliseront toujours le séparateur système quelque soit la position de Application.UseSystemSeparators ce qui met de la confusion.
Je peux très bien lire 2,5 dans une variable Double ou Variant/Double ou la fenêtre d'éxécution alors que le séparateur en cours est le point, et vice-versa.
C'est ce que je constate sur 2010.
eric
Mea Culpa !
Je ne comprends pas car pourtant des tests avaient été menés (et je n'étais pas seul !)
et effectivement la propriété International(xlDecimalSeparator) prend la valeur de la propriété DecimalSeparator
quand la propriété UseSystemSeparators est à False !
Et l'affichage dans la fenêtre Exécution s'en tamponne le coquillard,
elle a l'air de toujours afficher le séparateur régional de Windows !
Heureusement côté Excel il n'y a pas ce foutoir dans les cellules, j'ai quand même bien flippé ! (ma punition …)
francis60, je t'adresse donc toutes mes plus plates excuses ‼
Je ne comprends donc plus la logique de Microsoft (et sa p....n d'aide locale ou en ligne ‼) …
J'ai indiqué un message « Francis a raison ! » sur les posts encore modifiables …
Je t'ai mis un point :plusser: sur tes discussions et tu as le droit de te soulager par des :moinsser: sur les miennes !
Et moi je tournerai 7 fois la roulette de ma souris avant de clicker!
Ce qui est fou dans cette histoire est que je suis sûr de mettre fait avoir à une époque par International
et que l'on s'était aperçu qu'avec UseSystemSeparators à False il fallait récupérer DecimalSeparator …
Cela va simplifier mes codes et j'espère un jour ne plus avoir de surprise de ce côté là !
C'est la deuxième fois que je me suis fourvoyé sur ce forum mais celle-ci est de loin komack !
Encore une fois Francis, toutes mes sincères excuses les plus profondes !
Je vais creuser un trou et m'y faire oublier un moment … :oops:
Bonjour à tous,
J'accepte bien volontiers ton mea culpa Marc-L. à l'avenir tu seras plus tolérant.
J'ai adopté ta proposition #3 qui fait le boulot pour réaliser une "conversion explicite" et s'affranchir des réglages Windows des clients (français, américain, russes, japonais...)
L'astuce de Theze #4 permet de connaitre le séparateur régional de Windows sans passer par l'API.Code:
1
2 Range("A1").Value=1.1 double =val(replace(Range("A1").Value,",","."))
Effectivement, moi aussi je considère que c'était une mauvaise piste.Code:Format(0, ".")
Du coup ce post est un peu difficile à suivre pour celui qui rencontre le problème, quelqu'un pourrait compléter le tuto "Excel et les paramètres régionaux : Application.International" ?
Voici ma compréhension actuelle du sujet
Les séparateurs peuvent intervenir à 3 niveaux:
- Dans VBA toujours le .
- A l'affichage dans Excel (combinaison des choix utilisateur dans Excel et Windows...)
- Dans l'affichage de la fenêtre d’exécution VBE (CTRL+G) et quand on récupère un Range("A1").Value (paramètres régionaux de Windows)
Oui, j'ai un poste client - auquel j'ai rarement accès - qui se comporte bizarrement dans la fenêtre "Locals Window" de VBE mais je créerai une discussion spécifique si besoin.
Bonjour,
dans la saisie du code oui.Citation:
Voici ma compréhension actuelle du sujet
Les séparateurs peuvent intervenir à 3 niveaux:
Dans VBA toujours le .
Mais à l'affichage dans VBE c'est toujours le séparateur système qui est utilisé, même si Application.UseSystemSeparators = False et qu'un autre y est défini. Donc la "," en france si l'utilisateur n'a rien changé.
Voir post 32
eric
Désolé Francis j'étais tellement certain car à une époque on avait constaté un comportement différent
ou alors on s'est bien fait embarqué ! C'était gravé dans du marbre dans ma mémoire pourtant …
La fenêtre Locals de la version anglo-US correspond à la fenêtre Variables locales de la version française.
De mon côté, c'est comme pour l'affichage de la fenêtre Exécution, aucune prise en compte du séparateur d'Excel
mais uniquement du séparateur décimal régional de Windows …
Il y a tout de même une limite à la conversion par :Par exemple siCode:
1
2
3 Range("A1").Value=1.1 double =val(replace(Range("A1").Value,",","."))
A1: " 5 : ancienne valeur pour info (supprimée le 14/8)"
B2: =N(A1)*5 // affiche 0 - la fonction N dans la cellule autorise une saisie alpha par exemple pour commenter
double = 5 au lieu de 0 attendu
Je n'ai pas la main sur le format de la source de données qui se trouve complètement permissif
Je conserve cette conversion qui jusqu'à présent reste la meilleure
Application.WorksheetFunction.N n'existe pas et présenterait j'imagine autant d'inconvénients tout comme Evaluate.