Extraction de carractaire cellule excel vers textbox

gislain99 - 21 mai 2013 à 17:27
 Utilisateur anonyme - 24 mai 2013 à 03:18
Bonjour,


dans la cellule A de ma feuille j'ai un code du type AAAA666666-1 il me faut extraire les 4 premiere letres vers la textbox4 les 6chiffres vers la text box5 et le dernier chiffre dans la textbox6.

40 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 mai 2013 à 17:48
Bonjour,
Cellule ou pas, c'est une chaîne de caractères, que tu dois traiter.
Je veux croire que tu sais écrire dans une textbox et que ta seule difficulté est de séparer tes caractères ! ===>>
Mille et une manières de traiter une chaîne de caractères.
En voici une, en exemple parmi une foultitude d'autres :

toto = "AAAA666666-1"
tata = toto
pos = InStr(tata, "-")
titi3 = Mid(tata, pos + 1)
tata = Left(tata, pos - 1)
Do While Not IsNumeric(tata)
titi1 = titi1 & Left(tata, 1)
tata = Mid(tata, 2)
Loop
titi2 = tata
MsgBox titi1 & vbCrLf & titi2 & vbCrLf & titi3


________________________
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'interviendrai que si nécessité de la compléter.
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
22 mai 2013 à 14:06
Bonjour gislain99,

Du fait que tu ne nous a pas indiqué si le format de ta chaîne est fixe ou pas ucfoutu t'a donné une solution universelle.
Si ta chaîne comporte toujours le même nombre de caractères et si ceux-ci sont toujours disposés de la même façon, tu peux simplifier le code, seulement 3 instructions suffiront à l'extraction.
A toi de jouer...

Cheyenne
0
Utilisateur anonyme
22 mai 2013 à 15:57
Bonjour,

Allez, tout en restant dans la même logique que ucfoutu, mais un peu différent:

Dim Tableau() As String
Dim Toto As String
Dim i As Integer

Toto = "AAAA666666-1"
Tableau = Split(Toto, "-")
TextBox3.Text = Tableau(1)
Toto = Tableau(0)

For i = 1 To Len(Toto)
   If IsNumeric(Mid(Toto, i, 1)) Then
      TextBox1.Text = Left(Toto, i - 1)
      TextBox2.Text = Right(Toto, Len(Toto) - i + 1)
      Exit For
   End If
Next


Mais... il n'y a plus personne pour nous corriger ???

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 mai 2013 à 17:17
Bonjour, acive,
Il n'y a que nous pour nous amuser

En "vla un aut" ===>>
toto = "AAAA666666-1"
 For i = 1 To Len(toto)
   lu = Mid(toto, i, 1)
   If Not IsNumeric(lu) And lu <> "-" Then
     titi1 = Mid(toto, 1, i)
     ou = i
   ElseIf lu = "-" Then
     titi2 = Mid(toto, ou + 1, i - 1 - ou)
     titi3 = Mid(toto, i + 1)
   End If
 Next
 MsgBox titi1 & vbCrLf & titi2 & vbCrLf & titi3

Et on peut en faire ainsi des centaines d'autres, pour peu qu'on en décide, c'est sûr.

________________________
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'interviendrai que si nécessité de la compléter.
0

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

Posez votre question
Utilisateur anonyme
22 mai 2013 à 17:32
Bonjour ucfoutu,

Ok, encore une alors...

Dim Toto, Tata As String
Dim i As Integer

Toto = "AAAA666666-1"
Toto = Replace(Toto, "-", " ")
i = 1
Do While Not IsNumeric(Mid(Toto, i, 1))
   Tata = Tata & Mid(Toto, i, 1)
   i = i + 1
Loop
Toto = Tata & " " & Right(Toto, (Len(Toto) - i + 1))

MsgBox Split(Toto)(0)
MsgBox Split(Toto)(1)
MsgBox Split(Toto)(2)


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
22 mai 2013 à 17:48
Sinon tout simplement:

Dim Toto As String
Dim i As Integer
Toto = "AAAA666666-1"
TextBox1.Text = ""
TextBox2.Text = ""
For i = 1 To Len(Toto)
   If Mid(Toto, i, 1) = "-" Then
      TextBox3.Text = Mid(Toto, i + 1, 1)
      Exit For
   End If
   If IsNumeric(Mid(Toto, i, 1)) Then
      TextBox2.Text = TextBox2.Text & Mid(Toto, i, 1)
   Else
      TextBox1.Text = TextBox1.Text & Mid(Toto, i, 1)
   End If
Next


Cordialement

Tu as raison on peux continuer comme ça pendant des jours...

CF2i - Guadeloupe
Ingénierie Informatique
0
Bonjour,
merci a tous pour votre aide
Pour repondre a cheyenne ma chaine est fixe
Pour ucefoutu et acive je vais essayer vos codes je vous tien informé de mes resultat
et encore merci de votre aide
0
Utilisateur anonyme
22 mai 2013 à 18:10
Ahhh... nous ne sommes pas seuls !...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
22 mai 2013 à 19:13
> gislain99 : Amuses-toi donc à essayer et comprendre les différents codes fournis...
Mais du fait que le format de ta chaîne est fixe il est inutile de t'encombrer de certaines instructions inutiles dans ce cas.
Reviens avec le code le plus compact que tu auras fait en n'utilisant que les 3 instructions suivantes : Left$ Mid$ et Right$
(une pour chaque TextBox). En t'indiquant cela c'est pratiquement comme si je t'avais donné le code !!!

