Supprimer le nombre 0 dans une chaîne de caractère ? [Résolu]

Signaler
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012
-
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
-
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

Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
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
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
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)
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
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)
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
salut, Jack,

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

Juste un petit problème :

pars de cette chaîne : "Test-0000025025"
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
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
Messages postés
332
Date d'inscription
lundi 29 septembre 2008
Statut
Membre
Dernière intervention
10 avril 2020
1
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 !
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012

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.
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
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 !
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
28
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.
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012

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
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
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 !
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012

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é .
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
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 !
Messages postés
131
Date d'inscription
jeudi 21 mai 2009
Statut
Membre
Dernière intervention
18 mars 2012

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.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.