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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Modifier un nombre à virgule dans un texte (dans une textbox)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Modifier un nombre à virgule dans un texte (dans une textbox)

n°1673030
restk
Posté le 17-01-2008 à 22:19:06  profilanswer
 

Bonjour,
 
Voilà le problème :
A partir d'une textbox contenant par exemple :"blabla blabla truc(89,7689) blabla blabla truc(45,78)"
je cherche à modifier les 2 nombres entre parenthèses de tel façon que si je mets  x= 3 et y = -456 que j'obtienne dans une nouvelle textbox quelque chose du genre :
"blabla blabla truc(92,7233) blabla blabla truc(48,-378)" (si je me suis pas trompé)
Sachant aussi que les nombres que je dois modifier doivent impérativement être ceux de "truc(,)" et pas autre chose.
 
Je vois pas par où commencer ou comment procéder, si il faut faire une recherche de caractère puis modifier d'abord les nombres...
J'espère être assez clair dans mes explications (je suis débutant).
 
Merci pour votre aide.  :jap:


Message édité par restk le 06-02-2008 à 22:44:46
mood
Publicité
Posté le 17-01-2008 à 22:19:06  profilanswer
 

n°1673085
dreameddea​th
Posté le 18-01-2008 à 01:27:42  profilanswer
 

Tu peux essayer les expressions régulières c'est très puissant.
 
En VBA, pour pouvoir en faire il faut rajouter en utilisant une nouvelle bibliothèque.
 
Pour ce faire utilise le menu :
Outils->Références et dans la liste, cocher "Microsoft VBScript Regular Expressions 5.5"
 
Ensuite il faut l'utiliser d'une manière equivalente à

Code :
  1. Sub Test()
  2.     Dim rgxp As New regexp
  3.     Dim matches As MatchCollection
  4.     Dim match_elt As Match
  5.     Dim nb_1 As Integer
  6.     Dim nb_2 As Integer
  7.     rgxp.Pattern = l'expression régulière qui va bien
  8.     rgxp.Global = True
  9.     Set matches = rgxp.Execute(str)
  10.     ' Boucle sur les truc(nb_1,nb_2) trouvés
  11.     For Each match_elt In matches
  12.         ' SubMatches(0) contient la permière parenthèse de capture, SubMatches(1) la deuxième, ....
  13.         nb_1 = match_elt.SubMatches(0) + le nombre x
  14.         nb_2 = match_elt.SubMatches(1) + le nombre y
  15.         ' la méthode value permet d'obtenir la chaine complète
  16.         str = Replace(str, match_elt.Value, la nouvelle chaine genre truc(nb_1 +x, nb_2 +y), , 1)
  17.     Next
  18. End Sub


 
Voilà pour l'utilisation d'une expression régulière.  
 
Histoire de ne pas faire tout le boulot (sinon c'est pas drôle), Il reste des truc à remplir : str doit être remplacé par ta textbox, récupérer X et Y, mettre l'expression régulière  
 
Pour ce qui est l'écriture d'un expression régulière google est ton ami.
Néanmoins qq indices :  

  • les parenthèses servent à capturer l'information (la récupérer), donc il doit y avoir des parenthèse autour des nombres
  • un nombre s'ecrit \d+ (sans signe) ou -?\d+ (pour un signe - optionnel)
  • attention les parenthèses doivent être protégés par \ quand on veut signifier le caractère "(" ou " )" au lieu de la "capture"


Bon courage,
 
Tiens nous au courant


Message édité par dreameddeath le 18-01-2008 à 01:43:45
n°1674002
restk
Posté le 20-01-2008 à 14:42:05  profilanswer
 

Salut,
 
Pour l'expression régulière, je pense que ça devrait aller, j'obtiens quelque chose du genre :  
rgxp.Pattern = "truc\(-?\d+,-?\d+\)"
 
Par contre je bloque au niveau de la boucle for...each...
le programme bloque à nb_1 = match_elt.SubMatches(0) + le nombre x

quelque soit le nombre x, qu'il existe ou pas, peut être qu'il y a une erreur au niveau des paramètres de l'expression régulière ou l'expression régulière elle-même, mais là je sèche un peu...

n°1674048
dreameddea​th
Posté le 20-01-2008 à 16:36:09  profilanswer
 

Donc tu y es presque...
 
il ne te manque plus que dire à VBA ce que tu veux récupérer avec des parenthèses...
 

n°1674071
restk
Posté le 20-01-2008 à 18:24:16  profilanswer
 

Il manquait pas grand chose effectivement, 4 parenthèses et le problème est réglé  [:gijar]  
Le programme fonctionne maintenant, encore merci pour ton aide  :)

n°1683030
restk
Posté le 06-02-2008 à 22:44:03  profilanswer
 

edit:  Bonjour,  
Aujourd'hui, je cherche plus à faire du calcul non pas avec des nombres entiers mais à virgule, simple dans le principe mais je n'arrive à effectuer de calcul avec ceux-ci, j'ai un code d'erreur 13 "type incompatible" quelque soit le type de variable que j'applique au "nb_1"  :( .  
J'ajouterai que j'arrive bien à capturer le nombre à virgule entre ().
 
Ma question est donc la suivante : Comment effectuer un calcul de nombre à virgule issu d'une expression régulière ?

n°1683349
dreameddea​th
Posté le 07-02-2008 à 15:44:54  profilanswer
 

Bonjour,
 
il est fort probable que le problème vienne de la virgule (ou du point) : la conversion string ==> decimal ne fonctionne qu'avec l'un des deux (dépend de la conf système).
 
Pour ce faire, il faut que tu forces le remplacement :
- soit  "." ==> ","
- soit "," ==> "."
 
Pour cela la fonction replace est bien utile (par exemple autour du match_elt.submatch)


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

  Modifier un nombre à virgule dans un texte (dans une textbox)

 

Sujets relatifs
hyperlien dynamique dans un champ texte[Résolu] Parsage d'un flux XML, les accents = découpe du texte
Modifier programme pour automatiser une tache[Access] Importation de fichier texte et perte des espaces
Modifier les margin d'une div en javascript ?modifier la date de création d'un fichier
modifier le "fancy index" (index automatique apache)Problème d'enregistrement en format texte
Modifier un fichier texte en php 
Plus de sujets relatifs à : Modifier un nombre à virgule dans un texte (dans une textbox)


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