> ucfoutu et acive : oui, c'est sûr on peut continuer longtemps ainsi sur le mode "pourquoi faire simple quand on peut faire compliqué".
L'imagination est au pouvoir...

Cheyenne
0
Bonjour a tous

Voila mon code qui fonctionne correctement je pence que je ne pe pas faire plus court.


UserForm3.TextBox4 = Left(Feuil11.Cells(lig, 1), 4)
UserForm3.TextBox5 = Mid(Feuil11.Cells(lig, 1), 5, [6])
UserForm3.TextBox6 = Right(Feuil11.Cells(lig, 1), 1)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 mai 2013 à 11:39
C'est le plis simple, en effet, mais à condition (ce que tu aurais dû préciser dès ton premier message) que la chaîne soit toujours du même format (@@@@######-#)
A ce sujet, d'ailleurs, le préfèrerais à ta place ceci, pour ta dernière ligne :
UserForm3.TextBox6 = Mid(Feuil11.Cells(lig, 1), 12)

(juste pour le cas où le dernier nombre, après le tiret, serait un jour supérieur à 9)
________________________
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'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 mai 2013 à 11:55
Et regarde ce que ferait ceci
toto = array(4,6,10,1,5,12)
For i = 4 to 6
 userform3.controls("TextBox" & i)=mid(cells(lig,1),i)
next

(petit apprentissage à la barre fixe)
________________________
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'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 mai 2013 à 11:56
Corrige (une petite erreur) ==>>
titi = Array(0, 4, 6, 10, 1, 5, 12)
For i = 4 To 6
 userform3.Controls("TextBox" & i) = Mid(toto, titi(i), titi(i - 3))
Next

le "0" ajouté a son importance.
________________________
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'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 mai 2013 à 11:58
Et si avec tes cellules, bien évidemment ===>>
titi = Array(0, 4, 6, 10, 1, 5, 12)
For i = 4 To 6
 userform3.Controls("TextBox" & i) = Mid(cells(lig,1), titi(i), titi(i - 3))
Next

Bon appétit.

________________________
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'interviendrai que si nécessité de la compléter.
0
Merci baucoup pour tes conseil
c'est pas facile d'exprimer ces attentes dans un language que l'on ne metrise pas.

J'ai un petit soucis les textbox qui recoive les informations sont lié a un code qui evite les doublons donc quand je valide le code ci dessus il me dit que ma reference existe deja pourtant j'ai introduit un code qui suprime la refernce recherché des que les infos apparaisse dans mes textbox.
0
Pour le bon appetit moi c'est dans 2heures
Mais merci quand meme
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
23 mai 2013 à 13:06
> ucfoutu :
UserForm3.TextBox6 = Mid(Feuil11.Cells(lig, 1), 12)
(juste pour le cas où le dernier nombre, après le tiret, serait un jour supérieur à 9)
Ah oui, bien vu, sait-on jamais !

Tiens, tu ne mets pas le $ à Mid ? D'après mes tests l'exécution est trois fois plus rapide en utilisant l'identifiant. Oui, mais bon, pour son cas ce n'est pas dramatique...

Cheyenne
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 mai 2013 à 13:27
Il n'est absolument pas utile d'ajouter ce suffixe dans ce cas-là.
Pourquoi ? Cherche. Tu vas trouver.
Mais si une vraie correction utile devait être faite, ce serait celle-là :
userform3.Controls("TextBox" & i).text = Mid(cells(lig,1).text, titi(i), titi(i - 3))


________________________
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'interviendrai que si nécessité de la compléter.
0
Merci pour vos conseils

J'ai un petit soucis les textbox qui recoive les informations sont lié a un code qui evite les doublons donc quand je valide le code ci dessus il me dit que ma reference existe deja pourtant j'ai introduit un code qui suprime la refernce recherché des que les infos apparaisse dans mes textbox.je pence que l'ordre d'éffacer ma ligne ne s'effectue pas au bon moment.

UserForm3.TextBox4 = Left(Feuil11.Cells(lig, 1), 4)
UserForm3.TextBox5 = Mid(Feuil11.Cells(lig, 1), 5, [6])
UserForm3.TextBox6 = Right(Feuil11.Cells(lig, 1), 1) 
Sheets("Bases_Containers").Rows(lig).Delete
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
23 mai 2013 à 15:16
> ucfoutu
Mais si une vraie correction utile devait être faite, ce serait celle-là :
userform3.Controls("TextBox" & i).text = Mid(cells(lig,1).text, titi(i), titi(i - 3))
Oups, j'ai zappé le .text Oui, effectivement, toujours renseigner quant à la nature du contenu de la cellule.
Il n'est absolument pas utile d'ajouter ce suffixe dans ce cas-là.
Pourquoi ? Cherche. Tu vas trouver.

Je n'ai pas trouvé

Cheyenne
0
Rejoignez-nous