Extraction chaine de caractere variable [RESOLU] - VB/VBA/VBS - Programmation
Marsh Posté le 11-03-2013 à 14:08:38
Bonjour,
Ta question manque beaucoup de précisions :
c'est sur excel ou en vbs ?
Y a toujours un espace avant ton nombre ?
Quand il n'y a pas de /, qu'est-ce qui délimite la fin du nombre ?
Marsh Posté le 11-03-2013 à 14:34:31
en fait pour essayer d etre plus precis je dois decomposer une base de donnees de differents trades sur vba en excel.
et les espaces ne sont pas toujours present. quand au / des fois y a des valeurs soit juste a droite soit juste a gauche
Marsh Posté le 11-03-2013 à 14:35:30
marc ca va? bah justement je lui ai envoye un mail et je n ai toujours pas eu d aide de sa part donc je me tourne vers vous les amis , je suis au bout du rouleau faut vraiment que je puisse avancer
Marsh Posté le 11-03-2013 à 14:41:49
Effectivement cela manque d'infos …
Déjà, tu dois déterminer un repère pour pouvoir effectuer une extraction; sans, personne ne pourra t'aider …
Marsh Posté le 11-03-2013 à 16:39:44
voila j ai construit une fonction et j aimerais savoir pk mon tenor et mon last ne me renvoie rien (elles st censees renvoye 10y pour tenor et 123 pour last)
Sub Ext_Straddle()
Dim code As String
Dim maturity As String
Dim tenor As String
Dim Last As String
Dim pos1 As Integer
Dim pos2 As Integer
Dim pos3 As Integer
code = "100m 10y @123"
pos1 = InStr(code, "m" )
pos2 = InStr(Right(code, pos1), "y" )
pos3 = InStr(Right(code, pos2), "@" )
maturity = MsgBox("la maturite vaut: " & Left(code, pos1))
tenor = MsgBox("le tenor vaut : " & Left(Right(code, pos1), pos2))
Last = MsgBox("le last vaut : " & Left(Right(code, pos2), pos3) & Chr(10))
End Sub
Marsh Posté le 11-03-2013 à 16:48:58
Et as-tu vérifié les valeurs des variables pos1,2 & 3 ?
Car je verrais bien une mauvaise utilisation de la fonction Right dans les Instr des variables pos2 & 3
et certainement dans les variables maturity, tenor & Last ‼
Littéralement par rapport à l'exemple de la variable code, à quoi doivent correspondre chacune des six autres variables ?
Marsh Posté le 11-03-2013 à 16:51:51
pos1=4
pos2=3
pos3=0
maturity=100m
tenor=10y
last=123
marc t vraiment brillant tu le sais ca , juste en me posant la question tu m a montre que j ai fait une erreur j ai l impression que ds mon cas pos3 est fausse etant donne que la position la plus petite vaut 1 je pense non?
Marsh Posté le 11-03-2013 à 16:59:16
Ensuite tes trois dernières lignes sont "fausses" …
maturity = MsgBox("la maturite vaut: " & Left(code, pos1)) |
… car on ne peut pas affecter un variable et faire un MsgBox en même temps ‼
Donc affecter la variable seule puis le message ensuite …
Edit : pos 3 = 0 veut dire que ce qui est cherché n'est pas trouvé ! Normal vu le Right inutile …
En fait tout le code est faux, la "logique" est à revoir ‼
Ensuite les valeurs fausses des 6 variables ne m'intéressent pas car rien qu'en découvrant le code j'ai compris de suite
cela ne peut fonctionner en l'état, ce qu'on aimerait comprendre, ce sont les valeurs que t'aimerait obtenir pour chacune des 6 variables …
Marsh Posté le 11-03-2013 à 17:01:16
ah bon ? pourtant quand je la teste ca me donne la bonne valeur pour maturity mais ca me renvoie rien pour les 2 autres
Marsh Posté le 11-03-2013 à 17:08:34
Suite de mon edit précédent : en fait j'ai besoin de savoir uniquement les valeurs désirées des variables maturity, tenor & Last …
Marsh Posté le 11-03-2013 à 17:13:18
bah a vrai dire a partir ce cet exemple , les valeurs qui m interessent sont juste maturity , tenor et last (les autres je les ai crees juste pour simplifier les formules)
a partir de cet exemple j aimerais obtenir
maturity=100m (coresspond a la maturite d une option en finance 100mois par ex)
tenor=10y(date d application de mon swap 10years)
last=123 (prix auquel c negocie )
A ce point je suis loin d bon code?
Marsh Posté le 11-03-2013 à 17:18:19
yannn123 a écrit : ah bon ? pourtant quand je la teste ca me donne la bonne valeur pour maturity mais ca me renvoie rien pour les 2 autres |
L'affichage est bon (le msgbox) mais par exemple ajoute à la fin de de ton code
MsgBox "la maturite vaut: " & maturity |
et tu verras bien que la variable est fausse ‼
Et puis bon je n'invente rien, il suffit de lire l'aide intégrée de VBA concernant la fonction MsgBox, hein ‼
Supposant que ce n'est pas pour faire joujou avec des messages, il faut donc bien vérifier les variables …
Marsh Posté le 11-03-2013 à 17:25:54
tu peux m aiguuiller alors stp marc psk la ca fait une semaine que je suis decu j aimerais bien avancer un peu
Marsh Posté le 11-03-2013 à 17:36:27
Ce que Marc essaye de te dire c'est que tu ne peux pas affecter une valeur à un msgbox.
Il faut passer par une variable
Code :
|
Marsh Posté le 11-03-2013 à 17:46:00
Cela fait une semaine que tu aurais pu (dû ‼) lire l'aide intégrée de VBA des fonctions utilisées,
tu aurais compris d'où venaient tes erreurs ‼
Quant à la réplique de "Sid", XPTDR ‼ D'où mon silence et certainement de ceux qui auraient pu aussi t’apporter de l'aide ! …
Code :
|
Pour ceux que cela intéresse, l'intégralité de ce code est inutile car l'extraction peut (doit ‼) s'effectuer directement dans une cellule
car Excel dispose des fonctions nécessaires dans une feuille de calcul comme déjà évoqué dans le sujet du 8/3 dernier de yannn123 …
Marsh Posté le 13-03-2013 à 10:04:06
Merci marc c gentil pour ton aide , mais j avais deja trouve une solution assez proche de la tienne d ailleurs . Ensuite peut etre que je suis nul en programmation mais c pas la peine de prendre la grosse tete pour autant , y a bien d autres domaines ou tu m arrives pas a la cheville
Sur ce bonne continuation mon ami et je rigolais hihi j ai pris ton code (je suis vraiment nul)
Marsh Posté le 13-03-2013 à 10:12:11
la seule difference c que moi j ai recu ca c bizarre
Sub Ext_pourlesgeniestropfortpouruncodeaussifacile()
Dim code As String
Dim maturity As String
Dim tenor As String
Dim Last As String
Dim pos1 As Integer
Dim pos2 As Integer
code = "100m 10y @123"
pos1 = InStr(code, "m" )
maturity = Left(code, pos1)
pos2 = InStr(pos1 + 1, code, "y" )
tenor = Trim(Mid(code, pos1 + 1, pos2 - pos1))
pos1 = InStr(code, "@" )
Last = Mid(code, pos1 + 1)
MsgBox "M :" & maturity & vbLf & vbLf & " T :" & tenor & vbLf & vbLf & "L :" & Last
End Sub
Marsh Posté le 11-03-2013 à 11:42:38
Bonjour svp j aimerais savoir comment extraire une partie d une chaine de caractere variable
par exemple , si ma chaine est " 10m10y 245/147" je veux recuperer le 245 sachant que ma chaine est variable , elle peut contenir plus ou moins de caracteres ou bien elle peut meme ne pas avoir de /.
c t complique et ca fait 1 semaine que je suis sur ce probleme
Message édité par yannn123 le 13-03-2013 à 10:09:50