VBA : Séparateur des milliers

Bonsoir,

Je tente d’écrire un code qui utiliserait le séparateur des milliers si et seulement si c’est nécessaire, selon que la cellule de référence en D1 comporte jusqu’à 3 chiffres ou plus.

Cependant, le code trouvé écrit systématiquement le séparateur des milliers, même avec un nombre à 3 chiffres ou moins.

Option Explicit

Sub Séparateur()
Dim Montant

Montant = Range("D1")

Range("A1") = "XXX " & Application.WorksheetFunction.Text(Montant, "#'##0.00")

End Sub

Savez-vous comment je peux corriger cela ?

Cordialement.

136demo-30-01.xlsm (14.93 Ko)

Bonsoir Yvouille,

As-tu testé les choses suivantes

  • Vérifier que la cellule est un nombre
  • Si c'est un nombre, vérifier que (integer(nombre))\1000 >=1
(PS: à priori je ne me suis pas trompé sur le sens de la barre, cette barre calcule la division entière d'un nombre)
if isNumeric(Range("A1")) AND ((CInt(Range("A1")\1000>=1) then .....

Salut et merci pour ta réponse.

Je ne vois malheureusement pas trop où tu veux en venir avec ton instruction. La cellule A1 est la cellule dans laquelle doit être inscrit le texte voulu, donc on ne peut, selon moi, pas contrôler quoi que ce soit auparavant.

Si je n’ai rien compris à ton explication, peux-tu me fournir un fichier dans lequel ton idée fonctionne ?

Amicalement.

Bonsoir

Je ne comprends pas ce format : l'apostrophe comme séparateur des milliers (Je suis très loin de tout connaitre)

Avec cet autre format cela passe bien

Option Explicit

Sub Séparateur()
Dim Montant

  Montant = Range("D1")

  'Range("A1") = "XXX " & Application.WorksheetFunction.Text(Montant, "#'##0.00")
  Range("A1") = "XXX " & Application.WorksheetFunction.Text(Montant, "#,##0.00")

End Sub

Bonsoir,

Je ne comprends pas non plus ce format, mais essaie cette proposition :

Range("A1") = "XXX " & Application.WorksheetFunction.Text(Montant, "[<1000]0.00;[>=1000]#'##0.00")

Cdlt.

Bonsoir,

A toute fin utile, je confirme le format de Banzai (que j'ai eu l'occasion d'utiliser hier ou avant-hier).

Le point comme séparateur décimal ; la virgule comme séparateur de milliers.

Excel adapte le code VBA selon les paramètres régionaux.

Cordialement.

Bonjour à vous tous,

Merci pour vos nombreuses réponses. Il s’agit effectivement d’un problème de paramètres régionaux (EDIT je m'en suis rendu compte grâce à vos réponses) ; en Suisse nous utilisons l’apostrophe à la place de la virgule comme séparateur des milliers.

capture 31 01 a

Ce que je ne comprends pas alors c’est que – bien que cela soit correctement paramétré chez moi – Excel n’applique pas le format proposé par Banzai en utilisant le paramètre régional pour le séparateur des milliers. Faudrait-il compléter le format indiqué dans la macro afin que les paramètres régionaux soient appliqués, tout comme il faut ajouter un astérisque devant un format d’heure afin que ça le soit ??? J'ai bien entendu essayé d'ajouter un astérisque devant le format de nombre dans mon instruction VBA, mais ça ne passe pas.

capture 31 01 c

Par contre si je veux modifier le format d'une cellule quelconque, Excel reconnait mes paramètres !

capture 30 01 b

Mais bon, la solution proposée par Jean-Eric faisant parfaitement l’affaire, je ne vais pas chercher plus loin pour l’instant.

Encore merci à vous tous. Je vous souhaite un très bon dimanche.

Re-bonjour,

Je me permets de rouvrir ce fil car – si la proposition de Jean-Eric convient totalement pour mon problème actuel – je désirerais quand même tenter de trouver une solution plus complète, qui fonctionnerait également avec des nombres au-dessus du million. Car pour l’instant, un tel nombre est effectivement inscrit ainsi : XXX 55555'555.55.

La question de savoir s’il est possible d’écrire une instruction VBA capable de reconnaitre les paramètres régionaux m’intéresserait donc beaucoup. Avez-vous une idée ?

Cordialement.

Bonjour,

Pour affecter un format de cellule, tu as la ressource d'utiliser NumberFormatLocal au lieu de NumberFormat, ce qui devrait te permettre de le définir avec tes propres séparateurs.

Par contre rien de tel pour la fonction Format où il faut passer par les symboles reconnus par VBA.

Cordialement.

Bonjour

Juste pour ma culture personnelle

Peux tu (pas obligatoire) tester cette ligne et communiquer le résultat

En France j'obtiens

XXX 123 456 789,00

Range("A2") = "XXX " & Format(Montant, "#,##0.00")

Merci

Bonjour,

instruction VBA capable de reconnaitre les paramètres régionaux m’intéresserait donc beaucoup. Avez-vous une idée ?

Application.International(xlDecimalSeparator)

Application.International(XIThousandsSeparator)

eric

PS: voir message précédent de Banzai

Bonsoir à tous et merci pour vos nombreuses réponses,

@ MFerrand : Je ne pense pas que je puisse utiliser les instructions NumberFormatLocal et/ou NumberFormat dans mon cas, puisque je veux inscrire ce format dans une chaine de type String. Ou sinon peux-tu m’expliquer mieux ce que tu pensais sur la base de mon exemple ?

@ eriiic : Lorsque je place tes deux instructions en début de macro, j’ai le message d’erreur ‘’Utilisation incorrecte de la propriété’’. Je n’ai pas cherché beaucoup plus loin car de toute façon il me semble que c’est le contraire que je voudrais. Quelque chose du genre Application.LOCAL (XIThousandsSeparator).

@ Banzai : En tant que demandeur d’un service, je me verrais mal te répondre : « Non, je refuse de tester ta proposition de solution » Lorsque – sur notre petite ile helvétique perdue au milieu de l'océan Europe – j’utilise ton instruction Range("A2") = "XXX " & Format(Montant, "#,##0.00"), ça fonctionne parfaitement ; j’ai exactement le résultat désiré, quel que soit le nombre de chiffres (j’ai testé avec 3957857857101.45, ça fonctionne encore, j'obtiens XXX 3'957'857'857'101.45 ).

Le résultat que tu obtiens chez toi est par contre surprenant ! N’as-tu pas, dans tes paramètres régionaux, une absence de signe comme séparateur des milliers ?

Encore merci à vous tous pour votre aide.

Les paramètres Français(France) ont l'espace comme séparateur de milliers... Tout est donc OK !

j’ai le message d’erreur ‘’Utilisation incorrecte de la propriété’’

Faut quand même l'affecter à une variable.

Debug.Print Application.International(XIThousandsSeparator)

Et puis ce n'est pas de ma faute si ils ont appelé .International ce qui concerne la régionalisation...

Je ne sais ce que tu veux en faire mais de mémoire c'est en lecture seule.

eric

Salut Eriiic et merci pour ta réponse.

Désolé, mais je ne vois pas trop bien comment appliquer ta solution à mon problème et j'ai un peu de peine à continuer à chercher puisque j'ai une autre solution qui me convient très bien. Mais ton aide est appréciée malgré tout

Bonne continuation.

Heuuu, tu veux me rendre chèvre ?

Je ne faisais que répondre à ta question :

instruction VBA capable de reconnaitre les paramètres régionaux m’intéresserait donc beaucoup. Avez-vous une idée ?

Que tu n'en aies plus besoin est autre chose...

eric

Bien entendu que non, que je veux te rendre chèvre

J’ai simplement tenté d’expliquer que je ne sais pas comment appliquer ton idée à mon problème et le fait que j’ai une autre solution ne m’aide pas à persévérer dans mes recherches.

eriiic a écrit :

Faut quand même l'affecter à une variable.

Désolé, je ne vois pas comment faire cela, du moins pas dans mon cas précis. Si tu voulais bien me fournir un fichier avec un exemple, je serais bien entendu preneur.

Chaleureusement.

Mais ça ne répond en rien à ta question initiale, juste à celle que tu as posée ensuite :

La question de savoir s’il est possible d’écrire une instruction VBA capable de reconnaitre les paramètres régionaux m’intéresserait donc beaucoup. Avez-vous une idée ?

Oui j'en ai une :

a=Application.International(xlDecimalSeparator)
b=Application.International(XIThousandsSeparator)
msgbox a & vblf & b

Je suppose donc que c'est toi qui avait une idée de comment l'utiliser à ton pb.

Bon, on va arrêter là non ? Je te sens fatigué...

eric

Merci infiniment pour ton aide. Très bonnes salutations.

Rechercher des sujets similaires à "vba separateur milliers"