VBA Paie
IMPRIMER_Click
🔧 Fonction complémentaire : NettoyerNomFichier
Place cette fonction dans un module standard ou dans le même module que la macro :
Public Function NettoyerNomFichier(nom As String) As String
Dim invalide As Variant
For Each invalide In Array("\", "/", ":", "*", "?", """", "<", ">", "|")
nom = Replace(nom, invalide, "_")
Next
NettoyerNomFichier = nom
End Function
🖨️ Macro IMPRIMER_Click – Génération automatique de bulletin de paie en PDF
Cette macro permet d’automatiser totalement l’enregistrement et l’exportation d’un bulletin de paie personnalisé au format PDF, à partir d’un modèle pré-rempli dans la feuille Bull_Paie.
Elle effectue les étapes suivantes :
-
Vérification : Elle s'assure que l'utilisateur se trouve bien sur la feuille
Bull_Paieet que le numéro du bulletin (celluleO2) est bien renseigné. -
Ajout automatique : Une nouvelle ligne est ajoutée au tableau
Liste_Paie_Personelpour enregistrer les informations du bulletin. -
Conservation des formules : Les formules de la ligne précédente sont copiées, mais toutes les valeurs fixes sont effacées pour éviter des doublons ou erreurs.
-
Remplissage automatique : Les informations importantes comme le nom du document, le lien PDF, la période de paie et l’identifiant de recherche sont automatiquement insérées dans les colonnes du tableau.
-
Lien hypertexte cliquable : Un lien “Consulter” est inséré dans la colonne "DOCUMENT", avec une mise en forme personnalisée, permettant d’ouvrir le PDF directement depuis Excel.
-
Création du dossier et export en PDF : Si le dossier d’enregistrement n’existe pas, il est automatiquement créé. Ensuite, le bulletin est exporté en PDF (zone d’impression :
C8:M64) avec les bonnes marges et dimensionnements. -
Nom sécurisé : Le nom du fichier PDF est nettoyé pour éviter tout caractère interdit, grâce à une petite fonction personnalisée intégrée dans le module.
🔐 Bonus sécurité : Si un fichier PDF avec le même nom existe déjà, la macro bloque l’opération pour éviter toute écrasement accidentel.
Ajouter_Click
💡 Objectif de la macro
Ajouter_Click
Cette macro permet d'ajouter une nouvelle ligne dans un tableau Excel nommé
Tbl_Liste_Paie_Personel_calcule, en :
-
Copiant automatiquement les formules de la ligne précédente.
-
Remplissant uniquement les champs saisis manuellement par l’utilisateur (par exemple : le matricule, la date, le nombre de jours, certaines indemnités, etc.).
-
Préservant les formules dynamiques comme le nom et prénom, qui dépendent d’autres tableaux via
INDEXouRECHERCHEV.
🧠 Étapes détaillées du code
1. Vérification avant insertion
Cette ligne vérifie que le mode est bien en "P" (paiement ou présence) et que le matricule est bien rempli (obligatoire).
2. Ajout d’une nouvelle ligne
On ajoute une ligne vide à la fin du tableau.
3. Copier les formules de la ligne précédente
On récupère les formules exactes de la ligne juste au-dessus (par exemple : nom et prénom calculés automatiquement via le matricule) et on les colle dans la nouvelle ligne, sans modifier les valeurs.
4. Remplir uniquement les champs manuels
Ici, on saisit uniquement les données de l'utilisateur, comme le matricule, la date, etc.
Pour les champs dynamiques (comme les indemnités ou primes) :
On vérifie qu’un champ de saisie n’est pas vide avant de l’écrire, pour ne pas écraser une formule par erreur.
5. Nettoyer les zones de saisie
Une fois l’ajout effectué, on efface les cellules de saisie pour préparer l’entrée suivante.
✅ Résultat final
-
Les colonnes automatiques (ex. nom & prénom) restent avec leur formule.
-
Les colonnes saisies sont correctement enregistrées.
-
Les utilisateurs n’ont plus besoin de manipuler les formules eux-mêmes.
insérer une ligne au-dessus de la première ligne de données du tableau
| insérer une ligne au-dessus |
|---|
Dim tbl As ListObject Dim newRow As ListRow Set tbl = Liste_Paie_Personel_calcule.ListObjects("Tbl_Liste_Paie_Personel_calcule") ' Insérer une ligne dans le tableau, en 1re position Set newRow = tbl.ListRows.Add(1) ' Effacer contenu + mise en forme pour éviter d'hériter de l'en-tête With newRow.Range .ClearContents .ClearFormats .Interior.ColorIndex = xlColorIndexNone End With |

Commentaires
Enregistrer un commentaire