De l'aide

bonjour tout le monde,

je suis nouveaux dans le forum et dans la programmation vba excel

j'ai un petit code et je ne sais pas ou est l'erreur

j'ai 9 textbox 1-9 réparties sur 3 lignes chaque 3 textbox sur une ligne

les trois premiers sont visible (cad la première ligne est visible) les autres ne le sont pas

je souhaite afficher les autres au-fur et à mesure que l'utilisateur tape Enter dans le 3 et 6 textbox

mon problème c'est que j'affiche (cad je rend les textbox4,5,6 visible) le curseur ne se place pas sur textbox4 début de ligne même quand je'utilise le setfocus

alors je demande de l'aide voici le bout du code est merci d'avance a tous

Public ligne As Integer

Sub affiche_ligne_suivante(numlig)

For i = ((numlig * 3) + 1) To ((numlig * 3) + 3)

Controls("TextBox" & i).Visible = True

Next

End Sub

Private Sub TextBox2_Change()

End Sub

Private Sub textbox3_afterupdate()

ligne = 1

Call affiche_ligne_suivante(ligne)

TextBox4.SetFocus ' ici je place le curseur sur textbox4 de la nouvelle ligne

End Sub

Private Sub TextBox6_AfterUpdate()

ligne = 2

Call affiche_ligne_suivante(ligne)

TextBox7.SetFocus

End Sub

Bonjour,

D'abord vérifie l'ordre de tabulation...

Ensuite, si tu veux qu'on voie, mets ton fichier !

Cordialement.

Bonjour Sotuma, bonjour le forum,

Plusieurs problèmes dans ton code :

• Où est-il écrit ? En effet, une variable déclarée publique (en l'occurrence ligne) ne doit/peut être déclarée que dans un module standard. Pas un onglet (Sheet) ou une Userform...

• Ou est déclarée la variable numlig ?

• Ou est définie la variable numlig ?

N'y aurait-il pas confusion entre les variables ligne et numlig ?

l'ordre des tabulations est correcte

voici le fichier

8ajout-ligne.xlsm (21.75 Ko)

A tester

UN GRAND MERCI CA MARCHE

Re,

Autre solution de substitution à la méthode SetFocus (qui échoue systématiquement dans ton cas...) et qui reste proche de ton code initial :

Sub affiche_ligne_suivante(num)
    For i = num To num + 2
        Controls("TextBox" & i).Visible = True
    Next i
End Sub

Private Sub TextBox3_Enter()
    affiche_ligne_suivante 4
End Sub

Private Sub TextBox6_Enter()
    affiche_ligne_suivante 7
End Sub

NB- Une variable publique dans un Module Userform n'a d'utilité que si elle est utilisée de l'extérieur du Module, ce qui n'est pas le cas ici. En outre une variable de niveau module ne présente pas non plus d'intérêt...

Cordialement.

Bonjour le fil, bonjour le forum,

J'avais dit n'importe quoi dans mon premier post n'ayant pas vu que tu utilisais une fonction. Avec le fichier c'est plus clair mais je me suis cassé les dents sur ton problème sans y trouver de solution. Il semblerait que le fait que les textboxes soient masquées au début cela fausse l'ordre des tabulations..

Édition]

Je navet (si, si dans ce cas on peut...) pas vu que le bon Maître était passé par là. Avec la solution lui !... Je le salue au passage.

MFerrand a écrit :

Re,

Autre solution de substitution à la méthode SetFocus (qui échoue systématiquement dans ton cas...) et qui reste proche de ton code initial :

Sub affiche_ligne_suivante(num)
    For i = num To num + 2
        Controls("TextBox" & i).Visible = True
    Next i
End Sub

Private Sub TextBox3_Enter()
    affiche_ligne_suivante 4
End Sub

Private Sub TextBox6_Enter()
    affiche_ligne_suivante 7
End Sub

NB- Une variable publique dans un Module Userform n'a d'utilité que si elle est utilisée de l'extérieur du Module, ce qui n'est pas le cas ici. En outre une variable de niveau module ne présente pas non plus d'intérêt...

Cordialement.

le prob avec cette solution c'est que la ligne s'affiche avant que je commence la saisie dans le textbox3 et non pas apres avoir taper Enter dans textbox3

De toute façon elle s'affichera si tu ne mets rien dans la TextBox ! (tu n'as pas prévu le cas...), donc cet évènement permet de ne pas casser l'ordre de tabulation...

ThauThème :

Il semblerait que le fait que les textboxes soient masquées au début cela fausse l'ordre des tabulations..

La tabulation redémarre au départ du fait que les TextBox suivantes soient masquées... et il m'a semblé que c'était le fait qu'il y ait édition du contenu qui faisait échouer SetFocus (mais je n'ai pas trouvé comment empêcher ce comportement par défaut.

Essai avec BeforeUpdate et Cancel pour y revenir pose le même problème, on y revient mais on n'en sort plus...

Pour bien faire il aurait aussi fallu tout retester avec Entrée, et également voir si un changement de EnterFieldBehavior amenait un changement de comportement.

Mais je n'ai pas le temps de pousser aussi loin (même si je suis toujours intéressé à découvrir des choses que j'ignore sur la manipulation des contrôles de userforms : il y en a encore beaucoup ! ) Et c'est un dispositif que je n'utiliserai pas pour moi de toute façon...

Cordialement.

Rechercher des sujets similaires à "aide"