Userform/listbox base de données

Bonjour à vous !

Je planche sur un fichier de gestion de temps de travail avec mes faibles connaissances en VBA.

En partant de tutos et avec votre aide, j'ai pas mal avancé mais je coince sur quelques petites choses.

Un userform permet la saisie des temps de travail ou absences et alimente la feuille DB.

Une listbox dans l'userform permet la visualisation des pointages existants avec filtres.

La listbox est alimentée avec RowSource. (peut-être pas la meilleure solution ?)

Mais ça fonctionne plutôt bien.

J'aimerais trouver des pistes pour avoir :

  • la possibilité de sélectionner une ligne dans la listbox pour la supprimer de la DB avec le bouton rouge (en cas d'erreur de saisie)
  • et surtout la possibilité de saisir un évènement (temps de travail ou autre) identique pour tous les personnels d'un même poste en même temps.

Je joins un fichier "allégé" qui vous permettra de comprendre ce que je veux dire

Et oui, vous allez trouver ça brouillon, si vous avez des conseils pour alléger tout ça, je suis tout ouïe

Merci pour votre intérêt en tous cas et bonne soirée !

78test.xlsm (43.07 Ko)

Salut,

Concernant ta 1ere question tu peux essayer cela.

J'ai considérais que l'ID, la date et la valeur de la colonne résultat permettait de définir une clé unique.

Private Sub CommandButton2_Click()
Dim i%
For i = 1 To fp.Range("Tableau2").Rows.Count + 1
    If fp.Range("Tableau2")(i, 1) = Me.ListBoxpointage.List(ListBoxpointage.ListIndex, 0) _
    And fp.Range("Tableau2")(i, 2) = Me.ListBoxpointage.List(ListBoxpointage.ListIndex, 1) _
    And fp.Range("Tableau2")(i, 10) = Me.ListBoxpointage.List(ListBoxpointage.ListIndex, 9) Then
        VRep = MsgBox("Voulez-vous vraiment supprimer cette ligne", vbApplicationModal + vbYesNo, "Confirmation")
        If VRep = vbYes Then
            On Error GoTo Pb:
            fp.Range("Tableau2")(i, 1).EntireRow.Delete
            MsgBox "La ligne a été supprimée", vbApplicationModal + vbInformation, "Information"
        End If
        Exit Sub
    End If
Next i
MsgBox "La ligne n'existe plus", vbApplicationModal + vbInformation, "Information"
GoTo Fin
Pb:
MsgBox "La ligne n'a pas pu être supprimée", vbApplicationModal + vbInformation, "Information"
Fin:
End Sub

Concernant la question 2, comment connait-on la liste des personnes concernées par l'événement ?

A+

Jers

@Jers:

J'avais solutionné cette partie à peu près comme tu le proposes

Merci d'y avoir réfléchi !!!

J'avance à petits pas...

Pour la 2° question, je pensais extraire une liste filtrée par poste du personnel en feuille "qrypersonnel" pour appliquer à cette sélection le nouveau pointage.

Mais l'idéal serait je pense une nouvelle listbox contenant le personnel, filtrable sur la colonne "poste", et avec multi-sélection pour pouvoir n'en sélectionner qu'une partie...

Merci à toi pour ta proposition en tout cas !

Et bonne journée !

Salut,

Oui une Listbox contenant la liste des personnes avec case à cocher serait la solution la + simple.

Je t'envoie un ex ce soir.

A+

@Jers19

Je teste des trucs mais j'ai du mal, j'avoue

Merci beaucoup pour ton coup de main !

Salut Oliv34,

Voici une proposition dans le fichier joint.

A voir si cela te convient

A+

Jers

92test-1-copie.xlsm (51.49 Ko)

@jers19

Wow bien joué !

Ça fonctionne très bien ! Bravo !

Tu me permets d'avancer à grands pas

Est-ce qu' avec rowsource on peut appliquer un filtre sur le contenu de listbox1, par poste par exemple, sans que ça perturbe le résultat ?

Un grand merci à toi !

@Oliv34,

Non ce n'est pas possible.

Quelle est la finalité, afficher uniquement les personnes appartenant à un service ?

Si oui, il faut ajouter une liste déroulante avec les services, puis alimenter la listbox en fonction de la valeur de la liste déroulante.

@jers19:

Salut

Le but c'est de saisir le même pointage pour un poste entier par le responsable du poste, rapidement sans avoir à chercher chaque nom dans la liste.

Donc du coup il faudrait utiliser Additem plutôt que Rowsource, j'ai bon ?

Ça modifie pas mal de choses dans le code.

Modifie l'userform en ajoutant la liste des postes afin que je vois à quoi cela correspond exactement.

@jers19

Here it is

Et merci pour les frames, je ne connaissais pas et j'ai vu qu'on pouvait faire des trucs sympas avec, à fouiller

32test2.xlsm (36.17 Ko)

ok j'ai une dernière question.

Quand tu changes le poste, il doit être changé pour toutes les personnes afficher dans la liste ou tu dois sélectionner les personnes avant ?

@jers19

Dans l'idéal, il faudrait pouvoir désélectionner dans la liste affichée.

Merci pour ton aide

Voici

Jers

26test2.xlsm (34.51 Ko)

@jers19

Han , je t'ai posté le mauvais fichier !!!

j'avais trouvé un moyen de modifier les postes (jour,matin etc) en affichant une autre listbox.

Ce qui me manque c'est de pouvoir saisir un horaire de travail ou un événement pour plusieurs salariés en même temps, ceux d'un même poste :s

C'est pas du temps perdu, je réutiliserai ça quand même, c'est plus propre que mon bidouillage

Et je mettrai le bon fichier demain matin, je suis au boulot là :s

Réellement désolé pour cette bourde

Re,

Si tu as toujours envie, celui là est le bon.

Et je pense que c'est un poil plus ardu

Merci et bonne journée !

58test-1-copie.xlsm (51.13 Ko)

@Ceuzin

Bonjour et merci pour ces liens, je vais décortiquer ça !

Bonne journée

Salut Oliv34

Pourquoi tu n'utilises pas l'userform que je t'ai envoyé lors de mon dernier poste pour gérer le changement de poste.

En gros, à partir de ton fichier, tu cliquerais sur le bouton chgt de poste afin d'ouvrir l'userform de mon dernier fichier.

Jers

Salut Jers19,

Oui il m'a bien aidé, j'ai fait un mix de tout ça et ça fonctionne plutôt bien !

J'ai utilisé ma feuille de recherche pour filtrer la listbox personnel et la saisie multiple marche quand même.

Un grand merci à toi pour ton aide précieuse !!!

Bonne soirée !

Rechercher des sujets similaires à "userform listbox base donnees"