Changer le séparateur de décimales de virgule en point [Résolu]

Signaler
Messages postés
94
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
28 juin 2020
-
Messages postés
94
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
28 juin 2020
-
Bonjour,

J'ai dans une table Accces une zone de format Text qui contient des nombres avec le point comme séparateur de décimales (ex : 123.0). Je remplis une grille avec ces données que je trie en ordre croissant. Le problème est que la zone est de format texte et non numérique, donc la séquence de tri est :


Comme on peut le voir, après 10.9, on ne passe pas à 11.0 mais à 100.0. Le 11.0 est beaucoup plus loin.

Je décide donc de changer le type de zone de Text en Integer (copie de la table dans une nouvelle table dont le champ est numérique) pour avoir un tri dans l'ordre numérique. Le problème est que le champ d'origine contient un point, ce qui n'est pas accepté come séparateur sur nos machines en Europe.

Changer le point en virgule est simple, mais remet en cause beaucoup de code qui est basé sur le texte avec un point. J'ai vu qu'il existait en VBA une instruction qui permeet de définir la valeur du séparateur décimal (Application.decimalSeparator = ".") mais pas valide en VB.

Question : existe-t-il en VB6 un moyen de forcer pour une zone numérique le séparateur de décimales à un point ?

Merci d'avance

Notpa

5 réponses

Messages postés
14452
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
28 juin 2020
419
Oui normalement ça devrait le faire si le numéro d’ordre ne dépasse pas 9.
Sinon, il te faudra appliquer le même principe dans la seconde partie
Par exemple pour des numéros d’ordre pouvant dépasser 99.
0001.001 => 0001.100

Sinon, tu mets 2 champs entier dans ta table et tu tries par page puis par ordre
Messages postés
14452
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
28 juin 2020
419
Bonjour

Je n’est pas la réponse à ta question finale, mais p’tet des pistes pour toi.

Je décide donc de changer le type de zone de Text en Integer (copie de la table dans une nouvelle table dont le champ est numérique) pour avoir un tri dans l'ordre numérique. Le problème est que le champ d'origine contient un point, ce qui n'est pas accepté come séparateur sur nos machines en Europe.


Je vais ignorer le terme Integer, puisqu’on parle de nombres décimaux.
Dans la base de elle-même, il n’y a ni point ni virgule. Ce qui est enregistré c’est un double ou float, format qui combine un nombre binaire entier (n) et un exposant entier (e) tel que x = n * 2^e avec x valeur binaire du nombre décimal (voir ici pour plus d’explications https://www.commentcamarche.net/forum/affich-35846831-erreur-de-calcul#3 )
Le symbole décimal intervient à 2 moments
  • à l’affichage
  • à la saisie (et c’est là que ça coince)


En effet, il y a quasiment autant de façon de représenter les nombres décimaux qu’il y a de pays.
Donc forcément pour que l’ordinateur s’y retrouve, il faut respecter une « culture »

Quoiqu’il en soit, pour que ta base de données considère ces valeurs comme des nombres décimaux, t’as pas le choix, il faut que tu les saisisses avec la bonne culture.

mais remet en cause beaucoup de code qui est basé sur le texte avec un point.

Bon, on va passer sur l’erreur de conception (faire des calculs sur du texte et non des nombres). Quand tu lis la base de données, tu convertis le nombre en texte et ensuite tu fais un replace de virgule en points

Une autre solution consisterait à multiplier toutes tes valeurs par 10 (en supposant qu’il n’y ait toujours qu’une décimale) et la tu les stockes dans un champ entier.
A la lecture tu construis ton texte en concatenant les résultats de la division euclidienne et du modulo par 10.
Messages postés
94
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
28 juin 2020
1
Bonjour whishmeril et merci de répondre.

faire des calculs sur du texte et non des nombres

Je ne fais pas de calculs. Ces nombres correspondent à des n° de pages et un n° d'ordre dans la page. Ex , 123.1 fait référence à la page n° 123 et au n°d'ordre 1. Jamais de calculs là dessus !

Je pense à une autre solution : modifier la base de données pour avoir toujours 4 chiffres suivis du point et d'un chiffre. Ex : 1.2 devient 0001.2, 123.5 : 0123.5, etc.

Avec cette méthode je n'ai plus besoin de zone numérique et garde ma zone format texte : le tri sera alors croissant et dans le bon ordre.

Qu'en penses-tu ?
Messages postés
94
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
28 juin 2020
1
OK. Je vais faire comme ça. Le deuxième chiffre ne dépasse jamais 9.

Merci pour ton aide. Comment fais-je maintenant pour ce sujet ? Le passer en Résolu n'est pas correct puisque je n'ai pas de solution mais juste un bypass. Peut-on marquer le sujet comme Annulé ou Bypassé ?
Messages postés
14452
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
28 juin 2020
419
Ha non, y'a pas de marquage en demi teinte, c'est résolu ou pas.
A toi de voir
Messages postés
94
Date d'inscription
dimanche 13 janvier 2019
Statut
Membre
Dernière intervention
28 juin 2020
1
Tant pis. Et comme on ne peut pas non plus modifier le titre...
Je passe donc en faux-Résolu.

Merci encore !

Notpa