OVH Cloud OVH Cloud

CARACTERE INCONNU suite

3 réponses
Avatar
lou
ce code a eté réalisé par FRED

Function ExtraireNombres(s As String) As String()
Dim tmp As String
Dim res As String
Dim car As String
Dim dercar As String
tmp = s
dercar = " "
While Len(tmp) <> 0
car = Left$(tmp, 1)
If (car >= "0" And car <= "9") Or car = "." Then
res = res & car
dercar = car
Else
If dercar <> " " Then
res = res & " "
dercar = " "
End If
End If
tmp = Mid$(tmp, 2)
Wend
ExtraireNombres = Split(RTrim$(res), " ")
End Function

Sub test()
Dim s As String
Dim a() As String
Dim i As Integer
s = " 124.5kg 45 toto 65titi"
a = ExtraireNombres(s)

''''''''''''''''''''''''''''''''''ceci a eté modifié par Clive Lumb
pour envoyer chaque chaine numerique dans un seul champ avec un espace
entre chaque chaine

'Vider le textbox
Forms!TERMINAL.toutNUMERIQUE = ""
For i = LBound(a) To UBound(a)
'Ajouter chaine de chaque numéro, suivie par une espace.

Forms!TERMINAL.toutNUMERIQUE = Forms!TERMINAL.toutNUMERIQUE &
Str$(a(i)) & " "
Next

End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''

en fait j aimerais avoir une deuxieme solution a mon probleme qui serais
d'envoyer la premiere chaine dans champ1
la deuxieme dans champ2 et la troisieme dans champ3

merci de votre aide
lou

3 réponses

Avatar
Patrice Henrio
Voici ce que tu peux faire en utilisant la fonction que j'ai passé à Driss
On suppose que tes nombres ne sont jamais négatifs, que le séparateur des
décimal est le point et qu'il n'y a pas d'autre point dans ta chaîne à
décoder.

Function ExtraitNum(MaChaine As String) As String
Dim Car As String
Dim NouvChaine As String
Dim Ecriturenombre as boolean

NouvChaine = vbNullString
For I = 1 To Len(MaChaine)
' extraction de chaque caractère
Car = Mid$(MaChaine, I, 1)

Select Case Asc(Car)
Case 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, asc(".") ' codes
ascii des chiffres de 0 à 9
If Not EcritureNombre then NouvChaine=NouveChaine & " "
NouvChaine = NouvChaine & Car
EcritureNombre=true
Case Else
EcritureNombreúlse
End Select
Next
' on enlève ensuite les espaces extérieur
NouvChaine = trim$(NouvChaine)

ExtraitNum = NouvChaine
End Function

Ensuite dans ta forme tu auras le code suivant (on suppose que ChaineLue est
la chaine que tu as lue sur la COM)

ValeursSousFormeDeChaine=ExtraitNum(ChaineLue)
ValeursSousFormeTableau=Split(ValeursSousFormeDeChaine," ")
Champ1=ValeursSousFormeTableau(0)
Champ2=ValeursSousFormeTableau(1)
Champ3=ValeursSousFormeTableau(2)

... etc si tu as plus de trois champs.


"lou" a écrit dans le message de news:
433326de$0$16923$
ce code a eté réalisé par FRED

Function ExtraireNombres(s As String) As String()
Dim tmp As String
Dim res As String
Dim car As String
Dim dercar As String
tmp = s
dercar = " "
While Len(tmp) <> 0
car = Left$(tmp, 1)
If (car >= "0" And car <= "9") Or car = "." Then
res = res & car
dercar = car
Else
If dercar <> " " Then
res = res & " "
dercar = " "
End If
End If
tmp = Mid$(tmp, 2)
Wend
ExtraireNombres = Split(RTrim$(res), " ")
End Function

Sub test()
Dim s As String
Dim a() As String
Dim i As Integer
s = " 124.5kg 45 toto 65titi"
a = ExtraireNombres(s)

''''''''''''''''''''''''''''''''''ceci a eté modifié par Clive Lumb
pour envoyer chaque chaine numerique dans un seul champ avec un espace
entre chaque chaine

'Vider le textbox
Forms!TERMINAL.toutNUMERIQUE = ""
For i = LBound(a) To UBound(a)
'Ajouter chaine de chaque numéro, suivie par une espace.

Forms!TERMINAL.toutNUMERIQUE = Forms!TERMINAL.toutNUMERIQUE &
Str$(a(i)) & " "
Next

End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''

en fait j aimerais avoir une deuxieme solution a mon probleme qui serais
d'envoyer la premiere chaine dans champ1
la deuxieme dans champ2 et la troisieme dans champ3

merci de votre aide
lou






Avatar
lou
bonsoir
avant tout merci

ValeursSousFormeTableau = Split(ValeursSousFormeDeChaine, " ")


probleme sur cette ligne j'ai bien quelque chose dans
"ValeursSousFormeDeChaine" mais rien dans "ValeursSousFormeTableau"
la fonction split ne marche pas
merci de corriger

lou

"Patrice Henrio" a écrit dans le message de
news:
Voici ce que tu peux faire en utilisant la fonction que j'ai passé à Driss
On suppose que tes nombres ne sont jamais négatifs, que le séparateur des
décimal est le point et qu'il n'y a pas d'autre point dans ta chaîne à
décoder.

Function ExtraitNum(MaChaine As String) As String
Dim Car As String
Dim NouvChaine As String
Dim Ecriturenombre as boolean

NouvChaine = vbNullString
For I = 1 To Len(MaChaine)
' extraction de chaque caractère
Car = Mid$(MaChaine, I, 1)

Select Case Asc(Car)
Case 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, asc(".") ' codes
ascii des chiffres de 0 à 9
If Not EcritureNombre then NouvChaine=NouveChaine & " "
NouvChaine = NouvChaine & Car
EcritureNombre=true
Case Else
EcritureNombreúlse
End Select
Next
' on enlève ensuite les espaces extérieur
NouvChaine = trim$(NouvChaine)

ExtraitNum = NouvChaine
End Function

Ensuite dans ta forme tu auras le code suivant (on suppose que ChaineLue


est
la chaine que tu as lue sur la COM)

ValeursSousFormeDeChaine=ExtraitNum(ChaineLue)
ValeursSousFormeTableau=Split(ValeursSousFormeDeChaine," ")
Champ1=ValeursSousFormeTableau(0)
Champ2=ValeursSousFormeTableau(1)
Champ3=ValeursSousFormeTableau(2)

... etc si tu as plus de trois champs.


"lou" a écrit dans le message de news:
433326de$0$16923$
> ce code a eté réalisé par FRED
>
> Function ExtraireNombres(s As String) As String()
> Dim tmp As String
> Dim res As String
> Dim car As String
> Dim dercar As String
> tmp = s
> dercar = " "
> While Len(tmp) <> 0
> car = Left$(tmp, 1)
> If (car >= "0" And car <= "9") Or car = "." Then
> res = res & car
> dercar = car
> Else
> If dercar <> " " Then
> res = res & " "
> dercar = " "
> End If
> End If
> tmp = Mid$(tmp, 2)
> Wend
> ExtraireNombres = Split(RTrim$(res), " ")
> End Function
>
> Sub test()
> Dim s As String
> Dim a() As String
> Dim i As Integer
> s = " 124.5kg 45 toto 65titi"
> a = ExtraireNombres(s)
>
> ''''''''''''''''''''''''''''''''''ceci a eté modifié par Clive Lumb
> pour envoyer chaque chaine numerique dans un seul champ avec un espace
> entre chaque chaine
>
> 'Vider le textbox
> Forms!TERMINAL.toutNUMERIQUE = ""
> For i = LBound(a) To UBound(a)
> 'Ajouter chaine de chaque numéro, suivie par une espace.
>
> Forms!TERMINAL.toutNUMERIQUE = Forms!TERMINAL.toutNUMERIQUE &
> Str$(a(i)) & " "
> Next
>
> End Sub
>


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
> '''''''''
>
> en fait j aimerais avoir une deuxieme solution a mon probleme qui serais
> d'envoyer la premiere chaine dans champ1
> la deuxieme dans champ2 et la troisieme dans champ3
>
> merci de votre aide
> lou
>
>
>
>




Avatar
lou
trouvé erreur de frappe mes excuses

c'est ok
encore merci

"lou" a écrit dans le message de news:
43334114$0$20914$
bonsoir
avant tout merci

ValeursSousFormeTableau = Split(ValeursSousFormeDeChaine, " ")


probleme sur cette ligne j'ai bien quelque chose dans
"ValeursSousFormeDeChaine" mais rien dans "ValeursSousFormeTableau"
la fonction split ne marche pas
merci de corriger

lou

"Patrice Henrio" a écrit dans le message de
news:
> Voici ce que tu peux faire en utilisant la fonction que j'ai passé à


Driss
> On suppose que tes nombres ne sont jamais négatifs, que le séparateur


des
> décimal est le point et qu'il n'y a pas d'autre point dans ta chaîne à
> décoder.
>
> Function ExtraitNum(MaChaine As String) As String
> Dim Car As String
> Dim NouvChaine As String
> Dim Ecriturenombre as boolean
>
> NouvChaine = vbNullString
> For I = 1 To Len(MaChaine)
> ' extraction de chaque caractère
> Car = Mid$(MaChaine, I, 1)
>
> Select Case Asc(Car)
> Case 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, asc(".") ' codes
> ascii des chiffres de 0 à 9
> If Not EcritureNombre then NouvChaine=NouveChaine & " "
> NouvChaine = NouvChaine & Car
> EcritureNombre=true
> Case Else
> EcritureNombreúlse
> End Select
> Next
> ' on enlève ensuite les espaces extérieur
> NouvChaine = trim$(NouvChaine)
>
> ExtraitNum = NouvChaine
> End Function
>
> Ensuite dans ta forme tu auras le code suivant (on suppose que ChaineLue
est
> la chaine que tu as lue sur la COM)
>
> ValeursSousFormeDeChaine=ExtraitNum(ChaineLue)
> ValeursSousFormeTableau=Split(ValeursSousFormeDeChaine," ")
> Champ1=ValeursSousFormeTableau(0)
> Champ2=ValeursSousFormeTableau(1)
> Champ3=ValeursSousFormeTableau(2)
>
> ... etc si tu as plus de trois champs.
>
>
> "lou" a écrit dans le message de news:
> 433326de$0$16923$
> > ce code a eté réalisé par FRED
> >
> > Function ExtraireNombres(s As String) As String()
> > Dim tmp As String
> > Dim res As String
> > Dim car As String
> > Dim dercar As String
> > tmp = s
> > dercar = " "
> > While Len(tmp) <> 0
> > car = Left$(tmp, 1)
> > If (car >= "0" And car <= "9") Or car = "." Then
> > res = res & car
> > dercar = car
> > Else
> > If dercar <> " " Then
> > res = res & " "
> > dercar = " "
> > End If
> > End If
> > tmp = Mid$(tmp, 2)
> > Wend
> > ExtraireNombres = Split(RTrim$(res), " ")
> > End Function
> >
> > Sub test()
> > Dim s As String
> > Dim a() As String
> > Dim i As Integer
> > s = " 124.5kg 45 toto 65titi"
> > a = ExtraireNombres(s)
> >
> > ''''''''''''''''''''''''''''''''''ceci a eté modifié par Clive Lumb
> > pour envoyer chaque chaine numerique dans un seul champ avec un espace
> > entre chaque chaine
> >
> > 'Vider le textbox
> > Forms!TERMINAL.toutNUMERIQUE = ""
> > For i = LBound(a) To UBound(a)
> > 'Ajouter chaine de chaque numéro, suivie par une espace.
> >
> > Forms!TERMINAL.toutNUMERIQUE = Forms!TERMINAL.toutNUMERIQUE &
> > Str$(a(i)) & " "
> > Next
> >
> > End Sub
> >



''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
> > '''''''''
> >
> > en fait j aimerais avoir une deuxieme solution a mon probleme qui


serais
> > d'envoyer la premiere chaine dans champ1
> > la deuxieme dans champ2 et la troisieme dans champ3
> >
> > merci de votre aide
> > lou
> >
> >
> >
> >
>
>