Supprimer le nombre 0 dans une chaîne de caractère ?

Résolu
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 12 nov. 2009 à 21:26
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 15 nov. 2009 à 12:16
Bonsoir à vous,


Comment pourrais-je faire pour supprimer le nombre 0 dans une chaîne de caractère ?

Exemple : Test-0000025125

Je veux obtenir : Test-25125


Le nombre de 0 est variable mais toujours derrière le signe -.


J'ai essaye ce code mais il me supprime tous les 0.

******************************
If InStr(1, Text5.Text, "0") <> 0 Then
Text5.Text = Left(Text5.Text, Len(Text5.Text) - 1) & ""
Text5.SelStart = Len(Text5.Text)
End If

******************************

Exemple :Test-100004

J'obtiens: Test-14



Alors que dans ce cas là je ne voudrais rien changer à cette référence.

Il faudrait enlever tous les 0 entre le signe ? et le premier chiffre qui peut allait de 1 à 9.

Merci pour votre aide.

22 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
14 nov. 2009 à 14:36
Bon allez...
Mais je ne veux pas voir un nouveau "voeu", maintenant, hein ...

Exemple bâclé :

Private Sub CommandButton1_Click()
  Dim toto As String
  toto = "Test-0000A25125"
  MsgBox toto & " ====>>" & atraiter(toto)
  toto = "Test-25125A"
  MsgBox toto & " ====>>" & atraiter(toto)
End Sub

Private Function atraiter(c As String) As String
  atraiter = c
  pos = InStr(atraiter, "-")
  If pos = 0 Then Exit Function
  atraiter = Mid(atraiter, pos + 1)
  While Mid(atraiter, 1, 1) = "0"
    atraiter = Mid(atraiter, 2)
  Wend
  atraiter = Left(c, pos) & atraiter
End Function
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
12 nov. 2009 à 21:37
Un truc con, essayer de convertir ton texte en un nombre avec la fonction Val, ou alors CLng ou CDbl suivant si tu as un entier ou un nombre à virgule.




[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
12 nov. 2009 à 21:39
Bonjour,

1) La fonction Val(n) retourne la valeur numérique (sans les 0, donc) de la chaîne n
2) la fonction instr te permet de connaître la position pos du caractère "-"
3) soit chdev ce qui se trouve avant "-" : la fonction Left te permet d'extraire les pos-1 caractères avant le "-"
4) soit chder la chaîne sui suit ce "-" : la fonction Mid te permet d'extraire tout ce qui suit la position pos+1 (et la fonction Val de le transformer, comme dit en 1 ===>>> nouvder)
5)à te reste à concaténer ! chdev & "-" & nouvder

C'"est du chinois ? Non si tu opuvres ton aide en ligne sur chacun des mots que j'ai soulignés ...
Voilà de quoi te permettre de lire, comprendre et faire... (au boulot)
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
12 nov. 2009 à 22:14
Bien vue professeur jmf (T'as vu j'ai retiré le 0 j'ai réussi ^^)

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 nov. 2009 à 00:52
Salut
Vous vous compliquez la vie.
Il s'agit d'un texte, alors utilisons les fonctions de texte :
maChaine = Replace(maChaine, "0", vbNullString)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
13 nov. 2009 à 07:08
salut, Jack,

Pour être fastoche, il l'est, le Replace

Juste un petit problème :

pars de cette chaîne : "Test-0000025025"
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
13 nov. 2009 à 14:12
Hello, ahhh le monde magique de disney... je déconne le monde magique des moteurs de recherche :

2 sec et hop j'ai déjà trouver cela : http://www.vbfrance.com/forum/sujet-FONCTION-REPLACE_2576.aspx


Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT
0
Galactus13 Messages postés 335 Date d'inscription lundi 29 septembre 2008 Statut Membre Dernière intervention 16 août 2023 1
13 nov. 2009 à 14:45
Oups !
Replace n'est d'aucune aide ici !
Dim Y As Integer
Y = InStr(Chaine, "-")
Chaine= Mid(Chaine, 1, Y) & Val(Mid(Chaine, Y + 1))

seul celui qui reconnait ses fautes, Progress ..._bar
Galactus le Vrai !
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
13 nov. 2009 à 19:17
Bonjour,

Sub ess()

Text = "machin-0000025125 "
pos = InStr(1, Text, "-")
MsgBox Mid$(Text, 1, pos - 1) & Str$(Val(Mid$(Text, pos, Len(Text))))

End Sub



Amicalement,
Us.
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
13 nov. 2009 à 19:33
Bonjour à tous,

J'ai bien essayé ce code mais cela ne donne pas ce que j'attends

************************
Dim Y As Integer
Y = InStr(Text5.Text, "-")
Text5.Text = Mid(Text5.Text, 1, Y) & Val(Mid(Text5.Text, Y + 1))
***********************

Si je tape Test-0000025025 cela donne 250250 donc avec un 0 en plus
Ce que j'attends c'est : Test-25025

je cherche encore.


Merci d'avance.
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 nov. 2009 à 19:53
Bon allé tien va ...

Lol

While Left$(Text5.Text, 1 ) = "0"
Text5.Text = Right$(Text5.Text, Len(Text5.Text) - 1)
Wend

Il te reste plus qu'a géré les erreurs si le text est vide...


++ Mayzz.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
13 nov. 2009 à 20:00
Etrange !
Le code de Us (qui est finalement le même que celui du mécanisme que j'indiquais), me retourne bien, sur ma machine :
Test-25025
!!!

(je ne sais quelle conclusion autre en tirer ...)
Et toi ?
A moins que, quelque part ailleurs, tu manipules à nouveau cette chaîne, bien évidemment !
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
13 nov. 2009 à 20:09
Oup's je retire mon code (c'est vrai ? Je peux )

Nan c'est que je n'avais pas vu qu'il y avait du texte avant les zéros...
J'ai pris le poste en cours, le code d'US serait le bon.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
14 nov. 2009 à 13:17
Bonjour,

Merci à tous pour votre aide.

J'ai essayé le code de US il me renvoie bien ce que j'attends.

**********************
Text = "Test-0000025125 "
pos = InStr(1, Text, "-")
MsgBox Mid$(Text, 1, pos - 1) & Str$(Val(Mid$(Text, pos, Len(Text))))
*********************

Par contre si je tape :

Test-0000A25125
il me renvoie Test-0 alors que je veux obtenir Test-A25125

si je tape :
Test-000025125A
il me renvoie Test-25125 alors que je veux obtenir Test-25125A


Avez-vous une idée?


Merci d'avance
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
14 nov. 2009 à 13:50
Bien évidemment, puis que :
Val("0000A25125") Val("A") 0

Mais voilà que tu t'écartes de la "donne" de ton 1er message !
Alors (et pour ne pas continuer à jouer au poker javanais face à de nouvelles "donnes" éventuelles :
Dis-nous d'emblée et sans rien oublier tous les cas de figure à traiter !
On attendra sagement que tu aies "arrêté" tes voeux !
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
14 nov. 2009 à 14:04
Désolé,

Oui effectivement et c'est vrai que ma première question a été entièrement résolue mais je n'avais pas pensé à ces 2 cas de figures là.


Ce sont mes derniers v?ux.

Obtenir en tapant : Test-0000A25125 ------> Test-A25125

Obtenir en tapant : Test-000025125A ------> Test-25125A



Merci et encore désolé .
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
14 nov. 2009 à 14:09
Confirme (avant qu'on ne retravaille à nouveau pour rien) que tu ne sortiras pas un autre cas de figure de "derrière les fagots"...
Je ne m'y mettrai qu'après cette confirmation !
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
14 nov. 2009 à 16:05
Merci à toi jmf0,

Parfait même si c'est bâclé(?) je l'ai adapté et cela fonctionne très bien.
C'est tout à fait mon attente.

Encore merci à tous en désolé pour mon manque de précision à la base.


Une bonne journée à tous.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 nov. 2009 à 18:05
Bonjour,

Bon...bon... après cette mise au point, je propose ma version, histoire de ne pas rester en reste... j'me comprends

Function us(c As String) As String
Do
c = Replace(c, "-0", "-")
Loop Until InStr(1, c, "-0") = 0
us = c
End Function


Test :
Private Sub Command1_Click()
  Dim toto_a_la_us As String
  toto_a_la_us = "Test-0000A25125"
  MsgBox toto_a_la_us & " ====>>" & us(toto_a_la_us)
  toto_a_la_us = "Test-25125A"
  MsgBox toto_a_la_us & " ====>>" & us(toto_a_la_us)
End Sub



Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
14 nov. 2009 à 18:29
Et tient, encore un peu plus court :

Function us(c As String) As String
us = Replace(c, "-0", "-")
If InStr(1, us, "-0") <> 0 Then us = us(us)
End Function


Peut-on faire encore plus court ? L'apéro pour celui qui réussit !

Amicalement,
Us.
0
Rejoignez-nous