Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
743 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Extraction chaine de caractere variable [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Extraction chaine de caractere variable [RESOLU]

n°2179652
yannn123
Posté le 11-03-2013 à 11:42:38  profilanswer
 

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
mood
Publicité
Posté le 11-03-2013 à 11:42:38  profilanswer
 

n°2179699
vave
Nice to meet me
Posté le 11-03-2013 à 14:08:38  profilanswer
 

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
n°2179700
Marc L
Posté le 11-03-2013 à 14:15:30  profilanswer
 

 
           Bonjour !     Ben alors, et Sid ?    :sarcastic:  

n°2179714
yannn123
Posté le 11-03-2013 à 14:34:31  profilanswer
 

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

n°2179715
yannn123
Posté le 11-03-2013 à 14:35:30  profilanswer
 

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

n°2179719
Marc L
Posté le 11-03-2013 à 14:41:49  profilanswer
 

 
           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 …
 

n°2179758
yannn123
Posté le 11-03-2013 à 16:39:44  profilanswer
 

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

n°2179766
Marc L
Posté le 11-03-2013 à 16:48:58  profilanswer
 

 
           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
n°2179768
yannn123
Posté le 11-03-2013 à 16:51:51  profilanswer
 

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?

n°2179772
Marc L
Posté le 11-03-2013 à 16:59:16  profilanswer
 

 
           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
mood
Publicité
Posté le 11-03-2013 à 16:59:16  profilanswer
 

n°2179774
yannn123
Posté le 11-03-2013 à 17:01:16  profilanswer
 

ah bon ? pourtant quand je la teste ca me donne la bonne valeur pour maturity mais ca me renvoie rien pour les 2 autres

n°2179782
Marc L
Posté le 11-03-2013 à 17:08:34  profilanswer
 

 
           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
n°2179785
yannn123
Posté le 11-03-2013 à 17:13:18  profilanswer
 

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?

n°2179788
Marc L
Posté le 11-03-2013 à 17:18:19  profilanswer
 

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
n°2179792
yannn123
Posté le 11-03-2013 à 17:25:54  profilanswer
 

tu peux m aiguuiller alors stp marc psk la ca fait une semaine que je suis decu j aimerais bien avancer un peu

n°2179800
vave
Nice to meet me
Posté le 11-03-2013 à 17:36:27  profilanswer
 

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
n°2179806
Marc L
Posté le 11-03-2013 à 17:46:00  profilanswer
 

 
           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
n°2180151
yannn123
Posté le 13-03-2013 à 10:04:06  profilanswer
 

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)

n°2180155
yannn123
Posté le 13-03-2013 à 10:12:11  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Extraction chaine de caractere variable [RESOLU]

 

Sujets relatifs
[macro WORD]: extraction de phrases à partir de mot clépassage de variable en javascript
je peut Récupérer une variable Javascript dans une variable PHPgrep caractère joker "dans les deux sens"
[VBA] activer feuille avec variable dans le nom[Résolu]Variable modifié entre deux fonctions
Macro excel : le nom de variable apparaît dans la formule excelCHaine coupé dans le value d'un input
Récupéré un bout de chaineVariable de type texte Access
Plus de sujets relatifs à : Extraction chaine de caractere variable [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR