chiffres sans valeur, le retour...

  • Initiateur de la discussion André
  • Date de début
A

André

Guest
Bonsoir le forum
Tout d’abord, merci à ceux qui ont répondu à mon mail ;
A on grand regret, les solutions proposées n’ont rien donné ;
La fonction CAR(cellule) renvoie le code 48, qui correspond, d’après mes essais, à la valeur 0
Et pourtant, il existe bien ce foutu caractère invisible !
Ci joint un fragment du fichier en question :
La colonne A se laisse additionner sans problème, mais essayez d’en faire autant avec les colonne B et C
Bon courage à ceux qui s’y frotteront. Le problème n’est pas grave, mais très agaçant…
Bonne soirée à tous
André
 

Pièces jointes

  • ENIGME.zip
    4.1 KB · Affichages: 15
  • ENIGME.zip
    4.1 KB · Affichages: 14
  • ENIGME.zip
    4.1 KB · Affichages: 14
T

Ti

Guest
c'est parce que tes nombres sont stockés sous forme de texte. Tu peux arranger ça en mettant dans une colonne supplémentaie =CNUM(B2), puis tu étends toute la colonne, ensuite soit tu fais tes calculs sur cette colonne supplémentaire, soit tu fais un copier-coller de ces vrais nombres sur ta colonne d'origine.
Ou alors, tu fais tes calculs directement, mais en mettant à chaque fois CNUM(B..) quand tu fais référence aux colonnes B ou C.
= A(3) + CNUM(B3) - CNUM(C3)
 
B

brett

Guest
bonsoir,

oui, Ti a tout à fait raison,

mais nouvelle enigme alors,:

pourquoi l'addition fonctionne si on additionne en ligne deux cellules (une de B avec celle de C à côté)

B2+C2 donne bien un résultat <> 0 !!

why ?

@+

brett.
 
C

Creepy

Guest
Bonsoir André, Le Forum,

J'y suis arrivé !! ?? !!

En faite je possède Excel 2003, et lorsque tu cliques sur une cellule Excel detecte qu'il s'agit de la forme d'un nombre mais au format texte.

Il affiche alors une petit panneau sur la gauche de la cellule, et quand tu cliques dessus il te propose une liste d'action.

J'ai choisi parmi celles-ci "Convertir en nombre" et voila ...

Par contre effectivement ca ne marche pas avec le méthode "traditionnelle" cellule/format, etc ...

Je ne comprends pas bien pourquoi !!

MAis bon voila la preuve de ce que j'annonce en PJ

++

Creepy
 

Pièces jointes

  • ENIGMECreepySoluce.zip
    8 KB · Affichages: 14
B

brett

Guest
pour info andré, ton caractère invisible est ' (simple cote)

saisi dans une cellule '12, et seul 12 apparaitra :)
la cote à disparue, mais à mis ta cellule en format texte.

CQFD

@+

brett
 
M

myDearFriend

Guest
Bonsoir André, et tout le monde,

A toutes fins utiles, voici la même chose que Ti en macro VBA :

Tu colles le code ci-dessous dans un module :

Sub Convertir()
Dim C As Range
On Error Resume Next
For Each C In Selection
If CDbl(C.Value) <> 0 Then C.Value = CDbl(C.Value)
Next
On Error GoTo 0
End Sub

Tu sélectionnes ta plage et tu lances cette macro.

Cordialement.
Didier
 
L

Lord Nelson

Guest
Salut à tous !

Je crois pouvoir lever un coin du voile :
L'énigme ne concerne que des réels, les entiers sont corrects.
J'ai écris en E7 0,763 en regard de B7 où tu as 0,763 aligné à gauche.
Ma saisie s'est alignée à droite, c'est normal.
J'ai ensuite comparé toutes les propriétés des deux cellules et constaté une différence sur Formula.
Ta cellule B7 contient 0,763
Ma cellule E7 contient 0.763 !
Il s'agit donc probablement d'un bug au niveau de la francisation d'Excel.
Essaie ceci :

If Range("B7").Formula <> Range("E7").Formula Then
MsgBox Range("B7").Formula & " " & Range("E7").Formula
End If

Etonnant non ?

A+
LN
 
A

Abel

Guest
Bonjour Ândré, tous

J'ai le même type de problème dans une base de données Oracle et VB pour tout ce qui est requètes et affichages. Je n'en connais pas les versions respectives et je ne suis pas maître de ces choix.

Certains affichages générés via VB sont faux (fonction sommes), et donc les exports correspondants aussi, pour les mêmes raisons.

