Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Rechercher la dernière cellule saisie dans un TS et ajouter l'heure système

NONO14

XLDnaute Impliqué
Bonjour à toutes et à tous,
Me revoilà avec une nouvelle discussion. Voici mon problème.
Dans un formulaire UfPointage il y a un bouton qui doit servir à enregistrer l'heure système dans une feuille "Planning" dans un TS ("t_BDD").
Pour ce faire, on doit rechercher le code agent (Txt_Code) dans le TS, colonne "Code agent" qui est la 1ère colonne du TS, mais également rechercher si il y a déjà eu un pointage à la date du TextBox (TxB_DateJour). Si c'est le cas, alors on recherche le dernier pointage, le premier étant dans la colonne 6 (Pointage 1) et les autres à la suite jusqu'à la colonne 11 (Pointage 6).
De plus, lorsque l'on saisie le Code agent dans la Txt_Code, la ListBox (Lst_Pointage) doit se remplir des pointages déjà réalisés dans la semaine pour cet agent, si il y en a.
La ListBox doit contenir le N° semaine (Colonne 4 du TS, "Semaine") et la date de pointage. Les TextBox (Txt_Point 1 à 6) reçoivent les heures de pointages qui pourront être modifiées si besoin. Pour le moment, la ListBox et les Txt_Point sont Enabled=True. Ils seront rendu modifiable en cliquant sur le bouton modifier, mais ça on verra plus tard.
J'ai commencé un bout de code pour le remplissage du TS mais je ne sais pas comment faire pour la recherche du dernier pointage.
Merci par avance pour votre aide
VB:
Private Sub Cmb_Entrée_Click()
Dim Ctrl As Control
Dim TrouvLig As Boolean
Dim TrouvDerLig As Boolean

    If Me.Txt_Code.Value = "" Then 'Si la TextBox est vide, un message d'alerte dans le Label information
        Me.Lbx_Information.Caption = "Vous devez renseigner votre code"
        Exit Sub
    End If
   
    DeProtege ("Planning") 'On déprotège la feuille de calcul "Planning"
   
    With Sheets("Planning").ListObjects("t_BDD") 'On utilise la feuille et son TS pour les recherches et les saisies
   
    TrouvLig = False
       
        For i = 1 To ListRows.Count 'Pour chaque ligne du TS on recherche le code agent et la date
                If .ListColumns("Code agent").DataBodyRange(i) = Me.Txt_Code And .ListColumns("Dat").DataBodyRange(i) = Me.TxB_DateJour Then
            Ligne = i
    TrouvLig = True
       
        Exit For
                End If
        Next i
       
            If Not TrouvLig Then 'Si on a pas trouvé la ligne, on créé une nouvelle ligne
                Ligne = .ListRows.ass.Index
            End If
           
'On écrit les infos dans le TS
    .DataBodyRange(Ligne, 1) = Me.Txt_Code
    .DataBodyRange(Ligne, 2) = Me.Txt_Noms
    .DataBodyRange(Ligne, 3) = Me.Txt_Prénom

'Là je ne sait plus comment faire pour rechercher le dernier pointage à partir de la colonne 11 jusqu'à la 6
       
End Sub
 

Pièces jointes

  • GestPersonnnel (3).xlsm
    477.7 KB · Affichages: 12
Solution
bonjour

on est d'accord que pour répondre à la question posée dans le titre, il suffit de faire

VB:
with sheets("NomFeuille").listobjects("NomTS")
    .Listcolumns("NomColonne").databodyrange(.listrows.count)=now
end with

avec NomFeuille=nom de la feuille sur laquelle est le TS
NomTS = nom du TS
NomColonne = nom de la colonne du TS dans laquelle mettre la date du jour

NONO14

XLDnaute Impliqué
Re
Ton problème vient de tes Procédures "Txt_PointX_Change" c'est quoi le But de ces Procédures Change ?
dans mes tests je les avais isolées !
Jean marie
Elle servent à indiquer à l'agent où il en est dans ses pointages, donc là ils ne sont pas modifiables, et ensuite lorsque l'administrateur souhaitera modifier un pointage en cliquant sur une ligne de la ListBox, ils deviennent modifiables. Et après modification, la ListBox est mise à jour ainsi que le TS ("t_Saisie").
En espérant avoir été assez clair, sinon n'hésites pas à me le dire.
 

NONO14

XLDnaute Impliqué
Re
moi , je n'est pas encore compris comment tout ca doit fonctionner (c'est dommage lol) !
il faudrait que tu nous expliques ?
Jean marie
Lorsque l'agent veut pointer, il clique sur le bouton de la page accueil affecter aux pointages. Ensuite, un formulaire (UfPointage) s'affiche. L'agent tape son code dans la TextBox ("Txt_Code"), puis sur le bouton "Entrée", il a donc validé son 1er pointage de la journée. Lorsqu'il part, il retourne sur le formulaire de la même manière, et après avoir saisie son code, il ne peut que cliquer sur le bouton "Sortie" puisque le bouton "Entrée" est rendu inopérant dès lors qu'une entrée a été saisie.
Supposons maintenant qu'il oubli de pointer en partant, le lendemain, il va exécuter la même procédure, mais dans la ListBox il y a aura les pointages de la veille (ou des jours précédents), et il pourra demander à son responsable de modifier un pointage.
Donc en cliquant sur le bouton modifier, l'administrateur pourra modifier (après saisi d'un mot de mot de passe - pas encore codé) la ligne de son choix. Les données des colonnes 2 à 7 de la ListBox remplissent les Txt_Point, l'administrateur fait les modifications, clique sur le bouton "Valider", les données modifiées remplacent celles du TS (t_Saisie) qui correspondent et la ListBox est mise à jour. Fin de la procédure.
Donc les Txt_Point ont un double rôle, indicatif pour l'agent, modificatif pour l'administrateur.
Est-ce que mes explications vous conviennent ?
 

NONO14

XLDnaute Impliqué
Petit rectificatif concernant la procédure de modifications des pointages, l'administrateur passe obligatoirement par le menu en cliquant sur le bouton "Modifie un pointage" là, il lui sera demandé le mot de passe.
 

NONO14

XLDnaute Impliqué
Donc dans mon formulaire je récupère bien la ligne de la ListBox qui a été cliquée. Cependant lorsque je clique sur valider, après avoir modifier les heures, ça n'écrase pas les anciennes données dans le TS qui correspondent à cette ligne.
De plus, il me faut obliger le format "hh:mm" lors de la saisie dans les Text_Point au moment de la modification.
Je dois également mettre la ListBox à jour après la validation des modifications.
Il y encore un peu de travail pour terminer cette partie.
 

NONO14

XLDnaute Impliqué
Re
moi j'ai rien dit : Lol

Edit :
Sur quoi l'administrateur peut il intervenir? (ajout d'heure de Fin ,modification d'heure d'arrivée etc etc Merci
Jean marie
Cela peut être sur les deux dès lors qu'il y a déjà eu une arrivée.
Par exemple, il pointe son arrivée à 9h30 et un départ à 12h00, là pas de problème, puis il revient à 13h00 mais il oublie de pointer, de ce fait il ne pourra pas pointer en partant, donc l'administrateur interviendra pour saisir une heure d'arrivée. Autre cas, il pointe en arrivant mais oublie de pointer en partant, le lendemain, si c'est sa plage unique, l'administrateur pourra rectifier.
 

vgendron

XLDnaute Barbatruc
hello
depuis le temps que tu es dessus, j'ai l'impression qu'il n'y a pas grand chose qui fonctionne...
j'ais pas réussi à faire le moindre pointage

il n'y a meme pas le control de saisie des heures dans la grille
 

NONO14

XLDnaute Impliqué
hello
depuis le temps que tu es dessus, j'ai l'impression qu'il n'y a pas grand chose qui fonctionne...
j'ais pas réussi à faire le moindre pointage

il n'y a meme pas le control de saisie des heures dans la grille
Chez moi ça fonctionne. De plus, je ne suis pas tout le temps sur l'application, j'ai besoin d'être au repos assez souvent, donc je m'y mets dès que ma santé me le permet. Je fais ce que je peux avec mes moyens.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…