Mettre curseur dans le bon textbox

Hello,

Je n'arrive pas, à la fin de mon code, de placer le curseur dans le textbox "Badgebox", il se met dans le "Nombox". Le but est utiliser un lecteur de badge plus tard, donc il est obligatoire que le curseur soit dans la box "badge".

Il paraît simple, j'ai essayé la propriété "Setfocus" mais il ne fonctionne pas et je n'arrive à comprendre pourquoi.

Si quelqu'un m'arrive à faire cette partie en boucle, ça serait parfait aussi car je dois répéter 30 fois. J'ai essayé plusieurs façons mais il ne marche pas non plus.

Merci beaucoup à l'avance.

Expbox1 = Application.WorksheetFunction.VLookup(PosteBox1.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox2 = Application.WorksheetFunction.VLookup(PosteBox2.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox3 = Application.WorksheetFunction.VLookup(PosteBox3.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox4 = Application.WorksheetFunction.VLookup(PosteBox4.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox5 = Application.WorksheetFunction.VLookup(PosteBox5.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox6 = Application.WorksheetFunction.VLookup(PosteBox6.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox7 = Application.WorksheetFunction.VLookup(PosteBox7.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox8 = Application.WorksheetFunction.VLookup(PosteBox8.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox9 = Application.WorksheetFunction.VLookup(PosteBox9.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox10 = Application.WorksheetFunction.VLookup(PosteBox10.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox11 = Application.WorksheetFunction.VLookup(PosteBox11.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox12 = Application.WorksheetFunction.VLookup(PosteBox12.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox13 = Application.WorksheetFunction.VLookup(PosteBox13.Value, Sheets("Planning").Range("AO:AP"), 2, 0)
Expbox14 = Application.WorksheetFunction.VLookup(PosteBox14.Value, Sheets("Planning").Range("AO:AP"), 2

Bonjour,

Merci de mettre votre profil de compte avec votre version excel. Mettre "Français" n'indique pas à savoir si vous avez excel 2007, 1997 ou Excel MAC 2011, ... et n'aide pas les personnes qui vont vous répondre dans vos demandes.


de placer le curseur dans le textbox "Badgebox", il se met dans le "Nombox".

Quand j'ouvre votre fichier, la textbox active est bien BadgeBox et non Nombox.


Si quelqu'un m'arrive à faire cette partie en boucle, ça serait parfait aussi car je dois répéter 30 fois. J'ai essayé plusieurs façons mais il ne marche pas non plus.

dans la liste en colonne AO AP, on trouve pas toutes les infos de ligne. exemple FCH3 n'est pas trouvé. Est-ce Normal que ce soit manquant ?

Autres questions :
- Pourquoi mettez-vous un timer ?
- Pourquoi videz-vous les textbox à la fin du code ?

Je vérifierai le code que je vous ai préparé une fois les infos reçues

Crdlt

Bonjour,

C'est l'excel "Microsoft® Excel® pour Microsoft 365 MSO (Version 2308 Build 16.0.16731.20496) 32 bits", j'ai ajouté dans mon profil.

À l'ouverture du fichier la textbox est bien placé dans n° de badge, le problème c'est à la fin, après effacer tous les valeurs, le curseur se mets dans la box "nom".

Ce fichier va être affiché dans un écran dans le couloir de la production pour que les personnes qui sont pas à l'aise avec l'ordi, puissent seulement badger (va être lié à un lecteur de badge) et regarder son planning du mois. J'ai mis 30 secondes pour que la personne regarde son planning et après la personne suivante puisse faire le même... mais j'ai absolument besoin que le curseur se mets dans la box "numéro de badge".

J'ai ajouté maintenant tous les postes dans la liste AO, mais la boucle ne marche pas quand même.

Merci beaucoup.

Bonne journée

Bonjour,

Merci d'avoir modifié votre profil.


À l'ouverture du fichier la textbox est bien placé dans n° de badge, le problème c'est à la fin, après effacer tous les valeurs, le curseur se mets dans la box "nom".

Oui j'avais compris votre problème.

J'ai mis 30 secondes pour que la personne regarde son planning et après la personne suivante puisse faire le même... mais j'ai absolument besoin que le curseur se mets dans la box "numéro de badge".

Ok je comprends le besoin


Toutefois j'ai encore une question avant de finaliser les codes.
Lorsque vous allez quitter l'Usf, vous le ferai via la croix en haut à droite de l'USF ou obligatoirement par un bouton à placer sur l'usf ?

Bonjour,

On ferme jamais l'usf... il doit toujours être activé sur un écran afin que les personnes puissent consulter le planning lorsqu'elles badgent.

Merci. Bonne journée

On ferme jamais l'usf... il doit toujours être activé sur un écran afin que les personnes puissent consulter le planning lorsqu'elles badgent.

Heu je comprends mais c'est une éventualité que vous devez prendre en considération. exemple : fermer excel, mettre à jour les données de votre feuille,....

Vous allez faire comment dans ce cas ?


Rem : deux points auxquels vous devrez faire attention
1. Votre tableau est mis au format structuré. Vous ne devez jamais avoir de ligne sans données dans un tableau mis au format structuré. Donc dans votre fichier, supprimez la ligne 5 (par exemple).
Si vous devez ajouter une donnée, il vous suffit de vous positionner en dessous de la dernière ligne et entrer une donnée. Le tableau reprendra automatiquement la nouvelle ligne.
2. Evitez les points dans vos formats de date. Par défaut les dates sont toujours mentionnées avec le slash (/) ou le tiret (-)

Hello,

Oui vous avez raison, on a besoin de le fermer pour mettre à jour les données, le mieux ça sera de fermer via la croix en haut à droite .

Ok. Suivez ceci pas à pas
- Allez dans votre usf
- supprimez tous les codes et remplacez-les par ceux ci-dessous

Dim encours As Boolean
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
encours = True
End Sub

Private Sub Badgebox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Badgebox.Value = vbNullString Then Cancel = True
End Sub

Private Sub Badgebox_Afterupdate()
Dim ligne As Integer

If encours = True Then Exit Sub

On Error Resume Next
ligne = WorksheetFunction.Match(CStr(Me.Badgebox), Range("Plan").ListObject.ListColumns(1).DataBodyRange, 0)
If ligne = 0 Then
    MsgBox "Ce numéro de badge n'existe pas. " & vbCrLf & "Veuillez contacter les Ressources Humaines", , "Numéro de badge pas trouvé"
    Exit Sub
End If
On Error GoTo 0

Me.NomBox = Range("Plan").ListObject.DataBodyRange(ligne, 2)

Dim i As Byte
On Error Resume Next
For i = 3 To Range("Plan").ListObject.ListColumns.Count
    If i = 33 Then Exit For
    Controls("DateBox" & i - 2) = Range("Plan").ListObject.HeaderRowRange(i)
    Controls("PosteBox" & i - 2) = Range("Plan").ListObject.DataBodyRange(ligne, i)
    Controls("Expbox" & i - 2) = WorksheetFunction.VLookup(CStr(Me.Controls("PosteBox" & i - 2)), Sheets("Planning").Range("AO:AP"), 2, 0)
Next i

Dim tempsinitial
' Enregistrer le temps initial
tempsinitial = Timer

' Attendre 30 secondes
Do While Timer < tempsinitial + 5
    DoEvents
Loop

' Effacer tous les valeurs des box
Dim ctrl As Control
For Each ctrl In frmRecherche.Controls ' Parcourir tous les contrôles du UserForm
    If TypeOf ctrl Is MSForms.TextBox Then ' Vérifier si le contrôle est un TextBox
       ctrl.Text = vbNullString ' Effacer la valeur du TextBox
    End If
Next ctrl

End Sub

Faites un test

N'oubliez pas mes remarques pour la ligne sans données et les formats de date.

Si ok pensez à

Cordialement

Bonjour,

ça marche très bien, c'est super, merci beaucoup :D

Bonjour à nouveau,

J'ai eu une demande de copier le planning avec la mise ne forme (couleurs, gras) car c'est important pour le personnel le code couleur.

Donc j'ai adapté le code avec un exemple qui m'a été envoyé sur ce forum.

Le fichier fonctionne très bien la première fois, mais pas pour les suivants.

Comment j'active à nouveau le code pour que se relance quand je renseigne un nouveau numéro de badge?

Bonjour

Cela n'a plus rien à avoir avec votre fichier précédent cela ....
Vous voulez faire quoi exactement ?
Copier la ligne de la personne concernée ? si oui on la copie en dessous du tableau ?

Cordialement

Bonjour,

Ce fichier est déjà avec une partie du "vrai" planning".

Oui copier la ligne correspondant avec la mise en forme.

On la copie en dessus de chaque date dans le premier onglet.

Cette partie j'avais réussi, c'est juste la fin que je n'arrive à répéter pour les prochains n° de badge.

Merci beaucoup.

Re

Ok mais quand vous écrivez --> Le fichier fonctionne très bien la première fois, mais pas pour les suivants.
Je ne vois pas comment vous faites car le code Afterupdate ne va pas fonctionner s'il n'y a pas une action qui permet de sortir de cette unique textbox.
Le seul moyen dans votre cas est de cliquer sur la croix.
Comment faites-vous ?

Bonjour,

C'est vrai, le code s'active quand je clique sur la croix du usf. Mais les prochaines fois rien se passe quand je fait le même.

Le but est de cliquer en nul part, activer quand je change de n° de badge. Les collaborateurs doivent simplement badger sur un lecteur de badge et regarder son planning sans cliquer en nul part. Est-ce que c'est possible?

Merci pour votre aide.

Bonjour,

Le but est de cliquer en nul part, activer quand je change de n° de badge. Les collaborateurs doivent simplement badger sur un lecteur de badge et regarder son planning sans cliquer en nul part. Est-ce que c'est possible?

Le mieux est d'avoir un bouton de confirmation sans quoi excel ne sait pas ce que vous voulez.
Je ne vois d'ailleurs pas ce qui gênerait sachant que si vous vous inscrivez à une borne X dans un centre teléphonique par exemple, vous devez toujours confirmer la demande
L'abandon dans votre cas peut être géré par la minuterie que vous avez mise en place dans le code

Crdlt

Bonjour,

Oui, on peut ajouter un bouton pour valider. L'écran va être tactile, donc les personnes ont la possibilité d'appuyer sur une touche.

Merci.

Oui, on peut ajouter un bouton pour valider.

Ok alors faites ceci dans votre fichier

1. Dans THISWORKBOOK, remplacez le code par ceci

Private Sub Workbook_Open()
Feuil1.Activate
Call afficherform
End Sub

2. Dans le module 1, remplacez par ce code

Sub afficherform()
frmRecherche.Show
End Sub

3. Dans l'USF Frmrecherche, ajoutez un bouton (par défaut il devrait être nomméCommandButton1)

4. Dans l'USF Frmrecherche, remplacez tous les codes par ceci

Option Explicit
Private Sub CommandButton1_Click()
Dim fp As Worksheet
Dim cell As Range
Dim ln As Integer

Set fp = Sheets("Planning")
Set cell = fp.Range("A6:A" & fp.Range("A" & Rows.Count).End(xlUp).Row).Find(Badgebox.Value, lookat:=xlWhole)

If Not cell Is Nothing Then
    ln = cell.Row
Else
    MsgBox "Ce numéro de badge n'existe pas dans le planning !", , "Erreur Badge"
    Badgebox.Value = vbNullString
    Exit Sub
End If

Application.ScreenUpdating = False
Me.Hide
With Feuil1
    .Range("B4") = fp.Range("B" & ln) 'nom
    fp.Range("C" & ln & ":I" & ln).Copy 'copier et coller 1er semaine
    With .Range("A7")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteFormats
    End With

    fp.Range("J" & ln & ":P" & ln).Copy 'copier et coller 2eme semaine
    With .Range("A12")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteFormats
    End With

    fp.Range("Q" & ln & ":W" & ln).Copy 'copier et coller 3eme semaine
    With .Range("A17")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteFormats
    End With

    fp.Range("X" & ln & ":AD" & ln).Copy 'copier et coller 4eme semaine
    With .Range("A22")
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteFormats
    End With

    Application.ScreenUpdating = True

    Dim tempsinitial
    ' Enregistrer le temps initial
    tempsinitial = Timer

    ' Attendre 30 secondes
    Do While Timer < tempsinitial + 5
        DoEvents
    Loop

    Badgebox.Value = vbNullString
    .Range("B4, A7:G7, A12:G12, A17:G17, A22:G22").ClearContents 'effacer contenu
End With

Call afficherform
End Sub

Il faudra remplacer le contrôle du temps, il faudra remplacer le 5 par la valeur souhaitée

Lors de l'ouverture du fichier l'USF sera automatiquement affichée et la feuil1 sera affichée
Une fois le click effectué sur le boiuton les données de planning seront importées dans la feuil1 et l'USF sera masquée le temps de pouvoir lire le planning pendant le temps que vous choisirez. Une fois le temps écoulé l'USF sera réaffichée pour le badge suivant

Crdlt

Super Dan, merci beaucoup.

Il manquait juste mettre le curseur dans le badgebox à la fin, mais j'ai ajouté presqu'à la fin et maintenant c'est nickel.

Badgebox.Setfocus
Call afficherform
End Sub
Rechercher des sujets similaires à "mettre curseur bon textbox"