mfaure
Messages postés48Date d'inscriptionmardi 28 mars 2006StatutMembreDernière intervention22 septembre 2011
-
26 avril 2006 à 15:49
mfaure
Messages postés48Date d'inscriptionmardi 28 mars 2006StatutMembreDernière intervention22 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)
mfaure
Messages postés48Date d'inscriptionmardi 28 mars 2006StatutMembreDernière intervention22 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
asecher
Messages postés262Date d'inscriptionlundi 20 octobre 2003StatutMembreDernière intervention27 avril 20071 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)
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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.
mfaure
Messages postés48Date d'inscriptionmardi 28 mars 2006StatutMembreDernière intervention22 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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.
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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)
mfaure
Messages postés48Date d'inscriptionmardi 28 mars 2006StatutMembreDernière intervention22 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 -)
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 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(...)