Bonjour a tous
J'ai un probleme dans ma fonction VBA. La fonction doit prendre une chaine de caractere contenue dans une cellule puis extraire chaque caractere numerique. Le code bug ici :
Code:
Sub azerty()
Dim e As String
Dim c As String
Dim l As Long
c = "BAT3 ETG2D 3062D"
l = 9
e = Val(Mid(c, l))
End Sub
Normalement, le code parcour chaque cellule du fichieret chaque caractere de chaque cellule, c'est pour simplifier que je n'ai mis que la valeur qui pose probleme.
En fait je voudrais qu'il me renvoit ici e=2 (le neuvieme caractere), mais la il me met "erreur d'execution 6 : dépassement de capacité".
Je ne comprend pas pourquoi, ce code marche tres bien sur n'importe quelle autre cellule c'est juste celle la qu'il n'aime pas... Et comme e est déclaré en string et c et l en double je ne comprend vraiment pas...
Si vous avez une idée je suis preneur !
Merci d'avance
Dans le code que tu as envoyé, tu as omis le troisième argument de l'instruction Mid.
Si cet argument est omis, c'est la totalité du string après la position de départ qui est prise en compte. Du coup en mettant l'argument Length à 1 ça marche chez moi.
Comme ceci:
Code:
Sub azerty()
Dim e As String
Dim c As String
Dim l As Long
c = "BAT3 ETG2D 3062D"
l = 9
e = Val(Mid(c, l, 1))
End Sub
Je me suis tout de même demandé pourquoi cela provoquait un dépassement de capacité, car normalement Val restitue ce qu'il pu interpréter. Du fait qu'un "C" ne saurait faire partie d'un nombre :
Val("123 C 3") --> 123 mais :
Val("123 E 3") --> 123000 soit (123.*10^3), mais, surprise :
Val("123 D 3") --> 123000 aussi ! Le "D" est aussi reconnu comme annonçant un exposant de puissance de 10.
On dirait une influence d'un vieux langage: le FORTRAN, où c'était une façon normale d'exprimer un nombre en double précision.
Dans l'exemple il avait donc reconnu 2 * 10^3062. Un peu grand l'exposant …
Merci pour ces précisions ! J'avais effectivement déja eu ce probleme avec le E je n'aurais jamais pensé que le D était également considéré comme un exposant... En tout cas merci beaucoup