OVH Cloud OVH Cloud

vba : integer 123,4 converti en string 123.4

9 réponses
Avatar
twinley
Bonjour à tous

J'utilise avec satisfaction et sans vergogne une formule fournie par un maestro es MPFE

Pour convertir un string 123.4 en integer 123,
Sheets("Feuil1").Cells(1, 6) = 1 * Application.Substitute(Sheets("Feuil1").Range("F1"), ".", ","

C'est bô...et élégant

Je pensais faire la manip inverse assez facilement en reprenant la même et en inversant le substitute ..Range("F1"), ",", "."

Sheets("Feuil1").Cells(1, 6) = 1 * Application.Substitute(Sheets("Feuil1").Range("F1"), ",", "."
mais il y a une err13 type incompatible

Si une bonne âme pouvait faire tourner cette formule, ou a défaut proposer une façon de faire ? Après tout, il faut tout goûter

Merci d'avance

à+

9 réponses

Avatar
twinley
ou bien une conversion plus simple de le cellule car je récupère ce string d'une cellule dans un fichier texte
merci
Avatar
michdenis
Bonjour twinley,


" Pour convertir un string 123.4 en integer 123,4 "

Tu voulais dire convertir une chaîne de caractères en valeur numérique... Le type de variable "integer" en supporte pas
les nombres avec décimales !


Si tu veux utiliser ceci pour passer un nombre à une chaîne de caractère, tu remplaces ceci :

Sheets("Feuil1").Cells(1, 6) = 1 * Application.Substitute(Sheets("Feuil1").Range("F1"), ",", ".")

PAR:

Sheets("Feuil1").Cells(1, 6) = Application.Substitute(Sheets("Feuil1").Range("F1"), ",", ".")


Mais Attention : Tout ceci est une question du paramètre "décimale" défini sur ta machine.



Salutations!



"twinley" a écrit dans le message de
news:
Bonjour à tous,

J'utilise avec satisfaction et sans vergogne une formule fournie par un maestro es MPFE.

Pour convertir un string 123.4 en integer 123,4
Sheets("Feuil1").Cells(1, 6) = 1 * Application.Substitute(Sheets("Feuil1").Range("F1"), ".", ",")

C'est bô...et élégant.

Je pensais faire la manip inverse assez facilement en reprenant la même et en inversant le substitute ..Range("F1"),
",", ".")

Sheets("Feuil1").Cells(1, 6) = 1 * Application.Substitute(Sheets("Feuil1").Range("F1"), ",", ".")
mais il y a une err13 type incompatible.

Si une bonne âme pouvait faire tourner cette formule, ou a défaut proposer une façon de faire ? Après tout, il faut tout
goûter.

Merci d'avance

à+
Avatar
Philippe.R
Bonjour,
Avec en sus ceci, peut être :

Sheets("Feuil1").Cells(1, 6).NumberFormat = "@"
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"twinley" a écrit dans le message de
news:
Bonjour à tous,

J'utilise avec satisfaction et sans vergogne une formule fournie par un maestro es MPFE.

Pour convertir un string 123.4 en integer 123,4
Sheets("Feuil1").Cells(1, 6) = 1 * Application.Substitute(Sheets("Feuil1").Range("F1"), ".", ",")

C'est bô...et élégant.

Je pensais faire la manip inverse assez facilement en reprenant la même et en inversant le substitute
..Range("F1"), ",", ".")


Sheets("Feuil1").Cells(1, 6) = 1 * Application.Substitute(Sheets("Feuil1").Range("F1"), ",", ".")
mais il y a une err13 type incompatible.

Si une bonne âme pouvait faire tourner cette formule, ou a défaut proposer une façon de faire ? Après
tout, il faut tout goûter.


Merci d'avance

à+


Avatar
Frédéric Sigonneau
Bonjour,

Si le séparateur décimal de ton système est la virgule, une fois la virgule
remplacée par un point, le résultat, pour Excel, sera du texte. Et faire une
opération sur du texte (1* etc.), Excel n'aime pas..
Par ailleurs, il faut un peu forcer la main d'Excel pour que le résultat soit
bien réécrit comme du texte. Essaye comme ceci :