Il semble que VB soit capricieux à ce niveau.
Il lui arrive aussi d'inverser les JJ/MM (format anglo-saxon/français) au moment de la récupération par VB (toujours DD/JJ/YY dans la base) notamment si le jour est inférieur au douxième mois (là quand même il se rend compte de quelque chose). Sur le problème de date, cela semble aussi aléatoire.

Notre développeur (société externe) ne connait pas la source de ces problèmes (il est pourtant pas si mauvais que ça, à priori).

Je sais que cela ne résoud pas tes problèmes.
D'autre part, il me semble avoir vu quelques fils sur ces sujets sur le forum (date notamment).

Si quelqu'un a une idée, quelle qu'elle soit .....


Le double clic sur la valeur dans Excel revalide le contenu en numérique comme dit plus haut ainsi que =cnum().
Cette solution est vite rébarbative surtout sur les gros tableaux, alors....

Bon week end malgré tout

Abel
 
A

André

Guest
Salut le forum
Vos mails m'ont amené deux solutions :
Ti a raison : en faisant CNUM( cellule), on convertit la valeur du format
?????? en numérique...
Lord Nelson a aussi raison : j'ai remplacé la virgule par un point, puis ce
point par une virgule; En le faisant directement, ça fonctionne; dès que je
le passe en macro, ça ne fonctionne pas ?????
La solution de Ti me convient, mais je vais m'empresser de mettre au courant mon expéditeur de fichiers mal foutus, afin qu'il s'arrange pour importer correctement ses valeurs.
Bon week-end à tous, et encore merci de votre aide
Si ce forum n'existait pas, avec ses experts, il faudrai l'inventer, et vite....
André
 
L

Lord Nelson

Guest
Salut André et tous !

Voici la macro la plus paradoxale que j'aie vu :

Sub Convertir()
'Voici une macro dingue :
'Il faut remplacer une virgule par un point
'pour obtenir.... une virgule
'Merci Mister Bill !
Dim CL As Range
Dim ST As String
For Each CL In Selection
ST = Replace(CL.Formula, ",", ".")
CL.Formula = ST
Next
End Sub

En fait, il ne faut pas chercher à revenir à la virgule, Excel le gère lui-même.

A+
et merci pour cette enigme.
LN
 
T

Ti

Guest
Lord Nelson, c'est simplement parce que VBA ne connaît que le point comme séparateur décimal, mais ensuite Excel retranscrit ce point selon les paramètres locaux, donc il remet une virgule chez nous. Cela n'est pas plus mal, chaque fois qu'on utilise VBA, on sait qu'on n'a qu'un seul séparateur : le point...
 
L

Lord Nelson

Guest
D'accord avec toi Ti, VBA n'a pas été francisé donc son séparateur décimal est un point (un point américain lol).

Le côté paradoxal des données d'André dans Excel est que leurs propriétés Text et Formula ont une virgule.
Or un nombre normal a une propriété Text avec virgule et une propriété Formula avec un point.
Donc, pour redonner aux chiffres d'André un comportement habituel, il convient de remplacer la virgule de leur Formula par un point.
Autrement dit, il faut les américaniser un peu pour qu'ils se comportent comme de bons Français !

A+
LN
 
A

Abel

Guest
Lord Nelson, Ti, Ândré, tous,

Fouuia !
Quel roman j'avais mis.

J'en étais au même point que Lord Nelson mais avec la variante suivante :

For Each c In Selection
c.Value = CDec(c)
Next c

Le problème est de règler la sélection si elle est "mouvante".

Ca marche aussi. Ca prend environ 2/100e de seconde sur l'exemple de Ândré sur une colonne.

L'idéal étant de travailler sur la passerelle entre la base de données et Excel.

A+

Abel
 
A

Abel

Guest
Bonjour tous,

Pour finir, j'ai rajouter un plus pour permettre de faire fonctionner cette petite fonction sur des colonnes ou des lignes entières :

Sub FormatNombre()
On Error Resume Next
For Each c In Selection
c.Value = CDec(c)
Next c
End Sub

J'ai mis cette fonction dans Perso.xls associée à un bouton dans les barres d'outils standarts.
Comme ça, c'est toujours dispo. Attention, cependant, en cas de changement de profil.

De plus, si cela fonctionne bien dans le cas soumis par Ândré, cela ne fonctionne pas s'il y a un séparateur décimal américain. Il faut combiner avec le code de Lord Nelson.


J'espère que mon blabla sera utile à quelqu'un.

Bonne journée.

Abel
 

Statistiques des forums

Discussions
312 513
Messages
2 089 217
Membres
104 065
dernier inscrit
il matador