Extraction chaine de caractere variable [RESOLU]

Extraction chaine de caractere variable [RESOLU] - VB/VBA/VBS - Programmation

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
Reply

Marsh Posté le 11-03-2013 à 11:42:38   

Reply

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 ?


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 11-03-2013 à 14:15:30    

 
           Bonjour !     Ben alors, et Sid ?    :sarcastic:  

Reply

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

Reply

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

Reply

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 …
 

Reply

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

Reply

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 ?


Message édité par Marc L le 11-03-2013 à 16:49:53
Reply

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?

Reply

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))
tenor = MsgBox("le tenor vaut : " & Left(Right(code, pos1), pos2))
Last = MsgBox("le last vaut : " & Left(Right(code, pos2), pos3) & Chr(10))

        … 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 …


Message édité par Marc L le 11-03-2013 à 17:06:12
Reply

Marsh Posté le 11-03-2013 à 16:59:16   

Reply

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

Reply

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


Message édité par Marc L le 11-03-2013 à 17:09:17
Reply

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?

Reply

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 …


Message édité par Marc L le 11-03-2013 à 17:48:36
Reply

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

Reply

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 :
  1. maturity = Left(code, pos1)
  2. MsgBox "la maturite vaut: " & maturity


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

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 :
  1. Sub TestExtractionPourLesGrosNulsNeSachantNiLireNiRéfléchir()
  2.         code = "100m 10y @123"
  3.           P1 = InStr(code, "m" )
  4.     maturity = Left(code, P1)
  5.           P2 = InStr(P1 + 1, code, "y" )
  6.        tenor = Trim(Mid(code, P1 + 1, P2 - P1))
  7.           P1 = InStr(code, "@" )
  8.         Last = Mid(code, P1 + 1)
  9.     MsgBox "M :  " & maturity & vbLf & vbLf & "T :  " & tenor & vbLf & vbLf & "L :  " & Last
  10. End Sub


           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 …


Message édité par Marc L le 11-03-2013 à 17:55:12
Reply

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)

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed