Valeur identique

Signaler
Messages postés
21
Date d'inscription
lundi 19 août 2013
Statut
Membre
Dernière intervention
15 mars 2015
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,
Je bloque sur un petit soucis et peut être que vous pourriez m'aider car je n'arrive pas à coder ceci :
Text1.text="LE SOLEIL 1234567 EST CHAUD"
Text2.text="LE SOLEIL EST 1234567 CHAUD"

Comment détecter une partie de chaîne identique dans deux contrôles , sans la connaitre, variable et générer une action ?
Dans le cas présent 1234567
Merci de votre aide.

9 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour,
Peux-tu être beaucoup plus précis ?
1) Dans l'exemple que tu montres, 1234567 n'est pas la seule "partie identique). Pourquoi celle-là et pas les autres, alors ?
2) qu'entends-tu exactement par "partie" ? seulement des mots entiers séparés par un espace ou toute sous-chaîne de caractères, avec ou sans espace ?
Que cette comparaison se fasse entre deux contrôles, n'a rien à voir et n'est pas à préciser. Ton problème concerne la comparaison de deux chaînes de caractères, qu'elles soient ou non dans un contrôle.

PS : où en es-tu de cette discussion, laissée en plan (et qui reste donc ouverte) ? :
http://codes-sources.commentcamarche.net/forum/affich-10008014-textbox-redimenssion
et celle-ci :
http://codes-sources.commentcamarche.net/forum/affich-10007073-boucle-probleme
?
Merci de bien vouloir observer les règles de ce forum.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
21
Date d'inscription
lundi 19 août 2013
Statut
Membre
Dernière intervention
15 mars 2015

Bonjour et merci de ton intervention,
effectivement pour être plus précis il s'agit d'une comparaison de deux chaines de caractère avec ou sans espace, le contenus est variable toutefois dans les deux chaines seule la valeur numérique m'intéresse.
Donc Je veux m'assurer que la CHAINE1 possède bien dans son contenu une valeur numérique, identique et contenue dans la CHAINE2 en faisant abstraction du texte

Pour exemple : CHAINE1 :"ceciestuntexteimprovisé1264567avecunevaleurnumérique"

CHAINE2 : "maiscependantnous1264567pourrionsl'ecrireaussicommeca"

Un oublis de ma part concernant les autres posts, que je viens de signaler en résolus à l'instant.
Désolé
Messages postés
15439
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
Bonsoir, tu peux regarder du coté des Regex pour extraire uniquement des nombres qui se suivent d'une chaine.
Tu dois aussi pouvoir y arriver avec l'opérateur Like.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Je vais te répondre ainsi :
regarde ce que fait ceci :
toto = "toto = "ceciestuntexteimprovisé1264567avecunevaleurnumérique""
Do While Val(toto) = 0
toto = Mid(toto, 2)
Loop
MsgBox Val(toto)

le reste "coule de source", non ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
21
Date d'inscription
lundi 19 août 2013
Statut
Membre
Dernière intervention
15 mars 2015

Merci beaucoup ! juste petit soucis j'ai deja une boucle existante pour la manipulation de ma chaine ! une autre solution possible ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Une autre solution sans boucle ?
Oui, mais bien plus compliquée !
Tu dis avoir déjà une boucle. Et alors ? Je ne vois pas quel est le problème !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Où en es-tu ?
Regarde ===>>
Private Sub Command1_Click()
If num_int(Text1.Text) = num_int(Text2.Text) Then
MsgBox "oui"
Else
MsgBox "non"
End If
End Sub

Private Function num_int(chaine As String) As String
num_int = chaine
Do While Val(num_int) = 0
num_int = Mid(num_int, 2)
Loop
num_int = Str(Val(num_int))
End Function

Messages postés
15439
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
Bonjour, je pense que ça serait plus simple avec une regex qui cherche chaque succession de chiffre, ensuite on compare la collection d'occurrences du string1 à la collection d'occurrence du string2.

			Dim s1 As String = "Le même texte au début 1234, 123456, pas le même texte à la fin"
			Dim s2 As String = "Le même texte au début 123, 123456; une fin alternative"

			Dim maRegex As New Regex("\D(\d)+\D")
			Dim occurcences1 As MatchCollection = maRegex.Matches(s1)
			Dim occurcences2 As MatchCollection = maRegex.Matches(s2)


Attention je l'ai écrit vite fait, la virgule est prise pour un caractère numérique et il faut peut être traiter les cas ou le texte commence ou fini par un chiffre
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour, Whismeril,
Il est en VB6.
Il pourrait le faire, mais :
- en se rendant dépendant de VBS (de sa présence, qui peut avoir été inhibée)
- en constituant et alimentant deux collections, sur lesquelles il devra boucler.
Messages postés
15439
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503 >
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018

Salut Uc
Il est en VB6
oh j'ai pas fait attention ce matin, réveil un peu dur....
Mais avec Like et deux tableaux ça doit le faire aussi ;-)!
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour
c'est un peu plus compliqué

Dim str1 As String
Dim str2 As String
Dim strnum As String
Dim index1 As Integer
Dim p As Integer
Dim indexl As Integer
Dim indexr As Integer
Dim found As Boolean
found = False
str1 = "bnbnvbvbv923456bfbfgfgfg"
str2 = "teerereorfgfgdfd923456tytytryrt"
index1 = 1
'on cherche le premier chiffre
While index1 < Len(str1) And Not found
p = Asc(Mid(str1, index1, 1))
If (p >= 48) And (p <= 57) Then
indexl = index1
found = True
Else
index1 = index1 + 1
End If
Wend
found = False
'on cherche le caractère non chiffre
While index1 < Len(str1) And Not found
p = Asc(Mid(str1, index1, 1))
If (p < 48) Or (p > 57) Then
indexr = index1
found = True
Else
index1 = index1 + 1
End If
Wend
strnum = Mid(str1, indexl, indexr - indexl)
If InStr(str2, strnum) > 0 Then
'
End If
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
A Whismeril,
Sous VB6, en fait, on éviterait carrément la fonction asc, privilégiant une conversion dans un sens, puis l'autre.
Bien que je sois persuadé de ce que marty14400 n'a qu'un numéro à identifier et comparer, je vais aller un peu plus loin.
Regarde ==>>
Private Sub CommandButton4_Click()
Dim str1 As String, str2 As String
str1 = "bn102bnvbvbv923456bfbfgfgf1248gh27"
str2 = "teerereorfgfgdfd923456tytytryrt327123hhf"
nums_str1 = Trim(num_int(str1))
nums_str2 = Trim(num_int(str2))
MsgBox nums_str1 & vbCrLf & nums_str2
End Sub

Private Function num_int(chaine As String) As String
Dim tata() As Byte
tata() = StrConv(chaine, vbFromUnicode)
For i = 0 To UBound(tata)
Select Case tata(i)
Case 48 To 57
Case Else
tata(i) = 32
End Select
Next
num_int = Trim(StrConv(tata(), vbUnicode))
End Function

Tu devines le reste (nous avons deux chaînes éclatables par split ===>> deux arrays de numériques à contrôler entre eux.
Messages postés
15439
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021
503
Oh, je ne suis pas le seul à avoir eu une journée difficile ;-)....
Je n'ai jamais parlé de Asc.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233 >
Messages postés
15439
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
27 janvier 2021

Ouille !
Ce n'est pas toi, mais ShayW !
Ouille ! Ouille ! je deviens gâteux, moi . ..
Bon ===>> je vais au dodo vite fait bien fait.!