XL 2019 Charger plage de données non vides dans combobox

Bana XIII

XLDnaute Nouveau
Salut la communauté,

J'éprouve une certaine difficulté sur un projet, et je souhaite le partager sur ce panel.

J'ai un tableau de 13 colonnes, la première qui contient les noms des salariés, et les douze (12) autres

contenant les primes mensuelles correspondantes de janvier à décembre.

J'ai sur mon userform, deux Combobox, le premier pour le choix du mois, et le second pour la sélection

des salariés. Donc bien sûr, je souhaite pour chaque mois choisi, pouvoir charger exclusivement les

salariés qui ont eu des primes (c'est à dire dont la cellule de la colonne du mois en question n'est pas vide

ou égale à zéro).

J'espère que je me suis bien expliqué.

Malheureusement je peux pas joindre le fichier original pour raison de confidentialité. J'ai joint

un classeur simplifié qui peut guider toute bonne volonté sur ce forum.

Merci d'avance!
 

Pièces jointes

  • PRIMES.xlsm
    28.5 KB · Affichages: 10

Jacky67

XLDnaute Barbatruc
je souhaite pour chaque mois choisi, pouvoir charger exclusivement les

salariés qui ont eu des primes (c'est à dire dont la cellule de la colonne du mois en question n'est pas vide

ou égale à zéro).
Bonjour,
Une proposition avec ce code
VB:
Private Sub Cbx_Salariés_Enter()
    Dim Tablo, Col, C
    Cbx_Salariés.Clear
    Application.ScreenUpdating = False
    With Sheets("PRIMES")
        Set Tablo = .Range("$a$4:$m$" & .Cells(.Rows.Count, "A").End(xlUp).Row)
        Col = Application.Match(Cbx_Mois, Tablo.Rows(1), 0)
        On Error Resume Next
        Tablo.AutoFilter Field:=Col, Criteria1:=">0"
        For Each C In Tablo.Offset(1).Resize(Tablo.Rows.Count - 1).Columns(1).SpecialCells(xlCellTypeVisible).Rows
            Cbx_Salariés.AddItem C
        Next
    End With
    Tablo.AutoFilter
End Sub
 

Pièces jointes

  • PRIMES.xlsm
    28.5 KB · Affichages: 3

job75

XLDnaute Barbatruc
Bonjour Bana XIII, Jacky67,

Une autre manière avec ce code dans l'UserForm :
VB:
Private Sub Cbx_Mois_AfterUpdate()
Dim col As Variant, tablo, i&, v, liste(), n&
Cbx_Salariés.Clear
col = Application.Match(Cbx_Mois, [BASE_MOIS], 0)
If IsError(col) Then Exit Sub
tablo = [BASE_MOIS].CurrentRegion 'matrice, plus rapide
For i = 2 To UBound(tablo)
    v = tablo(i, col + 1)
    If v <> 0 And v <> "" Then
        ReDim Preserve liste(n) 'base 0
        liste(n) = tablo(i, 1)
        n = n + 1
    End If
Next
If n Then Tri liste, 0, n - 1: Cbx_Salariés.List = liste 'liste triée
End Sub

Private Sub UserForm_Activate()
Label_Année = [ANNEE]
Cbx_Mois.List = Application.Transpose([BASE_MOIS])
Cbx_Mois.ListIndex = Month(Date) - 1
End Sub
A+
 

Pièces jointes

  • PRIMES(1).xlsm
    27 KB · Affichages: 10

Bana XIII

XLDnaute Nouveau
Les gars vous êtes incroyables! Merci pour votre sollicitude
Les deux (02) méthodes marchent à merveille. Je vais les revoir plus minutieusement
afin d'en retenir une.

Pour la suite de mon projet, j'ai encore une difficulté que j'aimerai partager. Peut-être
que je devrais ouvrir une autre discussion... Bah! Je vais quand même la partager ici
pendant qu'on y est.

Bien voila, dans la continuité du projet, je souhaiterais pour tous les salariés importés
dans le combobox, pouvoir imprimer leur fiches de primes individuelles.

là actuellement, je suis obligé de le faire manuellement. Sauf que dans le projet réel, nous
avons plus de trois cent (300) salariés. S'il faut lancer manuellement l'impression par la
sélection individuelle des noms dans le combobox, c'est franchement embêtant.

Du coup, je suis en train de m'imaginer une macro qui en un seul clic, pourrait lancer les
impressions et/ou l'export en PDF de toutes les fiches de primes à la suite

Je ne sais pas si c'est possible! Mais ça ne coute rien de le demander!
 

job75

XLDnaute Barbatruc
Vous ne dites pas ce que vous voulez imprimer.

A quoi doit ressembler une "fiche de primes individuelles" ?

S'il s(agit d'indiquer toutes les primes de l'année il suffit d'imprimer la ligne du salarié.

En masquant bien sûr les mois sans prime.
 

Bana XIII

XLDnaute Nouveau
Vous ne dites pas ce que vous voulez imprimer.

A quoi doit ressembler une "fiche de primes individuelles" ?

S'il s(agit d'indiquer toutes les primes de l'année il suffit d'imprimer la ligne du salarié.

En masquant bien sûr les mois sans prime.
Ok je me suis peut être mal expliqué,

En fait, le choix du salarié dans le combobox renvoie ses informations et le montant de sa prime du mois et de l'année de traitement sur une feuille Excel qu'il me faudra imprimer(et ou exporter en pdf), qu'il me faudra ensuite soumettre aux intéressés pour signature. Donc, il y aura une fiche mensuelle pour chaque salarié du moment où ce dernier a le bénéfice d'une prime.

Donc ma quête a pour objectif de m'éviter de devoir imprimer ou exporter une fois à la fois les fiches par employé que je sélectionne dans le combobox et que je valide soit par un bouton Imprimer tout, ou par un bouton exporter tout (ce que j'arrive déjà à faire).

Je veux juste pouvoir optimiser ma macro pour qu'au seul clic soit du bouton IMPRIMER TOUT ou EXPORTER TOUT, je puisse éditer en cascade les fiches de primes des employés chargés dans le Combobox.

Par exemple j'ai au cours du mois d'octobre 2021, cent cinquante (150) salariés ayant le bénéfice de primes hors bulletins. Donc en sélectionnant le mois d'octobre et l'année 2021 sur mon userform, mon combobox se charge des noms de ces employés. Je veux qu'en cliquant:
- Sur mon bouton imprimer tout, que l'impression des 150 fiches des primes soit lancée automatiquement en une seule fois;
- Ou soit sur mon bouton exporter tout, que l'export des 150 fiches des primes en format PDF soit lancée automatiquement en une seule fois.

Je ne sais pas si c'est possible, mais ça m'aiderait beaucoup de pouvoir y parvenir!

Merci!
 

job75

XLDnaute Barbatruc
Bonjour Bana XIII, le forum,

Pour les impressions voyez ce fichier (2) et le code de l'UserForm :
VB:
Dim mois$, F As Worksheet, nom$, tout As Boolean 'mémorise les variables
'-----
Private Sub CommandButton1_Click() 'Imprimer la fiche
If mois = "" Then
    Set F = Sheets("Modèle fiche")
    If Cbx_Mois.ListIndex > -1 Then mois = Cbx_Mois
    If Cbx_Salariés.ListIndex > -1 Then nom = Cbx_Salariés
    F.Cells(1, 2) = Date
    F.Cells(3, 2) = mois & " " & Label_Année
End If
If mois = "" Or nom = "" Then GoTo 1
F.Cells(2, 2) = nom
With [BASE_MOIS].CurrentRegion
    F.Cells(4, 2) = .Cells(Application.Match(nom, .Columns(1), 0), Application.Match(mois, .Rows(1), 0))
End With
Cbx_Salariés = nom
F.PrintPreview 'pour tester
'F.PrintOut 'pour imprimer
1 If Not tout Then mois = ""
nom = ""
F.Columns(2).ClearContents 'RAZ
End Sub

Private Sub CommandButton2_Click() 'Imprimer tout
Dim i&
tout = True
Cbx_Salariés = ""
With Cbx_Salariés
    For i = 0 To .ListCount - 1
        nom = .List(i)
        CommandButton1_Click 'lance la macro
    Next
End With
tout = False
mois = ""
End Sub
Pour l'aperçu avant impression l'UserForm doit être ouvert en non modal.

A+
 

Pièces jointes

  • PRIMES(2).xlsm
    33 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 124
Membres
103 126
dernier inscrit
Vuagno27