XL 2019 Macro pour calculer plusieurs bulletins de paie à la fois

olivier1984

XLDnaute Nouveau
Bonjour à tous cher experts.

Voici une petite application sur les salaires dont j'ai des difficultés à finalisé l'onglet BULLETIN DE PAIE.
Je recherche un code VBA qui pourra non seulement dupliquer cette fiche de paie en autant de salariés contenus sur la base de données (onglet data base) en gardant toutes les formules contenues dans cette fiche de paie vierge dont les recherches sont faites sur la base du numéro matricule CNPS. Et que ce code permette d'imprimer tous les bulletins calculés en un seul fichier pdf.

Si je peux aussi avoir un paramétrage ou un code qui me permettra d'imprimer uniquement certains bulletins ça serait la totale satisfaction et j'aurais fini mon application.

Merci d'avance pour le temps et le sacrifice que vous m'accorderez en vous penchant sur mon cas.

Ci-joint le fichier.
 

Pièces jointes

  • PAIE.xlsx
    971.1 KB · Affichages: 41

vgendron

XLDnaute Barbatruc
Hello

pourquoi faire deux posts identiques à moins de 10mn d'intervalle?

edites en un pour le vider (on ne peut pas supprimer un post: seul un modérateur le peut)
 

vgendron

XLDnaute Barbatruc
Pas de souci, ce sont des choses qui arrivent
du coup, j'ai commencé un bout de code
voir PJ
En l'état, le code bug car tu as des matricules en doublon..
avant de cliquer sur le bouton "générer bulletin", supprime les doublons de matricule
attention: tu as 100 matricules==> donc 100 bulletins à générer.. ca prend un peu de temps quand meme
 

Pièces jointes

  • PAIE.xlsm
    989.4 KB · Affichages: 17

vgendron

XLDnaute Barbatruc
pour n'imprimer QUE certains Bulletin de paie.. comment définis tu le certains?
que les CDD? les x premiers matricules, les agents de matrise, les hommes, ceux nés avant une date, ??
en fait, il faudrait que tu définisses les critères de selection
ou ajouter une colonne "Imprimer" dans ta table "Base_RH" ??
 

vgendron

XLDnaute Barbatruc
hello
la macro avec en plus l'impression en PDF
VB:
Sub GénérerBulletinPaie()
Dim Sht As Worksheet
Application.ScreenUpdating = False 'on desactive le refresh pour éviter l'effet sapin de noel
    Dim TabRH() As Variant 'déclaration d'un tablo VBA
    With Sheets("Data Base").ListObjects("BASE_RH") 'avec la table de la feuille
        TabRH = .Range.Value 'on met tout dans un tablo VBA
    End With
   
    FirstFeuille = Sheets.Count
    For i = 2 To UBound(TabRH, 1) 'pour chaque ligne du tableau à partir de 2 pour éviter la ligne d'entete
        Sheets("Bulletin de paie").Copy after:=Sheets(Sheets.Count) 'on copie la feuille
        With ActiveSheet 'avec la feuille qui vient d'etre créée
            .Name = TabRH(i, 1) 'on renomme la feuille avec le matricule
            .Range("F5") = TabRH(i, 1) 'on met le matricule en F5
        End With
    Next i
     
    LastFeuille = Sheets.Count
    NomFichier = "C:\Users\vince\Downloads\Bulletins de paie.pdf"
     'on imprime toutes les feuilles entre FirstFeuille et LastFeuille dans un pdf unique
    ActiveWindow.SelectedSheets.PrintOut from:=FirstFeuille, to:=LastFeuille, Copies:=1, Collate:=True, IgnorePrintAreas:=False
Application.ScreenUpdating = True
End Sub
 

olivier1984

XLDnaute Nouveau
pour n'imprimer QUE certains Bulletin de paie.. comment définis tu le certains?
que les CDD? les x premiers matricules, les agents de matrise, les hommes, ceux nés avant une date, ??
en fait, il faudrait que tu définisses les critères de selection
ou ajouter une colonne "Imprimer" dans ta table "Base_RH" ??
Merci pour votre attention.
Disons je vais essayer de définir des critères.

Cependant le plus important pour moi étant l'impression simultanée de tous les bulletins de paie c'est ça ma principale priorité or présentement je ne peux imprimer qu'un seul bulletin à la fois sur près de 100.

Merci beaucoup pour votre réactivité.
 

olivier1984

