Amélioration d'un calendrier + calcul automatique de prime

myjidu35

XLDnaute Junior
Bonjour,

Je viens de réaliser un planning annuel qui me conviens bien cependant je voudrais apporter quelques améliorations mais je vois pas comment faire:

1)-J'aurais souhaité que les jours fériés soient grisés, comment le samedi et le dimanche.

2)-Quand j'effectue ma recherche je souhaiterais voir tout ce qu'il y a à partir de l'année et du mois donné en AW2 et AW3 (si je donne 10/10/2013 je souhaite voir le calendrier à partir de cette date)

3)-Je souhaiterais un bouton aperçu qui me permette d'imprimer les trois premiers calendriers en fonction de la date donnée en 2)


De plus je souhaiterais dans l'onglet "Prime astreinte" calculer automatiquement les primes par mois des différentes personnes.
L'astreinte est représenté par un A dans l'onglet "planning annuel".
Ce que je voudrais c'est sélectionner le mois et l'année dans l'onglet "Prime astreinte" et qu'automatiquement le tableau soit renseigner par rapport au nombre d'astreinte (en jour) que la personne a effectuée dans le mois.

Merci d'avance

Jimmy
 

Pièces jointes

  • Planning SLR.xlsm
    267.5 KB · Affichages: 83

myjidu35

XLDnaute Junior
Re : Amélioration d'un calendrier + calcul automatique de prime

j'ai réussi à adapter le programme.

J'ai remarqué un problème:
-Les impressions fonctionnent parfaitement sauf pour tous ce qui est en 2013: Novembre 2013 et décembre 2013.


J'ai aussi apporté des modifications à mon fichier en rajoutant cinq lignes vierges pour d’éventuels nouveaux arrivants dans le service.
Est-il possible de ne pas voir les lignes ou il n'y a pas de nom?

Merci
 

CHALET53

XLDnaute Barbatruc
Re : Amélioration d'un calendrier + calcul automatique de prime

Bonsoir,

Je pense avoir résolu le problème de Novembre et Décembre 2013

Par contre, j'ai tenté de rajouter 5 lignes pour voir comment traiter ton second problème.

J'ai relancé le programme : Sub jours_fériés()
Il ne fonctionne pas parce que, en mettant des astreintes, tu as fusionné les cellules sur la durée de l'astreinte. Si bien que le programme traitant le 01/11/2013 (par exemple), il sélectionne la colonne du 01/11/2013 pour la griser. Seulement avec les cellules fusionnées, il sélectionne toutes les colonnes liées à l'astreinte

La fusion de cellules est l'ennemi de VBA (difficile à gérer). Il faut préférer : Centrer sur plusieurs colonnes

A+
 

Pièces jointes

  • Mijidu Planning encadrement2.xlsm
    182 KB · Affichages: 20
  • Mijidu Planning encadrement2.xlsm
    182 KB · Affichages: 27
  • Mijidu Planning encadrement2.xlsm
    182 KB · Affichages: 27

CHALET53

XLDnaute Barbatruc
Re : Amélioration d'un calendrier + calcul automatique de prime

Un essai pour supprimer les lignes à blanc pour l'impression
Des informations sont en dur dans le programme:
Nombre de lignes par bloc (y compris la ligne entre les blocs) : lignebloc=15

Un calcul du nombre de lignes utilisées par bloc (par une boucle sur le premier bloc) : implique donc qu'ils soient tous de même composition

a+
 

Pièces jointes

  • Mijidu Planning encadrement2 bis.xlsm
    202.2 KB · Affichages: 34

myjidu35

XLDnaute Junior
Re : Amélioration d'un calendrier + calcul automatique de prime

Un essai pour supprimer les lignes à blanc pour l'impression
Des informations sont en dur dans le programme:
Nombre de lignes par bloc (y compris la ligne entre les blocs) : lignebloc=15

Un calcul du nombre de lignes utilisées par bloc (par une boucle sur le premier bloc) : implique donc qu'ils soient tous de même composition

a+

Parfait cela fonctionne.

Bonsoir,

Je pense avoir résolu le problème de Novembre et Décembre 2013

Par contre, j'ai tenté de rajouter 5 lignes pour voir comment traiter ton second problème.

J'ai relancé le programme : Sub jours_fériés()
Il ne fonctionne pas parce que, en mettant des astreintes, tu as fusionné les cellules sur la durée de l'astreinte. Si bien que le programme traitant le 01/11/2013 (par exemple), il sélectionne la colonne du 01/11/2013 pour la griser. Seulement avec les cellules fusionnées, il sélectionne toutes les colonnes liées à l'astreinte

La fusion de cellules est l'ennemi de VBA (difficile à gérer). Il faut préférer : Centrer sur plusieurs colonnes

A+

Je vais prendre le temps de regarder les modifications demain.

Je vous tiens au courant

Merci
 

myjidu35

XLDnaute Junior
Re : Amélioration d'un calendrier + calcul automatique de prime

Un essai pour supprimer les lignes à blanc pour l'impression
Des informations sont en dur dans le programme:
Nombre de lignes par bloc (y compris la ligne entre les blocs) : lignebloc=15

Un calcul du nombre de lignes utilisées par bloc (par une boucle sur le premier bloc) : implique donc qu'ils soient tous de même composition

a+

Bonjour,

Tu as seulement rajouter cela dans le programme?:
'Calcul du nombre de lignes renseignées
For i = 8 To 20
If Cells(i, 1) = "" Then nubligneutil = i - 8 + 3: i = 20
Next i
' Nb lignes par bloc y compris ligne à blanc
lignebloc = 15
 

CHALET53

XLDnaute Barbatruc
Re : Amélioration d'un calendrier + calcul automatique de prime

Et la partie en gras ci-dessous

For Each cel In plage

If Year(cel) = année And Month(cel) = mois Then

a = Year(cel): b = Month(cel): c = Day(cel)
i = 865

col = cel.Column
ligne = cel.Row - 1
lignefin = ligne + 43

ligne2 = ligne + lignebloc
ligne3 = ligne2 + lignebloc

Rows(ligne + 9 & ":" & ligne2 - 2).Select
Selection.EntireRow.Hidden = True
Rows(ligne2 + 9 & ":" & ligne3 - 2).Select
Selection.EntireRow.Hidden = True
lignefin = lignefin - (14 - nubligneutil)

Call impression

Exit For
End If
Next cel
 

CHALET53

XLDnaute Barbatruc
Re : Amélioration d'un calendrier + calcul automatique de prime

'Calcul du nombre de lignes renseignées
For i = 8 To 20
If Cells(i, 1) = "" Then nubligneutil = i - 8 + 3: i = 20
Next i
' Nb lignes par bloc y compris ligne à blanc
lignebloc = 15

Dans le fichier, le nombre de personnes possibles :11 (avec les entêtes et l'intervalle entre 2 blocs : 15 variable lignebloc=15

Sachant que les blocs sont construits à l'identique avec les mêmes noms, la boucle à partir de la ligne 8 permet de calculer le nb de lignes renseignées par bloc (ici : je trouve "" dans la cellule de la ligne 14) donc le nb de lignes utiles avec les trois lignes d'entête : 14-8+3(entête) soit 9
la variable nubligneutil = 9
Je sors de la boucle dès que je rencontre une cellule (colonne 1) à blanc : i=20

Ensuite : : je cherche avec la boucle suivante la date de départ (par rapport à la saisie)
Les dates recherchées sont dans la ligne 6 (et ensuite toutes les 15 lignes Step 15 de la boucle)
For i = 6 To 503 Step 15 (ici 503 est à modifier en fonction du nombre de lignes utilisées dans le fichier)

Set plage = Range("B" & i & ":AQ" & i)
'Stop
For Each cel In plage
'Stop
If Year(cel) = année And Month(cel) = mois Then

a = Year(cel): b = Month(cel): c = Day(cel)
i = 865

col = cel.Column
ligne = cel.Row - 1
lignefin = ligne + 43
'Stop
ligne2 = ligne + lignebloc
ligne3 = ligne2 + lignebloc

Rows(ligne + 9 & ":" & ligne2 - 2).Select
Selection.EntireRow.Hidden = True
Rows(ligne2 + 9 & ":" & ligne3 - 2).Select
Selection.EntireRow.Hidden = True
lignefin = lignefin - (14 - nubligneutil)

Call impression

Exit For
End If
Next cel


Lorsque la date est trouvée, je retiens la ligne : ligne=cel.row -1 pour avoir également l'entête (mois année) qui va avec
lignefin =ligne+43 (3 blocs à imprimer) : judicieux de remplacer 43 par une variable (lignebloc*3)-2

ligne2 = ligne + lignebloc
ligne3 = ligne2 + lignebloc
donnent la position de départ des blocs 2 et 3

Rows(ligne + 9 & ":" & ligne2 - 2).Select
Selection.EntireRow.Hidden = True

sélection des lignes à masquer car non renseignées
Il faut remplacer dans le programme 9 par la variable nubligneutil (oubli de ma part)

Idem pour le troisième bloc avec :
Rows(ligne2 + 9 & ":" & ligne3 - 2).Select (remplacer le 9 également)
Selection.EntireRow.Hidden = True

lignefin = lignefin - (14 - nubligneutil)
Corriger la lignefin calculée plus haut pour tenir compte des lignes masquées du 3ème bloc
Il faut ici également remplacé 14 par : lignebloc-1
 

myjidu35

XLDnaute Junior
Re : Amélioration d'un calendrier + calcul automatique de prime

Parfait,

J'ai réadapter cela au fichier planning SLR.

Dernière petite question et j'arrête de t'embêter.
Mon bouton Aperçu se trouve dans ma zone d'impression et je souhaiterais le rendre invisible à l'impression.
Quel ligne de code faut-il taper?

Merci.
 

CHALET53

XLDnaute Barbatruc
Re : Amélioration d'un calendrier + calcul automatique de prime

Je ne suis pas expert en gestion des Shapes
Pourquoi ne pas le loger ailleurs (sous Année et Mois)
sinon, il faut le couper au début du traitement et le recoller à la fin avec deux macros du style :

Sélection sur le nom : Aperçu

déplacement (en début du programme par un Call Déplacement)

appel en début de programme :

Sub Déplacement()
'

'
For Each shp In ActiveSheet.Shapes
a = shp.Name
With Sheets("Planning annuel").Shapes(a)
b = shp.TextFrame.Characters.Text
If .TextFrame.Characters.Text = "Aperçu" Then
' Stop
shp.Cut
Range("BQ2").Select
ActiveSheet.Paste

End If
End With

Next shp
'
Range("BD2").Select
Selection.Cut

End Sub

et appel de la procédure remise_en_place en fin de programme par un Call Remise_en_place

Sub Remise_en_place()
'

'
For Each shp In ActiveSheet.Shapes
a = shp.Name
With Sheets("Planning annuel").Shapes(a)
b = shp.TextFrame.Characters.Text
If .TextFrame.Characters.Text = "Aperçu" Then
' Stop
shp.Cut
Range("BD2").Select
ActiveSheet.Paste

End If
End With
Next
End Sub


C'est tiré par les cheveux
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz