[VBA] Passer des formats "Personnalisé" ET "Texte" à NOMBRE

Salut à tous, premier post sur le forum, je commence juste à apprendre comment fonctionne le langage VBA. Je suis en train de lire "Excel 2013 Programming by Example". Les exos sont pas mal comme introduction, mais quelque-chose de plus concret dans le boulot serait peut-être plus motivant.

J'ai un cas qui se présente assez fréquemment. Un client me donne une extraction en provenance de son ERP au format excel. Je ne peux rien en faire parce-qu'il est rempli de "non-breaking spaces". Ca j'arrive à les supprimer avec un code que j'ai récupéré. Et ça me donne le fichier que j'ai joint.

Les données que je veux retraiter sont les données chiffrées.

Pour l'instant ces données sont dans un format Personnalisé ou Texte. Par exemple:

59,80 au format 00,00 ; -00,00

119,60 au format 000,00 ; -000,00

11026,950,00 au format 00,000,00 ; -00,000,00

13.556,55cr au format texte

Pour toutes les cellules qui contiennent un nombre suivi de "cr", il faut que je puisse supprimer "cr" et les passer en valeurs négatives, au format nombre avec deux décimales.

Pour les cellules restantes, il faut qu'elles se retrouvent au format nombre avec deux décimales.

Mes paramètres excel font que j'ai un séparateur de milliers qui s'affiche par un ".". Je ne sais pas dans quelle mesure ça pourrait être utile mais je le dis à tout hasard.

Je pense que retraiter les cellules qui contiennent "cr" ça doit être relativement facile, par contre c'est faire tout le reste en même temps qui me semble incompréhensible.

Merci d'avance de m'avoir lu en tous cas

Bonjour et bienvenue sur le forum

Un essai à tester, conçu comme un utilitaire.

Te convient-il ?

Bye !

58transfo-v1.xlsm (14.84 Ko)

Salut gmb,

D'abord merci beaucoup pour ton aide. J'ai essayé ta macro et j'ai l'impression que ça marche à la perfection.

Si tu trouves un moment j'aurais quelques questions par rapport au code utilisé.

Pourrais tu me décrire le rôle de ces lignes? Notamment Mid, Len et Next? Next est différent de Loop?

c = Mid(c, 1, Len(c) - 2) * -1
If c = 0 Then c = ""
    Next c

Et une dernière: est-ce-qu'il y aurait un moyen de lui dire que pour l'ensemble du Range il faut passer en format nombre?

En tous cas merci encore, c'est génial.

Bonjour

PireNobel a écrit :

Pourrais tu me décrire le rôle de ces lignes? Notamment Mid, Len et Next? Next est différent de Loop?Code: Tout sélectionnerc = Mid(c, 1, Len(c) - 2) * -1

c = Mid(c, 1, Len(c) - 2) * -1

Mid est une fonction qui permet d’extraire un nombre indiqué de caractères d’une chaîne de caractères

Ici, la chaine de caracère est celle contenue dans la cellule c

On commence à extraire à partir du premier caractère de la chaîne : 1

On en extrait deux de moins que la longueur de la chaine : ln(c) -2

On multiplie le résultat obtenu par moins 1 pour en faire un nombre négatif

Next

Il y a plusieurs façon de faire une boucle :

While …..wend

Do …loop

For … next

etc...

Pour avoir plus de détails et de meilleures explications que celles que je pourrais te donner, je te conseille de cliquer sur un de ces mots-clefs quand tu es sur une feuille macro et de taper sur la touche F1 : l’aide en ligne s’affichera alors et tu sauras tout sur celui-ci !

est-ce-qu'il y aurait un moyen de lui dire que pour l'ensemble du Range il faut passer en format nombre?

Il suffit d’ajouter une instruction :

27transfo-v2.xlsm (15.22 Ko)

OK ?

Bye !

Ha!

Je suis scié! Extraordinaire.

Merci pour tout, et j'ai bien noté pour F1.

Rechercher des sujets similaires à "vba passer formats personnalise texte nombre"