Analyse d'un texte

Résolu
mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011 - 26 avril 2006 à 15:49
mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011 - 26 avril 2006 à 17:39
Bonjour

voilà, j'ai créé une macro qui, à partir de plusieurs textbox crée une seule variable de type string. jusque là pas de pb. le soucis vient du fait que cette macro permet de modifier, il me faudrait donc pouvoir décomposer cette variable à nouveau, connaissant le type de données qu'elle contient, cela ressemble à ça : "DESIGNATION (EBAUCHE) 123 456-0000"
je ne connais pas le contenu de désignation
le mot "ébauche" y est ou n'y est pas, selon les cas
et je dois pouvoir récupérer chaque groupe de 3 (ou 4 chiffre)

donc pour récapituler, je dois pouvoir :
- connaitre le contenu de "DESIGNATION"
- voir sir le mot "EBAUCHE" est présent ou nom
- récupérer les 3 groupes de chiffres (sans le tiret)

merci beaucoup pour vos réponses !

Max

10 réponses

mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011
26 avril 2006 à 17:39
oki oki tout marche

c'est royal, merci beaucoup, voici donc le bout de code que j'utilise et qui fonctionne impecc (meme avec les espaces comme séparateur)....
(pour le tester, faut juste créer un form avec 4 textbox et 1 checkbox; si on rajoute le mot EBAUCHE après "BODY", alors la checkbox sera cochée)

Private Sub CommandButton1_Click()
chaine = "BODY 123 456-7895"
TextBox1.text = Split(chaine)(0)
If Split(chaine)(1) = "EBAUCHE" Then
CheckBox1.Value = True
chaine2 = Split(chaine)(3)
TextBox2.text = Split(chaine)(2)
Else
CheckBox1.Value = False
chaine2 = Split(chaine)(2)
TextBox2.text = Split(chaine)(1)
End If
TextBox3.text = Split(chaine2, "-")(0)
TextBox4.text = Split(chaine2, "-")(1)
End Sub


merci beaucoup et bonne soirée !

Max
3
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
26 avril 2006 à 16:34
A priori, comme tu parle de macro, on peut penser que tu es en VBA sous Excel (ce serait + simple de le préciser....)

Questions :
1 - (EBAUCHE) est-il, s'il est présent, toujours situé à 2 caractères après DESIGNATION ?
2 - Le groupe de chiffres est-il constitué toujours de la même façon (### ###-####)?
3 - Peux-tu avoir plusieurs fois DESIGNATION dans ton texte ?

Si oui, les fonctions Instr et Mid sont tes amies.

(je peux t'aider si tu réponds aux questions précédentes)

Cordialement,

Alain 31
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
26 avril 2006 à 16:40
pour séparer "DESIGNATION (EBAUCHE) 123 456-0000" tu peut faire split("DESIGNATION (EBAUCHE) 123 456-0000") et dans ce cas ta chaine sera convertie en tableau avec "DESIGNATION" à la case 0 (split("DESIGNATION (EBAUCHE) 123 456-0000")(0)) si tu à un autre carac (ou même chaine de carac) de séparation la simtax est split("text",<chaine de séparation>)
Moi en général quand je veut crée un string et retrouver les composant je mes dec carac de control pour séparer (chr(1)) par exemple et pour avoir ma chaine "propre" je fait ?replace(chaine,chr(1),"") soit je remplace mes carac de control par rien.

Bonne soirée

D'oh! Nuts!
Mmmmm...
 DONUTS
0
mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011
26 avril 2006 à 16:48
alors pour préciser, en fait, je ne connais pas la valeur de "désignation". cette chaine de caractère peut faire 5 comme 25 caractère de long, et je ne peux pas le savoir à l'avance.
ensuite, soit il y a ébauche, soit il y a directement les 3 groupes de chiffres qui ont toujours le meme format, cad XXX XXX-XXXX

pour info, la macro n'est pas sous excel, mais sous catia, cela ne change en rien le fonctionnement du code j'imagine.

pour répondre à polack77
ta solution à l'air bien, mais je suis un peu novice quand meme, et je ne suis pas sur de tout bien tout comprendre.

tout d'abord, comment on fait ensuite pour lire le tableau et y récupérer les données qui nous intéressent
et ensuite, ben rien, puisque j'ai trouvé la réponse en écrivant... mais pour l'histoire du tableau je sais pas

merci pour votre coup de main

max
0

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

Posez votre question
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
26 avril 2006 à 16:56
Pour lire le tableau tu met simplement le numéro de l'élement soit la 1ér partie (avant ton 1er carac de séparation qui est " " (space) si tu ne le présise pas) pour savoir le nombre d'élement le fonction ubound(...) te le renvoi (lbound(...) renvoie le 1ér élement)
tu peut donc faire
sub test()
dim Cpt as long
do while cpt<= ubound(split(<chaine de carac>))
    if test then
       traitement
    end if
    cpt = cpt + 1
loop
end sub

Avec ça tu test tout les élements de ton split

Remarque : Tu peut faire un split d'un élement d'un split (pour séparer les differante valeur numérique)
    Ce qui donne split(split(<chaine de carac>," ")(3),"-")
    Avec le quel tu peut re-faire un ubound(...) et une boucle.

D'oh! Nuts!
Mmmmm...
 DONUTS
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
26 avril 2006 à 16:58
Heeeeeeeee pardon :
Ce qui donne split(split(<chaine de carac>," ")(2
),"-") avec la chaine que tu à donée au début

D'oh! Nuts!
Mmmmm...
 DONUTS
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
26 avril 2006 à 17:07
Bon j'ai taper trop vite et du coup je ne suis pas claire.

Pour lire le tableau tu met simplement le numéro de l'élement (0) par exemple pour la 1ér partie (avent le 1ér carac de séparation)
Pour savoir le nombre d'élement de ton tableau il existe la fonction UBound(...) (et la fonction LBound(...) pour le 1ér élement, qui n'est pas formément 0 même si avec split c'est 0 à tout les coup)
Pour les carac de control losque tu crée ton string tu fais bien :
Chaine = textbox1.text & textbox2.text & ...

Pour insérer des carac de control (ex chr(1) qui est carac non affichable)
Chaine = textbox1.text & chr(1) & textbox2.text & chr(1) & ...
Et du coup tu peut retrouver ce qu'il y avais dans textbox1.text avec split(chaine,chr(1))(0) ce qui peut être pratique si textbox1.text est une cahine e carac vide car tu retrouve une chaine de carac vide plutot que..... en faite avec des space on sait pas trop (surtout si l'utilisateur à mis un space dans un textbox, ce qui te fou le bordel pour retrouver les chainede carac)

voila j'espaire être plus claire

D'oh! Nuts!
Mmmmm...
 DONUTS
0
mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011
26 avril 2006 à 17:11
re polack77, j'ai pigé, il me manque juste un truc...

dans la boucle, le test, je le fais sur une chaine de caractère, comment est-ce qu'elle s'appelle (si elle s'appelle)...
dans mon cas précis, je veux mettre le contenu de désignation dans la textbox1, coché ou non une checkbox, selon la présence du mot ébauche, mettre le 1er groupe de 3 chiffres dans la textbox2, le deuxième dans la textbox3 et le 3ème dans la textbox4....

(il y aura donc 1 boucle imbriquée pour le groupe de 2 groupe de chifres séparés par un -)

je nage encore un peu dans la polenta...

merci pour vos précisions et votre réactivité !

Max
0
mfaure Messages postés 48 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 22 septembre 2011
26 avril 2006 à 17:18
oooops considère que j'ai rien dit, je n'ai pas attendu la fin des messages, mais je crois que j'ai pigé, est-ce que le code, ça donnerait donc ceci ?

textbox1.text=split(chaine, chr(1))(0)
if split(chaine, chr(1))(1)="EBAUCHE" then
checkbox1.value=true
textbox2.text=split(chaine, chr(1))(2)
textbox3.text=split(split(chaine, chr(1))(3), "-")(0)
textbox3.text=split(split(chaine, chr(1))(3), "-")(1)
else
checkbox1.value=false
textbox2.text=split(chaine, chr(1))(1)
textbox3.text=split(split(chaine, chr(1))(2), "-")(0)
textbox3.text=split(split(chaine, chr(1))(2), "-")(1)
end if

je vais tester ça, mais ça m'a pas l'air mal...

merci beaucoup pour ton aide..

Max
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
26 avril 2006 à 17:18
Tu test si l'émement du tableau est "DESIGNATION" et si oui tu fait ton traitement (cocher une case, ecrir dans un text box, faire biper le pc, overclocker le disk dur et le faire bruler, ...)if split (chaine,...)(cpt) "DESIGNATION" 'attention les majuscul minuscul sont importante dans ce test mais tu peut faire lcase(split (chaine,...)(cpt)) lcase ("DESIGNATION") et dans ce cas tout est en minuscul donc plus de problème
Tu peut egalement tester si un "-" est présant dans la chaine de carac avec instr(...)
Tester si la chaine est une valeur numérique isnum(...)

D'oh! Nuts!
Mmmmm...
 DONUTS
0
Rejoignez-nous