XL 2016 Changement automatique de valeur impression

VoxiBe

XLDnaute Nouveau
Bonjour à tous, je suis nouveau sur ce forum, d'après ce que j'ai pu lire ici et là, certains sont de réels génie du logiciel ! Je n'ai pas (encore) les mêmes capacités, mais j'apprends de jour en jour !

Dans le cadre de mon travail, je dois remplir une fiche subrogation maladie, pour connaître, en fonction de l'ancienneté des salariés, leurs droits d'indemnisation en cas de maladie.

Pour se faire, je dois donc imprimer les feuilles, et remplir manuellement Prénom - Nom et date d'arrivée du salarié. J'aimerais révolutionner cela en mettant en place un bouton qui automatise le tout : Avec un simple clic sur un bouton dédié, une impression de masse se lance (si possible avec un aperçu avant impression pour chaque impression), avec automatiquement rempli les infos Nom - prénom et date d'arrivée des salariés.

Pour être plus précis encore, j'aimerais que :
  • Les données de la feuille "Original" cellule B14 à B27 aille dans la feuille "SUBRO" cellule N1
  • Les données de la feuille "Original" cellule C14 à C27 aille dans la feuille "SUBRO" cellule Z1
  • Les données de la feuille "Original" cellule I14 à I27 aille dans la feuille "SUBRO" cellule AM3
J'espère être claire, je pense pouvoir me débrouiller pour mettre en place une formule de calcul automatique du nombre de jour d'indemnisation, mais pour la création de ce "macro", je n'ai réellement aucune capacité pour le moment.

Je vous ai joint un fichier d'exemple pour celles et ceux qui sont vraiment motivé pour m'aider ^^

Merci d'avance à tous ceux qui tenteront de m'aider !!!!!
 

Pièces jointes

  • Test subro ancienneté salarié.xlsx
    19.4 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Voxibe et bienvenue sur XLD,
Un essai en PJ avec :
VB:
Sub Imprime()
    Dim F, DL%, L%
    Set F = Sheets("Original")
    DL = F.Range("A65500").End(xlUp).Row
    With Sheets("SUBRO")
        For L = 14 To DL ' Pour toutes les lignes
            .[N1] = F.Cells(L, "B")     ' Nom
            .[Z1] = F.Cells(L, "C")     ' Prénom
            .[AM3] = F.Cells(L, "I")    ' Date arrivée
            ActiveWindow.SelectedSheets.PrintPreview    ' Aperçu avant impression
            ' Pour imprimer sans aperçu, mettre ligne précédente en commentaires
            ' et supprimer commentaire sur la ligne suivant
            'ExecuteExcel4Macro "PRINT(1,,,1,,FALSE,,,,,,2,,,TRUE,,FALSE)"
        Next L
    End With
End Sub
Pour imprimer il faut appuyez sur le bouton imprimer dans l'aperçu avant impression.
Si c'est trop répétitif alors faites le changement dans la macro, cela imprimera sans aperçu :
Code:
Sub Imprime()
    Dim F, DL%, L%
    Set F = Sheets("Original")
    DL = F.Range("A65500").End(xlUp).Row
    With Sheets("SUBRO")
        For L = 14 To DL ' Pour toutes les lignes
            .[N1] = F.Cells(L, "B")     ' Nom
            .[Z1] = F.Cells(L, "C")     ' Prénom
            .[AM3] = F.Cells(L, "I")    ' Date arrivée
            ExecuteExcel4Macro "PRINT(1,,,1,,FALSE,,,,,,2,,,TRUE,,FALSE)"
        Next L
    End With
End Sub
 

Pièces jointes

  • Test subro ancienneté salarié.xlsm
    27.2 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Utilisez plutôt cette PJ. J'y ai ajouté des sécurités.
Dans votre PJ la ligne 126 contient des cellules fusionnées. Je l'avais supprimé. Mais rien n'indique que dans votre fichier "officiel" il n'y ai pas la même "plaisanterie".
Cette macro s'arrête dès qu'il trouve un nom vide dans la colonne B.
VB:
Sub Imprime()
    Dim F, DL%, L%
    On Error GoTo Fin
    Set F = Sheets("Original")
    DL = F.Range("A65500").End(xlUp).Row
    With Sheets("SUBRO")
        For L = 14 To DL ' Pour toutes les lignes
            If F.Cells(L, "B") = "" Then Exit Sub
            .[N1] = F.Cells(L, "B")     ' Nom
            .[Z1] = F.Cells(L, "C")     ' Prénom
            .[AM3] = F.Cells(L, "I")    ' Date arrivée
            ActiveWindow.SelectedSheets.PrintPreview    ' Aperçu avant impression
            ' Pour imprimer sans aperçu, mettre ligne précédente en commentaires
            ' et supprimer commentaire sur la ligne suivant
            'ExecuteExcel4Macro "PRINT(1,,,1,,FALSE,,,,,,2,,,TRUE,,FALSE)"
        Next L
    End With
Fin:
End Sub
 

Pièces jointes

  • Test subro ancienneté salarié2.xlsm
    27 KB · Affichages: 2

VoxiBe

XLDnaute Nouveau
Bonjour @Phil69970 et @sylvanu ! 😀
Merci du fond du coeur pour tout cela ! Grâce à vous, d'une part j'ai compris en partie comment fonctionnait un macro en parrallèle de mes propres recherches, et d'autre part vous m'avez fait gagner un temps inestimable dans mon travail.
Je ne sais pas quelle version de vous deux prendre, le code est différent, mais ils fonctionnent du tonnerre !

Je ne sais comment vous remercier, mis à part continuer mon enseignement d'Excel dans toute sa diversité, tenter d'aider toutes les personnes qui chercheront de l'aide sur le XLD, et lacher mon petit don car c'est grâce à vous que ce site est aussi attractif !

Bonne journée à vous deux ;)
 

VoxiBe

XLDnaute Nouveau
Bonjour,
Pour le choix, regardez les deux codes et conservez celui que vous comprenez le mieux.
Ce qui est important est de maitriser et d'être capable d'en faire la maintenance, car des évolutions/modifications sont toujours possibles.
Je vois avec mes responsables quelle version ils appréhendent le mieux, et j'essaie de l'adapter pour qu'il s'arrête à une ligne prédéfinis (pratique dans le cas ou je ne veux pas imprimer les cadres, qui ne bénéficie pas des mêmes droits d’indemnisation)

Un idée de quelle fonction je peux explorer pour calculer l’indemnisation si le salarié à une ancienneté >1 an / >5 ans / >10 ans / >15 ans / >20 ans / >25 ans / >30 ans / >35 ans ?
J'ai commencé avec une fonction SI, et OU, mais il y a peut-être mieux ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Je pense que le mieux est d'avoir une table d'indemnisation versus ancienneté. C'est ce qui est le plus souple dans le cas d'évolution des valeurs. Les formules ne sont pas à revoir.
On peut alors utiliser une formule avec Index Equiv :
VB:
=SIERREUR(INDEX(Indemnisation;EQUIV(Original!H14;Ancienneté;1));INDEX(Indemnisation;EQUIV(Original!H14;Ancienneté;-1)))
Voir PJ Original colonne J, tableau dans Données.
 

Pièces jointes

  • Test subro ancienneté salarié3.xlsm
    28.8 KB · Affichages: 2

Phil69970

XLDnaute Barbatruc
Bonjour à vous 2

Je rejoins totalement Sylvain dans la maintenance et la compréhension du code.
Excel prouve tous les jours qu'il existe 2 ou 3 manières d'arriver au résultat attendu.
Ne pas oublier aussi que des adaptations de nos codes sont toujours possible.

Je finirais par l’intérêt de nous fournir un maximum de renseignement :
1)- représentatif, même organisation des lignes et des colonnes, mêmes libellés, mêmes noms de feuilles...
2)- anonymisé, pas de données personnelles réelles tels nom, n° sécu, adresse ...
3)- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables
La transposition sur ton vrai fichier n'en sera que plus facile.

Pour ta question merci de mettre des exemples de ce que tu attends (voir le 3) du § précèdent

@Phil69970
 

VoxiBe

XLDnaute Nouveau
Pour vous expliquer concretement le cas, en pj vous trouverez dans la feuille "Données convention" la base d'information (les jours d'indémnisation en fonction de l'ancienneté, donc).

J'aimerais que :
  • Cellule B2 feuille "SUBRO" : Calcul de l'indémnité à partir des données des cellules H14:H27 de la feuille "Original", par rapport aux cellules d'information en B3:B12 de la feuille "Données convention"
  • Cellule B3 feuille "SUBRO" : Calcul de l'indémnité à partir des données des cellules H14:H27 de la feuille "Original", par rapport aux cellules d'information C3:C12 de la feuille "Données convention"
  • A chaque nouveaux salariés les cellules changent
  • Marche également avec l'impression automatique
Par contre, si l'ancienneté passe de >5 ans à >10 ans en cours d'année, je ne sais pas ce qu'il est possible de faire, ça commence à devenir complexe la !

Je peux continuer à le remplir à la main, je me demandais simplement si c'était possible, si vous n'y arrivez pas, aucun soucis vous en avez deja fait beaucoup pour moi !!!
 

Pièces jointes

  • Test subro ancienneté salarié3.xlsm
    28.7 KB · Affichages: 4
Dernière édition:

VoxiBe

XLDnaute Nouveau
Je viens de reperer ta colonne "indémnisation" dans la feuille "Original" qui est une meilleur idée encore, puisqu'il suffira de reporter le resultat dans le macro de la feuille "SUBRO"
Reste maintenant la question de la formule à utiliser.
D'ailleurs, question bête peut-être, mais Excel prend combien de jour pour une année ? 365 ou 365,24219 jours (comptant les années bissextile) ?
 

Phil69970

XLDnaute Barbatruc
Re

Pour moi une indemnité c'est des .... sous 😄 (€, $ ou autres....)
Je ne vois aucune valeur aucune manière de calculer quoique soit, aucun exemple .....
Voir :
3)- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables
Après les formules c'est à nous d'essayer de faire marcher tout ça du moment que l'on a des exemples des différents cas possibles....
En clair on voudrait comprendre ce que tu souhaites......🤔

@Phil69970
 

VoxiBe

XLDnaute Nouveau
Enfaite, on calcule un nombre de jour d'indémnité (pour maladie), en fonction de l'ancienneté du salarié. En d'autres termes, si un salarié à 6 ans d'ancienneté, il aura le droit à 60 jours indémnisés à 100% et 40 jours indémnisés à 75% puisqu'il a >5 ans d'ancienneté (le calcul de l'indémnité se fait ensuite dans un autre tableau, ici seul le nombre de jours compte).

J'ai calculé avec un DATEDIF la date d'arrivée par rapport au 01 janvier 2022 pour connaître l'ancienneté du salarié en jour, puis transformé en année dans la colonne suivante (d'ailleurs, du coup pour excel une année c'est 365 ou 365.24219 jours ?)

Ce que j'aimerais donc maintenant, c'est que dans la colonne "indémnité" de la feuille "Original" une formule permette de savoir dans quel tranche d'ancienneté pour les jours d'indémnité se trouve le salarié.​
Par exemple, EIFFEL 2 Jean 2 a 30,33 ans d'ancienneté, il aura donc droit à 135 jours à 100% (noté en J16) et 90 jours à 75% (noté en K16)​
Je rajouterai ensuite les cellules dans le macro de l'impression, que j'ai compris grâce à vous (merci encore une fois).

Je vous met en pj le fichier avec les colonnes "jour d'indémnité" en plus.
 

Pièces jointes

  • Test subro ancienneté salarié V5.0.xlsm
    28.9 KB · Affichages: 0

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En PJ un essai.
En "Original" colonne J et K j'ai mis les indemnisations 75 et 100% avec :
VB:
=SIERREUR(INDEX(Indem100;EQUIV(Original!H14;Ancienneté;1));INDEX(Indem100;EQUIV(Original!H14;Ancienneté;-1)))
=SIERREUR(INDEX(Indem75;EQUIV(Original!H14;Ancienneté;1));INDEX(Indem75;EQUIV(Original!H14;Ancienneté;-1)))
Et remis le VBA carré avec :
Code:
.[B2] = F.Cells(L, "J")     ' Indemnisation 100%
.[B3] = F.Cells(L, "K")     ' Indemnisation 75%
J'ai modifié les données pour qu'elles soient compréhensibles avec :
- Non pas >10 ans, mais 10 avec format personnalisé ">"0" ans" ainsi le contenu de la cellule est un nombre et non une chaine.
 

Pièces jointes

  • Test subro ancienneté salarié3 (1).xlsm
    30.9 KB · Affichages: 3

Discussions similaires

Réponses
0
Affichages
213

Statistiques des forums

Discussions
312 177
Messages
2 085 971
Membres
103 073
dernier inscrit
MSCHOE16