Import txt en format scientifique - méthode de conversion

dieu08

XLDnaute Occasionnel
Bonjour les forumiteux,

J'ai une macro qui fonctionnait parfaitement bien jusqu'à présent. Une situation particulière me pose des difficultés.

La macro réalise la mise en forme d'un tableau sur la base d'un import réalisé sur la base d'un fichier txt. Je précise que je n'ai pas la main sur l'import ; je récupère directement les données dans mon fichier Excel.

La situation est la suivante : dans une cellule je dois récupérer une valeur en txt pour agir sur son format.

Or dans ma cellule je récupère une valeur en format scientifique et je n'ai pas trouvé la méthode pour la reconvertir dans un format txt que je puisse exploiter.

Je joins un exemple pour plus de clarté.

J'avais déjà soulevé un problème de ce genre pour des valeurs contenant des lettres :

https://www.excel-downloads.com/threads/resolu-formatage-numero-de-compte-avec-lettres.207851/

Ce cas est un peu différent et j'ai besoin de votre aide.

Merci.
 

Pièces jointes

  • exemple1.xlsx
    10.8 KB · Affichages: 52
  • exemple1.xlsx
    10.8 KB · Affichages: 55

CISCO

XLDnaute Barbatruc
Re : Import txt en format scientifique - méthode de conversion

Re

J'ai bien trouvé une formule qui convient, malheureusement pas dans tous les cas. Exemple, quels critères utiliser pour différencier :
0072210E032-->7,221E+36

0722100E032-->7,221E+37

@ plus
 

dieu08

XLDnaute Occasionnel
Re : Import txt en format scientifique - méthode de conversion

Re

J'ai bien trouvé une formule qui convient, malheureusement pas dans tous les cas. Exemple, quels critères utiliser pour différencier :
0072210E032-->7,221E+36

0722100E032-->7,221E+37

@ plus

Re,

Le fait de savoir qu'il y a forcement 11 digits dans la valeur ne peut pas servir à compléter par des "0" en début de valeur ?
 

CISCO

XLDnaute Barbatruc
Re : Import txt en format scientifique - méthode de conversion

Bonjour

Et non, puisque certaines fois il faut compléter par 1 "0", et d'autres par deux "0". Bien sûr on pourrait le faire si on savait que les exemples précédents se finissent en 32, mais comme on ne le sait pas, ou que tous les nombres finissent de la même manière dans le fichier initial, mais comme je suppose que ce n'est pas le cas !

Pour compléter mon précédent post, un autre exemple :
0072210E032-->7,221E+36

0722100E032-->7,221E+37

0722100E031-->7,221E+36

Deux affichages identiques pour deux codes initialement différents !!!

@ plus
 
Dernière édition:

dieu08

XLDnaute Occasionnel
Re : Import txt en format scientifique - méthode de conversion

Apparemment j'arrive à retrouver mes petits avec le script que m'avait déjà proposé PierreJean (merci Modeste Geedee) :

Sub test()
Columns(1).NumberFormat = "@"
For n = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Mid(Range("A" & n), Len(Range("A" & n)) - 3, 2) = "E+" Then
x = InStr(Range("A" & n), ",")
y = InStr(Range("A" & n), "E")
Z = Mid(Range("A" & n), x + 1, y - x - 1)
zz = Len(Z)
a = Replace(Range("A" & n), ",", "")
a = Replace(a, "+", "0")
aa = CInt(Right(a, 2)) - zz
aaa = CStr(Left(a, Len(a) - 2) & aa)
While Len(aaa) < 11
aaa = "0" & aaa
Wend
Range("A" & n) = aaa
End If
Next
Columns(1).NumberFormat = "00000000000"
End Sub

Dans ce cas, il me manque juste un morceau de script pour appliquer le code précédent uniquement si la cellule contient un "E" dans la valeur. Des propositions ?
 

CISCO

XLDnaute Barbatruc
Re : Import txt en format scientifique - méthode de conversion

Bonjour

En pièce jointe, mon essai avec une formule, mais il n'est pas correct dans au moins 2 cas, mis en rouge grâce à une MFC.

@ plus
 

Pièces jointes

  • exemple1-1.xlsx
    12 KB · Affichages: 29

dieu08

XLDnaute Occasionnel
Re : Import txt en format scientifique - méthode de conversion

Cisco, Modeste Geedee,

Je refais le point demain sur toutes les méthodes proposées car je suis en train d'y perdre mon latin. Merci en tous les et à demain pour de nouvelles aventures...
 

Modeste geedee

XLDnaute Barbatruc
Re : Import txt en format scientifique - méthode de conversion

Bonsour®
Bonjour

En pièce jointe, mon essai avec une formule, mais il n'est pas correct dans au moins 2 cas, mis en rouge grâce à une MFC.

@ plus

