Extraction de carractaire cellule excel vers textbox

-
 Utilisateur anonyme -
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
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

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.

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

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
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

Ahhh... nous ne sommes pas seuls !...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
> 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
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)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
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.
Pour le bon appetit moi c'est dans 2heures
Mais merci quand meme
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
> 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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
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.
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
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
> 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