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

ChTi160

XLDnaute Barbatruc
Re
Pour y remédier suffit de mettre une date plutôt que la transcription de cette date en texte .(Tu peux mettre le format de la colonne pour obtenir la même chose ."Dimanche 13 Octobre 2024"
Jean marie
 

TooFatBoy

XLDnaute Barbatruc
le problème c'est que dans la Colonne "Date" ce n'est pas des dates mais du texte
Exact. Je ne l'ai pas dit, mais j'ai passé la colonne "Date" au format jj/mm/aa, et vu qu'il n'y avait que deux dates je les ai re-saisies donc dans mon fichier ce sont bien des dates et ma formule devrait fonctionner.


Je pense que ces deux Colonnes Semaine et Date peuvent être remplie via la procédure qui remplis la Base de Donnés .
Oui, ça me semble mieux, mais il y avait une formule erronée, donc j'ai proposé une formule correcte pour la remplacer. Mais il est évident qu'il vaut mieux mettre le numéro de semaine en dur lors de l'ajout de la ligne et ses données.
 

NONO14

XLDnaute Impliqué
Bonjour TooFatBoy
Le numéro de semaine a changé, hier nous étions sur la semaine 41 et aujourd'hui la 42.
 

ChTi160

XLDnaute Barbatruc
Bonjour NONO14
le problème c'est que dans ta Base de Données tu auras partout ou tu as mis ta formule la semaine en cours Mais pas la semaine de la Date ou tu as remplis la Base de Données
donc Hier toutes les Lignes avaient comme semaine 41 aujourd'hui toutes les Lignes auront la semaine 42 car la Formule prend en compte le Jour de la semaine (d'aujourd'hui)
Bonne Journée
Jean marie
 

NONO14

XLDnaute Impliqué
Bonjour ChTi160
C'est le but rechercher, tous les pointages de la semaine auront le même n° de semaine, ou alors je ne saisi pas le sens du problème.
 

ChTi160

XLDnaute Barbatruc
Re
effectivement !
C'est le but rechercher, tous les pointages de la semaine auront le même n° de semaine, ou alors je ne saisi pas le sens du problème.
que tu recherche dans ta Base de Données des Numéros de semaine c'est le But ,mais quand dans cette Base de Données tu n'auras(Formules) que la semaine en Cours et rien d'autre alors que tu devrais y avoir (si nous avons bien compris )les enregistrement d'autres semaines enregistrées !
Jean marie
 

NONO14

XLDnaute Impliqué
Ah oui j'ai compris. Normalement, on ne pourra modifier que les pointages de la semaine en cours donc cela ne devrait pas causer de problème. Il est interdit actuellement de modifier les enregistrements manuels des entrées et sorties, il y a des chances que cela perdure.
 

ChTi160

XLDnaute Barbatruc
Re
je vois que l'on ne se comprends pas Lol
tu dis :
Ah oui j'ai compris. Normalement, on ne pourra modifier que les pointages de la semaine en cours donc cela ne devrait pas causer de problème.
le problème est que tu n'auras dans ta Base de Données que des Numéros de semaine de la semaine du Jour ou tu vas ouvrir l'appli Lol
(aujourd'hui) , Si tu as 200 lignes dans ta Base de Données , tu auras 200 lignes avec la semaine 42
bon j'arrête !
Jean marie
 

NONO14

XLDnaute Impliqué
Ben oui, j'ai compris. Puisque ma cellule fait référence à une formule en continuelle modification. Quel idiot je fais... Comme il a été dit plus haut il vaut mieux récupérer le N° du formulaire. J'ai mis du temps (c'est lundi) mais j'ai enfin compris.
 

vgendron

XLDnaute Barbatruc
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é
Bonjour vgendron,
Et je répète ".Listcolumns....." pour chacune de mes colonnes à saisir ?
Merci pour ton aide
 

vgendron

XLDnaute Barbatruc
il me semble que je t'avais envoyé ces liens pour lecture..

 

Discussions similaires

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