Format de nombre

Bonjour à tous,

J'ai un petit probleme de format à vous soumettre.

Pour des raisons un peu compliquées sur lesquelles je passerai, j'ai un fichier de données avec des chiffres et des @ à la place des virgules.

Exemple:

1@25 = 1,25

0@235 = 0,235

etc...

Je souhaite remplacer le caractere @ par une virgule afin qu'excel les reconnaissent en tant que nombre.

pour cela j'utilise la fonction Replace qui fonctionme plutot bien, sauf que parfois il zappe la virgule et affiche le nombre avec un separateur de millier automatiquement.

En y regardant de plus près, je me suis rendu compte que quand le nombre commence par 0, ca fonctionne toujours, en revanche si le nombre commence par un autre chiffre que 0 et qu'il y a plus que deux chiffre derrière (ex: 1@235 ou 42@2356), alors il ne me remplace pas le @ par une virgule mais par un separateur de millier (1 235 et 422 356).

J'ai essayé de trouver une solution au moyen da la fonction Format, mais malheureusement, une fois le @ remplacé, le mal est fait et la fonction format n'y change plus rien (avec ou sans virgule, le chiffre est reconnu en tant que tel).

C'est un peu tordu, et j'espère que qqun aura une idée à me soumettre!

Merci pour vos réponses.

Eric

Salut,

Regarde de ce coté la avec la fonction substitue.

https://www.excel-pratique.com/fr/fonctions/substitue

En espérant t'avoir aidé

Liko

bonjour,

avec ton fichier ça serait plus simple car moi quand je fais l'essai avec les 2 exemples que tu as donné celà fonctionne

cdt,

jéjé62600

Bonjour,

5ericbog.xlsx (7.99 Ko)

Merci pour vos réponses.

J'ai oublié de le préciser, je cherche une solution en programmation VBA (cela me semblait implicite car j'avais posté le message dans le forum VBA).

Autre chose que je n'ai pas précisé et qui peu avoir son importance, le fichier dans lequel se trouve les valeurs avec les @ est un format .csv (j'ai joint le fichier)

Peut etre que cela peut avoir une influence.

Mon code VBA (qui ne fonctionne pas est le suivant):

'Je copie les cellules du fichier .csv (wsImp) vers un autre fichier .xls (wsDat)
wsImp.Range("A1").CurrentRegion.Copy wsDat.Range("A1")
'Je remplace les "@" par des "," dans les colonnes des chiffres
wsDat.Columns(13).Replace What:="@", Replacement:=",", LookAt:=xlPart
wsDat.Columns(15).Replace What:="@", Replacement:=",", LookAt:=xlPart
wsDat.Columns(17).Replace What:="@", Replacement:=",", LookAt:=xlPart

Merci pour vos efforts.

Eric

Tes données CSV te vienne d'Energy+?

Si tel est le cas la méthode que j'utilisais pour séparer les valeurs est la conversion. J'ai enregistre la procédure pour e retirer le VBA et l'associer a un bouton.

Je doute que ça puisse t'aide mais on ne sais jamais

Liko

Non, mais d'une plateforme de telechargement (Prisma, vente de capacité de transport gas).

La transformation un peu bizarre que je dois faire est pour éviter qu'il ouvre le fichier .csv (le fichier telechargé) avec une reconnaissance automatique de certaines valeurs en format date (1.04 => 1 Apr). Du coup l'astuce est d'enregistrer le .csv en format texte, et de remplacer les "." par des "@", puis ensuite sous excel les "@" par des ","

J'ai cru avoir trouvé l'astuce, mais voila, j'en arrive au probleme exposé ci-dessus, que je ne comprends pas vraiment.

Je précise que ma macro fait tout automatiquement (téléchargement des données sur le site, enregistrement du fichier en format text csv, puis manipulation des données). Je voudrais donc essayer de trouver une solution pour le probleme posé afin de ne pas avoir à retoucher au reste du code.

Merci. Eric

EricBOG a écrit :

Bonjour à tous,

En y regardant de plus près, je me suis rendu compte que quand le nombre commence par 0, ca fonctionne toujours, en revanche si le nombre commence par un autre chiffre que 0 et qu'il y a plus que deux chiffre derrière (ex: 1@235 ou 42@2356), alors il ne me remplace pas le @ par une virgule mais par un separateur de millier (1 235 et 422 356).

Eric

tu peux peut-être faire avant le replace une concaténation "0"&12@345 ... ?

Bon, j'ai réussi à trouver une solution en contournant le probleme.

Après avoir copié les valeurs avec @ dans la feuille excel, je n'utilise plus la fonction vba replace, mais la fonction excel substitute directement écrite sur la feuille (j'ail la chance que le nombre de colonne de mon export soit fixe).

le @ est remplacé par , et j'écrase la cellule avec le @ par la valeur de la cellule avec la ,

C'est un peu du rafistolage, mais ca a l'air de fonctionner...

Merci à tout ceux qui ont pris un peu de temps pour réfléchir à mon probleme.

Eric

Bonjour,

Cela reste un peu frustrant, surtout de devoir faire la transformation via @.

Généralement, on adopte une telle solution quand on ouvre un fichier csv via VBA; en effet VBA est "américanisé" et donc interprête les , ; et . d'une autre manière ...

Il existe pourtant une solution via VBA que je te conseille d'utiliser :

Sub ouvrir_csv()

Nom_Fichier = Application.GetOpenFilename("Fichiers csv, *.csv")
If Nom_Fichier <> False Then
    Workbooks.OpenText Filename:=Nom_Fichier, Origin:=xlWindows, _
        StartRow:=1, DataType:=xlDelimited, Local:=True, Semicolon:=True
End If

End Sub

J'aurais bien aimé avoir un bout de fichier original avant modification avec @ pour tester cette solution !

Rechercher des sujets similaires à "format nombre"