XL 2019 boutons sur formulaire non fonctionnels

olivier1984

XLDnaute Junior
Bonsoir à tous les experts du forum.

Je suis très noviste en VBA en phase d'initiation je dirais.

Je tiens à remercier tous ceux qui m'ont aidé hier à résoudre toutes mes difficultés que j'ai posées notamment Toofatboy et job75.

Aujourd'hui je sollicite une toute petite aide sur mon formulaire.

1er souci : Boutons de commande.

Sur la feuille Paie, j'ai créé un formulaire à 5 boutons (nouveau, effacer, modifier, supprimer et quitter) mais parmi les 5 je n'arrive pas à faire fonctionner les boutons "modifier" et "supprimer" et c'est là mon premier souci.


2ème souci : initialisation du formulaire.

Toujours dans la feuille "Paie", J'aimerais qu'à l'ouverture de mon formulaire tous les champs se remplissent automatiquement avec les données contenues dans mon tableau à savoir :
Nom salarié
Nbre dimanche travaillé
Salissure
Astreinte
Panier
Assiduité
Transport

Merci à tous pour vos apports.
 

Pièces jointes

  • PAIE GIG.xlsm
    744.1 KB · Affichages: 5
Dernière modification par un modérateur:

vgendron

XLDnaute Barbatruc
hello

pour remplir le fomrulaire quand tu selectionnes un nom dans le combo
VB:
Private Sub CboNom_Change()
    If Me.CboNom.ListIndex = -1 Then Exit Sub 'si rien n'est selectionné, on quitte
    With Sheets("Paie").ListObjects("t_Paie") 'avec la "TS" t_Paie de la feuille "Paie"
        Set trouve = .ListColumns("Nom & Prénom").Range.Find(Me.CboNom, lookat:=xlWhole) 'on cherche le nom dans la colonne "Nom & Prénom"
        If trouve Is Nothing Then 'si on ne trouve pas
            MsgBox "Employé non renseigné"
            Exit Sub
        End If
        ind = trouve.Row - .Range.Row ' on récupère le numéro de ligne dans la TS
        'on remplie les controles du formulaire
        Me.TextJourDim = .ListColumns("JOUR DIM").DataBodyRange(ind) 'avec le contenu de la colonne "Jour Dim" à la ligne ind
        Me.TextSal = .ListColumns("SALISSURE").DataBodyRange(ind)
        'Me.TextAstreinte = .ListColumns("").DataBodyRange(ind)
       ' Me.Textpanier = .ListColumns("").DataBodyRange(ind)
        Me.TextAssiduite = .ListColumns("ASSUIDITE").DataBodyRange(ind)
        Me.Texttransport = .ListColumns("Prime transport").DataBodyRange(ind)
        Me.TextJT = .ListColumns("Jours de travail mensuel").DataBodyRange(ind)
    End With
  
End Sub

je te laisse compléter/corriger le nom des colonnes à utiliser pour remplir les controles
 

vgendron

XLDnaute Barbatruc
Si je peux me permettre une remarque..
tu n'exploites pas la structure des tables structurées que tu as définies dans les différents onglets
pire... les select, activate...à proscrire au maximum

dans la Table Strucuturée (TS) "t_paie": peut on avoir plusieurs lignes pour le meme employé?
 

vgendron

XLDnaute Barbatruc
perso, je n'aime pas définir en dur le rowsource d'un combo...
1) c'est pas aussi souple que ce qu'on pourrait souhaiter
2) ca oblige à créer des plages nommées... alors que la TS te donne directement le nom de la colonne

regarde ce code que j'utilise pour remplir un combo à l'initialize du formulaire
PS: il faut supprimer "Noms" dans les propriétés du combo

VB:
Sub ReloadCombo(NomCombo As ComboBox, NomTab As ListObject, NumCol As Integer)
    NomCombo.Clear 'on commence par vider le combo
    With NomTab 'avec la TS donnée en paramètre
        For i = 1 To .ListRows.Count 'pour chaque ligne
            NomCombo.AddItem .DataBodyRange(i, NumCol) 'on ajoute l'élément de la colonne passée en paramètre
        Next i
    End With
End Sub



Private Sub UserForm_Initialize()
    Dim TS As ListObject
    
    Set TS = Sheets("salariés").ListObjects("Table_Salaries")
    Call ReloadCombo(Me.CboNom, TS, 2)
End Sub
 

vgendron

XLDnaute Barbatruc
Je viens de jeter un oeil sur le classeur...

y'en a partout !
des plages nommées sans références..
des plages nommées qui sont définies dans d'autres classeurs..
une quantité de formulaires. dont on ne sait meme pas s'ils sont appelés un jour..
des codes associés à des boutons qui n'existent pas...

faudrait faire un peu de ménage..
 

olivier1984

XLDnaute Junior
Merci mon
hello

pour remplir le fomrulaire quand tu selectionnes un nom dans le combo
VB:
Private Sub CboNom_Change()
    If Me.CboNom.ListIndex = -1 Then Exit Sub 'si rien n'est selectionné, on quitte
    With Sheets("Paie").ListObjects("t_Paie") 'avec la "TS" t_Paie de la feuille "Paie"
        Set trouve = .ListColumns("Nom & Prénom").Range.Find(Me.CboNom, lookat:=xlWhole) 'on cherche le nom dans la colonne "Nom & Prénom"
        If trouve Is Nothing Then 'si on ne trouve pas
            MsgBox "Employé non renseigné"
            Exit Sub
        End If
        ind = trouve.Row - .Range.Row ' on récupère le numéro de ligne dans la TS
        'on remplie les controles du formulaire
        Me.TextJourDim = .ListColumns("JOUR DIM").DataBodyRange(ind) 'avec le contenu de la colonne "Jour Dim" à la ligne ind
        Me.TextSal = .ListColumns("SALISSURE").DataBodyRange(ind)
        'Me.TextAstreinte = .ListColumns("").DataBodyRange(ind)
       ' Me.Textpanier = .ListColumns("").DataBodyRange(ind)
        Me.TextAssiduite = .ListColumns("ASSUIDITE").DataBodyRange(ind)
        Me.Texttransport = .ListColumns("Prime transport").DataBodyRange(ind)
        Me.TextJT = .ListColumns("Jours de travail mensuel").DataBodyRange(ind)
    End With
 
End Sub

je te laisse compléter/corriger le nom des colonnes à utiliser pour remplir les controles
Merci mon cher job75 en réalité je n'avais pas du tout vu ce message et c'est maintenant que je le vois donc tout ce que je disais précédemment c'est parce que je n'avais pas encore vu ce message ci.

Je te reviens en soirée pour mon retour.

Encore une fois merci
 

olivier1984

XLDnaute Junior
nouvelle version
j'ai retravaillé plusieurs USF
User_Salariés
USF_Employeur
USF_Contrat
USF_Paie
USF_Reglement
USF_Status
Tu as exactement fait ce que je voulais mais que j'ai oublié de mentionner car effectivement il faudrait d'abord sélectionner un salarié qui déclenchera le remplissage du formulaire.

Tu es vraiment un génie tu as lu dans mes pensées.

Je te reviens pour le retour
 

olivier1984

XLDnaute Junior
Je viens de jeter un oeil sur le classeur...

y'en a partout !
des plages nommées sans références..
des plages nommées qui sont définies dans d'autres classeurs..
une quantité de formulaires. dont on ne sait meme pas s'ils sont appelés un jour..
des codes associés à des boutons qui n'existent pas...

faudrait faire un peu de ménage..
Justement je suis très noviste en VBA et je me débrouille avec des tutoriels par ci par là du coup ça donne ce petit désordre là 😭😭
 

Discussions similaires

Réponses
3
Affichages
163

Statistiques des forums

Discussions
314 499
Messages
2 110 247
Membres
110 711
dernier inscrit
chmessi