Sheets("Feuil1").Cells(1,6)= "'" & _
Application.Substitute(Sheets("Feuil1").Range("F1"), ",", ".")

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

Bonjour à tous,

J'utilise avec satisfaction et sans vergogne une formule fournie par un maestro es MPFE.

Pour convertir un string 123.4 en integer 123,4
Sheets("Feuil1").Cells(1, 6) = 1 * Application.Substitute(Sheets("Feuil1").Range("F1"), ".", ",")

C'est bô...et élégant.

Je pensais faire la manip inverse assez facilement en reprenant la même et en inversant le substitute ..Range("F1"), ",", ".")

Sheets("Feuil1").Cells(1, 6) = 1 * Application.Substitute(Sheets("Feuil1").Range("F1"), ",", ".")
mais il y a une err13 type incompatible.

Si une bonne âme pouvait faire tourner cette formule, ou a défaut proposer une façon de faire ? Après tout, il faut tout goûter.

Merci d'avance

à+


Avatar
twinley
Merci à vous pour ces réponses

Les trois produisent une "erreur d'éxécution 9 : l'indice n'apparaît pas à la sélection

Je ne suis pas loin mais un détail m'échappe encore. Je suis confiant pour la finalisation du débuggage..

à+
Avatar
michdenis
Bonjour twinley,

Est-ce que tu as une feuille qui porte le nom de "Feuil1" dans le classeur, ta formule fait référence à cette feuille. ?


Salutations!



"twinley" a écrit dans le message de
news:
Merci à vous pour ces réponses.

Les trois produisent une "erreur d'éxécution 9 : l'indice n'apparaît pas à la sélection"

Je ne suis pas loin mais un détail m'échappe encore. Je suis confiant pour la finalisation du débuggage...

à+
Avatar
twinley
Ohlala, la honte... j'avais changé la reference de ma feuille par Feuil1. Quel c..

Merci Michdenis c'est bien ça, mais rien ne bouge avec ta formule, pas même une erreur
Sheets("Feuil1").Cells(1, 6) = Application.Substitute(Sheets("Feuil1").Range("F1"), ",", "."

La soluce de Philip est nickel-chrome. Exactement ce que je voulais
'Sheets("tick").Cells(2, 6).NumberFormat = "@

et celle de Frédéric fonctionne comme une montre Suisse en or
'Sheets("Feuil1").Cells(1, 6) = "'" & Application.Substitute(Sheets("Feuil1").Range("F1"), ",", "."

Il aut se rendre à l'évidence le petit coup de "= "'" & Application.Substitute" fait la différence
Je n'ose pas demander pourquoi
et encore moins pourquoi le = "@" fonctionne aussi

Devant cette profusion de possibilité, j'ai une autre question. Comme savoir qu'elle formule est la moins gourmande en temps de calcul ? Existe t'il des benchs ou des info qui permettent de choisir la plus rapide des formules
J'ai vu deux poste plus loin comment afficher les centièmes de secondes. C'est aussi une facon de faire

Tout baigne, ça marche comme je veux

Salutations respectueuses et admirative

à+
Avatar
twinley
et le winner is..

la soluce de Frédéric car j'ai besoin de garder la cellule au format standard, pour entrer un chiffre avec virgule et il se cadre à droite
La version "@" modifie le format en caractère. Et cela répond à une question que je me posais depuis un moment

Grâce à vous trois, quelle progression

à+
Avatar
twinley
Bonsoir

Finalement après avoir écrit plus bas que rien ne se passait, si on applique à une variable, cela marche parfaitement

Pas de changement
Sheets("Feuil1").Cells(1, 6) = Application.Substitute(Sheets("Feuil1").Range("F1"), ",", "."

Envoi dans une variable string bravo : o
bravo = Application.Substitute(Sheets("Feuil1").Range("F1"), ",", "."

Encore merci, mais que c'est subtile ce VBA...