XLDnaute Nouveau
hello
la macro avec en plus l'impression en PDF
VB:
Sub GénérerBulletinPaie()
Dim Sht As Worksheet
Application.ScreenUpdating = False 'on desactive le refresh pour éviter l'effet sapin de noel
    Dim TabRH() As Variant 'déclaration d'un tablo VBA
    With Sheets("Data Base").ListObjects("BASE_RH") 'avec la table de la feuille
        TabRH = .Range.Value 'on met tout dans un tablo VBA
    End With
  
    FirstFeuille = Sheets.Count
    For i = 2 To UBound(TabRH, 1) 'pour chaque ligne du tableau à partir de 2 pour éviter la ligne d'entete
        Sheets("Bulletin de paie").Copy after:=Sheets(Sheets.Count) 'on copie la feuille
        With ActiveSheet 'avec la feuille qui vient d'etre créée
            .Name = TabRH(i, 1) 'on renomme la feuille avec le matricule
            .Range("F5") = TabRH(i, 1) 'on met le matricule en F5
        End With
    Next i
    
    LastFeuille = Sheets.Count
    NomFichier = "C:\Users\vince\Downloads\Bulletins de paie.pdf"
     'on imprime toutes les feuilles entre FirstFeuille et LastFeuille dans un pdf unique
    ActiveWindow.SelectedSheets.PrintOut from:=FirstFeuille, to:=LastFeuille, Copies:=1, Collate:=True, IgnorePrintAreas:=False
Application.ScreenUpdating = True
End Sub
Merci beaucoup à vous cher expert.
Je vais tester ce code et vous faire le retour pour confirmer qu'il fonctionne.

Merci
 

olivier1984

XLDnaute Nouveau
Pas de souci, ce sont des choses qui arrivent
du coup, j'ai commencé un bout de code
voir PJ
En l'état, le code bug car tu as des matricules en doublon..
avant de cliquer sur le bouton "générer bulletin", supprime les doublons de matricule
attention: tu as 100 matricules==> donc 100 bulletins à générer.. ca prend un peu de temps quand meme
Merci énormément pour ton intervention je te reviens pour les impressions.

Cordialement
 

olivier1984

XLDnaute Nouveau
Pas de souci, ce sont des choses qui arrivent
du coup, j'ai commencé un bout de code
voir PJ
En l'état, le code bug car tu as des matricules en doublon..
avant de cliquer sur le bouton "générer bulletin", supprime les doublons de matricule
attention: tu as 100 matricules==> donc 100 bulletins à générer.. ca prend un peu de temps quand meme
Merci beaucoup j'ai testé le code VBA qui marche à merveille.
Déjà j'ai pallié au problème des matricules qui étaient en doublons donc ça ne bug plus j'ai testé moi même.

Cependant j'aimerais que les bulletins de paie se dupliquent sur un nouveau classeur Excel différent de celui de l'application car tel que c'est paramétré on ne peut imprimer les bulletins qu'une seule fois, à moins de les supprimer à chaque fois ce qui n'arrangerait vraiment pas.

J'ai aussi besoin qu'un renomme chaque feuille de bulletin par le nom du salarié plutôt que son matricule pour une meilleure recherche.

Enfin le code pour imprimer en PDF ne marche pas j'ai essayé plusieurs fois sans succès.

Merci d'avance pour votre réactivité et que le seigneur vous donne encore plus de connaissance et d'expertise.
Ci-joint le fichier corrigé avec matricules sans doublons
 

olivier1984

XLDnaute Nouveau
Merci beaucoup à vous cher expert.
Je vais tester ce code et vous faire le retour pour confirmer qu'il fonctionne.

Merci
Le code fonctionne bien pour l'édition des bulletins mais pour imprimer en format pdf il ne fonctionne pas.

Je vous ai envoyé le fichier joint dans le précédent message où j'ai supprimé tous les matricules doublon.

Je voudrais que les bulletins s'impriment dans une nouvelle feuille de calcul Excel et que chaque feuille soit renommée par le nom du salarié plutôt que par son matricule comme c'est le cas actuellement.

Grand merci encore pour ce énorme coup de pousse car grâce à vous je suis pratiquement à la fin de mon travail.

Ci-joint le fichier où j'ai corrigé les matricules doublon.
 

vgendron

XLDnaute Barbatruc
Hello

Dans la PJ, les onglets bulletin sont renommés avec "Nom Prénom"
==> j'ai corrigé les doublons
en cas d'homonyme, il y aura un pb...

pour l'impression PDF, il faut selectionner l'imprimante pdf par défaut d'abord.
 

Pièces jointes

  • PAIE corrigé bug.xlsm
    984.3 KB · Affichages: 38

Statistiques des forums

Discussions
312 209
Messages
2 086 273
Membres
103 168
dernier inscrit
isidore33