Changement de cellule après x caractères

Résolu/Fermé
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 - 4 sept. 2013 à 16:44
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 5 sept. 2013 à 11:49
Bonjour,

J'aurais aimé savoir si dans VBA il était possible de faire un petit programme qui change de cellule automatiquement après avoir tapé 3 caractères dans la cellule plutôt que de devoir taper sur tabulation.

Du genre
Je suis en A1, je tape 7 "azertyuiop" je trouve :
en A1 : aze
en B1 : rty
en C1 : uio
en D1 : p

Dans le même esprit, je voudrais savoir si après avoir remplis 5 cellules (avec 3 caractères chacune) il est possible de se retrouver sur la ligne en dessous et de reprendre le même cycle.

Pour reprendre mon exemple, après avoir tapé mon "azertyuiop", je tape "qsdfghjkl" j'ai donc
en D1 : pqs
en A2 : dfg
en B2 : hjk
en C2 : l

Est-il possible de faire ça simplement ? Sur plusieurs plages différentes sur une feuille ?

Merci d'avance.
A voir également:

1 réponse

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 4/09/2013 à 18:28
Binjour,

Est-il possible de faire ça? oui
Simplement ? bof!
le point noir est la longueur avec un reste de la division par X
le code à adapter à ton contexte
segment représente la longueur de X (3 actuellement mais possible de changer)

Option Explicit

Sub test()
découpertexteparX 3
End Sub
'-------------------------------------------

Sub découpertexteparX(segment)
Dim F As Byte, Fin As Byte, Lig As Byte, Concat As String
Dim Nbre As Byte, cptr As Byte, T_dec()

Fin = Columns("A").Find("*", , , , , xlPrevious).Row
For Lig = 1 To Fin
     Concat = Concat & Cells(Lig, "A")
Next
Nbre = Int(Len(Concat) / segment)
If Len(Concat) Mod segment <> 0 Then Nbre = Nbre + 1

ReDim T_dec(1 To Nbre)
For cptr = 1 To UBound(T_dec)
     T_dec(cptr) = Left(Concat, segment)
     If cptr = UBound(T_dec) Then
          T_dec(cptr) = Concat
     Else
          Concat = Right(Concat, Len(Concat) - segment)
     End If
Next
Range("B1").Resize(1, UBound(T_dec)) = T_dec

End Sub


la maquette de W
https://www.cjoint.com/?3Iesk2AwUwh

dans l'attente de ta réaction
Michel
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
5 sept. 2013 à 10:20
Bonjour Michel,

Merci pour ta réponse,

Cependant, malgré de multiple essai je ne comprend pas ta macro (je suis débutant en VBA) et ne parvient pas à l'utiliser.
Peut-être que j'ai mal formulé ma demande.

Pour plus de précision, je souhaitais appliquer ça à un tableau ou j'ai un nombre incalculable de valeur à 3 chiffres à saisir.
Du coup je dois : taper 3 chiffres, appuyer sur tab, taper 3 chiffres, appuyer sur tab, ..., taper 3 chiffres appuyer sur entrée, et recommencer...
Le soucis est de devoir vérifier à chaque fois à l'écran ou j'en suis sur la ligne.
C'est pourquoi j'aurais aimer que le "changement de cellule" se fasse automatiquement.
(Peut-être qu'un extrait du fichier t'aiderais à mieux comprendre ?)
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
5 sept. 2013 à 11:05
Villette54,

Si tu peux faire ta saisie dans une Textbox, inspire-toi peut-être de :
https://forums.commentcamarche.net/forum/affich-28617073-fonction-regexp-sous-vba#p28636205
Avec la macro Textbox_Change, tu devrais pouvoir vider le champ de la Textbox dès que tu as rédigé 3 caractères et lancer l'écriture dans la bonne cellule.
Oh, tiens, c'était en réponse à une question que tu posais...
0
Villette54 Messages postés 300 Date d'inscription vendredi 15 mars 2013 Statut Membre Dernière intervention 31 juillet 2018 28
5 sept. 2013 à 11:33
Huuum.

Merci, mais passer par une textbox n'est pas la meilleure solution pour moi.
De plus, je ne vois pas très bien le lien entre les deux sujets ?

L'autre je cherchais à conditionner une textbox pour n'y saisir qu'un format date.

Ici je cherche simplement à conditionner une cellule, pour qu'elle détecte automatiquement que 3 caractères ont été saisis, et que du coup elle passe à la cellule suivante pour que je puisse continuer à taper.
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
5 sept. 2013 à 11:49
Le lien entre les deux sujets ? La macro de pikaju qui utilise la longueur du champ saisi dans la textbox
Du coup tu n'inscris que des triplets dans une textbox et la feuille se remplit avec ces triplets.
0