Manipulation chaine de caractere, fonction VAL

Bonjour,

J'utilise la fonction Val pour obtenir la valeur numérique contenue dans une chaîne de caractère.

Dans ce cas là :

Chaine = " siècle 21"
MsgBox Val(Chaine) ' renvoie 0

Je souhaiterai que la valeur renvoyée soit 1. Savez-vous comment faire ?

Vous trouverez ci-joint mon fichier exemple.

Merci d'avance !

Batoine

69test.xlsm (16.95 Ko)

Bonjour batoine,

Si tu veux uniquement transformer le dernier caractère, change

exctraction = Right(Selection, 7)

par

exctraction = Right(Selection, 1)

(Dans ton exemple, Right(Selection, 7) retourne un string comportant dans lettres, d'où le 0 car il n'arrive pas à le changer en valeur numérique)

Maxz

Bonjour Maxz, le forum

Merci pour ta réponse, j'ai volontairement écrit 7 car le chiffre final peut aller de 1 à 999.

Pour mieux décrire le projet, la chaine de caractère initial est une clé primaire. En fonction de différents éléments qui sont :

* Numéro département

* Nom du chantier

* Nom du sous-traitant

* le numéro de l'offre sous la forme : "Offre 1" . Comme expliqué ci-dessus ce numéro peut aller jusqu'à "Offre 999".

Donc si j'écris :

exctraction = Right(Selection, 1)

Et que le chiffre est en réalité un nombre de 2 ou 3 caractères. Ceci ne fonctionnerait pas.

La méthode à adopter selon moi serait :

1.récupérer l'ensemble de caractère situé après le dernier espace

2.convertir cette string en nombre (voir ci nécessaire).

Cette méthode est-elle réalisable ? Si oui, comment procéder ?

Merci d'avance ?

Batoine


Bonjour,

J'ai finalement trouver la réponse. J'ai finalement utilisé la fonction reverse, utile par exemple pour vérifier si un mot est un palindrome.

Voici le bout de code avec la méthode commentée ci-dessus :

Reverse = StrReverse(Selection) 'on inverse l'ordre des caractère

num_espace = InStr(Reverse, " ")    'on repère l'emplacement du 1er espace

decoupage = Left(Reverse, num_espace - 1)   'on ne garde que la partie à gauche du 1er espace

num_version = StrReverse(decoupage)     'on inverse enfin le "découpage" afin d'avoir les nombre dans l'ordre

Je vous joins aussi mon fichier, en espérant que cela serve aux futurs utilisateurs ayant cette même problématique.

Bonne journée à tous,

Batoine

72test.xlsm (18.68 Ko)

Plus rapide que moi, enfin si tu veux une version sans macro...

Maxz

67test-1.xlsm (13.96 Ko)

Merci pour cette version ! Je garderai la version avec macro, mon projet en compte déjà.

En tout cas je ne connaissais pas cette façon (un peu plus lourd à lire quand même).

Sinon peut-être que tu pourras répondre à ma question. La solution aurait grandement pu être optimisé avec une fonction du même type que InStr mais en sélectionnant non pas la première occurrence mais la dernière.

Sais-tu si cette fonction existe telle quelle?

Non, mais cependant tu as sur Excel 2013 (et seulement 2013), InStrRev (je viens de le découvrir en cherchant)

https://msdn.microsoft.com/en-us/library/office/gg251545.aspx

Rechercher des sujets similaires à "manipulation chaine caractere fonction val"