Curseur sur textbox si mauvaise valeur

bernardrustrel

XLDnaute Occasionnel
Bonjour
Je vous sollicite au sujet du fichier joint: pour lequel le formulaire qui s'ouvre présente dans sa partie haute le dernier élève enregistré.
La partie basse permet de modifier, en cas d'erreur de saisie, le dernier élève enregistré à partir de la liste totale des élèves (Feuille: élèves).
Cependant lors de la saisie du numéro de l'élève, je veux tester préalablement si l'élève est déjà enregistré sur la feuil2 et également si le numéro existe dans la base élèves.
A ce sujet j'aimerais que le curseur reste sur le champ de saisie tant que le numéro n'est pas valide. (là est mon problème)
Une fois le numéro valide on enregistre l'élève choisi en lieu et place de celui à modifier.
J'ai essayé en vain avec TEXTBOX EXIT, alors je vous remercie par avance pour vos conseils et ou aide
Cordialement
Bernard
 

Pièces jointes

  • Test.xlsm
    25.1 KB · Affichages: 40

Lone-wolf

XLDnaute Barbatruc
Bonjour Bernard

J'ai vu dans le fichier que tu voulais renommer la Feuille 2 d'après la date du jour, mais ce serait mieux d'en créer une par jour. Pour le Focus, il me semble que le seul moyen est de cliquer sur l'usf, même que j'ai ajuster l'ordre de tabulation des textbox's. Fait un double-clic sur la feuille pour réafficher l'usf. Il faut assi modifier ta macro pour pouvoir enregistrer un nouvel élève.

Pour la création des feuilles au cas où:

VB:
Private Sub Workbook_Open()
Dim b As Date
If Date > "01/01/1910" Then
a = ActiveWorkbook.Sheets.Count
b = Day(Date) & "-" & Month(Date) & "-" & Year(Date)
d = 0
For i = 1 To a
c = Sheets(i).Name
If c = b Then
d = 1
Exit For
End If
Next i
If d = 0 Then
Sheets.Add After:=Sheets(a)
ActiveSheet.Name = b
End If
End If
End Sub

VB:
Private Sub CommandButton2_Click()
  With Sheets("Eleves")
  lig = .Cells(Rows.Count, 1).End(xlUp).Row + 1
  For I = 1 To 5
  .Cells(lig, I).Value = Me.Controls("TextBox" & I).Value
  Next I
  End With
End Sub
 

Pièces jointes

  • Test.xlsm
    27.5 KB · Affichages: 37
Dernière édition:

bernardrustrel

XLDnaute Occasionnel
Bonjour et merci à toi Lone-Wolf
Effectivement j'avais prévu ce dont tu me prposes, mais ne l'ai pas mis dans le fichier pour éviter de l'allourdir.
Cependant je reste convaincu qu'il doit bien y avoir une solution pour conserver le curseur sur le TEXTBOX en question tant que la valeur saisie n'est pas bonne.
Encore merci à toi
Cordialement
Bernard
 

Lone-wolf

XLDnaute Barbatruc
Re Bernard

Une autre façon de faire

VB:
Private Sub TextBox1_AfterUpdate()
Dim Valeur As Long, derlig As Long, lig As Long, plage As Range, cel As Range
Static Num

  Num = TextBox1.Value

  With Feuil1
  lig = .Cells(Rows.Count, 1).End(xlUp).Row + 1
  derlig = .Range("a" & Rows.Count).End(xlUp).Row

  Set plage = .Range("a2:a" & derlig)
  Set cel = plage.Find(TextBox1, , xlValues)

  If Not cel Is Nothing Then
  Valeur = cel.Offset(0, 0).Value
  End If

  If Num = Valeur Then: MsgBox "Attention! Déjà inscrit.", , "FOCUS TEST": TextBox1 = "": Exit Sub
  SendKeys "+{TAB}", False

  If Num <> Valeur Then
  .Cells(lig, 1) = Format(Val(Num), "0")
  SendKeys "+{TAB}", True
  End If
  End With
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 827
Messages
2 092 547
Membres
105 449
dernier inscrit
Tcalcagno