ton contrôle MEFC tu le fait par rapport à une donnée "brute" colonne A qui en principe n'est plus accessible après que Excel y ai mis sa patte "by Design"
:(


Colonne A Colonne B Colonne C
1722100E032 1,722100E+38 0172210E033
0172210E033 1,722100E+38 0172210E033
0017221E034 1,722100E+38 0172210E033

les données colonne A sont semblables numériquement,
ce que EXCEL "By design" interprète en colonne B
et c'est sur cette valeur que la formule s'applique !!!

Conclusion il n'est pas possible de savoir ce que EXCEL a lu !!
Il faut avoir accès aux données avant import, afin de contrer l'interprétation automatique "By Design"
 

CISCO

XLDnaute Barbatruc
Re : Import txt en format scientifique - méthode de conversion

Bonsoir

Bonsour®

ton contrôle MEFC tu le fait par rapport à une donnée "brute" colonne A...
Conclusion il n'est pas possible de savoir ce que EXCEL a lu !!
Il faut avoir accès aux données avant import, afin de contrer l'interprétation automatique "By Design"

Modeste geedee, je sais bien tout ce que tu dis là.
Je n'ai pas mis ce fichier avec cette MFC pour montrer qu'on pouvait utiliser cette formule, et que grâce à la MFC, on voyait les résultats dont il faut se méfier, mais pour le contraire : Montrer qu'on ne pouvait pas utiliser cette formule car elle ne donnait pas toujours les bons résultats, la MFC n'étant là que pour mettre en évidence les résultats ne convenant pas, MFC qui ne peut exister dans le fichier réel de Dieu08. Cette MFC, ce n'est pas un controle, mais une mise en évidence possible dans ce fichier, mais pas dans le fichier réel.

Cette proposition, cette formule n'est là que pour montrer un chemin possible, mais je doute qu'il aboutisse, avec une formule vraiment polyvalente. Pour preuve, mon dernier exemple de problème, deux codes initiaux différents donnant le même résultat au format scientifique.

Je ne pense pas que cela soit résolvable, aussi bien par formule que par macro. Si Dieu08 utilise la macro proposée par PierreJean, il risque d'avoir des résultats faux, sauf si les codes initiaux comportant des E ne balayent pas tous les cas que j'ai envisagés, et par exemple s'il y a des "ressemblances" entre eux que Dieu08 ne nous a pas signalé (Par exemple, que tous ces codes commencent par un seul "0").

@ plus
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Import txt en format scientifique - méthode de conversion

Salut Patrick©
Bonsoir, Modeste geedee.

In French, what means "By design" ?

textuellement : "tel que conçu"

précisément : capacité que EXCEL possède pour la reconnaissance automatique des données saisies en format standard
- sans intervention de l'utilisateur
- sans possibilité de contournement

en pratique :
par exemple
- lors de la saisie de ":" après une suite numérique Excel sait qu'il s'agit d'une représentation horaire
ex : 900:
valeur reconnue 37,5 au format [h]:mm

- lors de la saisie de "/" après un nombre de 2 chiffres inferieur à 32 Excel suppose un début de saisie de date selon format défini dans les options
ex : 15/2
valeur reconnue 15 Février soit 42050 et non 7,5
mais pas de reconnaissance pour 134/5

- signe "=" au début d'une saisie, Excel détecte la saisie d'une formule

- de même la présence d'un "E" dans une chaine comportant exclusivement des numériques suppose une notation scientifique :
Mantisse E Exposant
cas du problème de ce fil
ex : 1200E32 ou 120E33 ou 12E34

- sur la version anglaise :
9A ou 9P sont reconnus comme 9:00AM et 9:00PM
- sur les versions Arabes reconnaissance date Hijri

etc...
certainement d'autres exemples... je n'ai jamais trouvé de lectures exhaustives de ce "By Design"
 

dieu08

XLDnaute Occasionnel
Re : Import txt en format scientifique - méthode de conversion

Bonjour Messieurs,

J'ai fait le point sur les différentes propositions et j'ai bien lu l'ensemble de vos publications.

Il semble effectivement difficile d'obtenir une solution qui s'applique à tous les cas.

Pour ce qui est du point sur les propositions, je vous invite à consulter le fichier joint qui contient :

- l'onglet "bordereau_brutes" contient les données d'origine de l'import; j'ai ajouté en colonne C la mention des valeurs attendues
- l'onglet "bordereau_PJ" contient les données retravaillées avec le code de PierreJean (colonne A); le code est joint au fichier
- l'onglet "bordereau_Cisco" contient les valeurs obtenues avec la formule de Cisco (colonne E)

Au final :

- le code de PierreJean ne me fournit pas les bonnes valeurs dans les 4 situations où le "E" est présent
- la formule de Cisco est bonne dans 2 situations sur 4

Si par vos connaissances, vous pouvez me proposer des aménagements de telles ou telles solutions, je suis évidemment preneur.

Merci encore pour vos participations respectives.
 

Pièces jointes

  • exemple1_forum.xlsm
    20.6 KB · Affichages: 32
  • exemple1_forum.xlsm
    20.6 KB · Affichages: 31

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel