Planning avec mise en forme


#1

Bonjour,
Je suis en train de créer une mise en forme de planning, mais je bloque sur certains points.
Pourriez vous s’il vous plait m’aider à résoudre le problème.
Dans la pièce jointe, il y a les questions que je me pose.
Merci par avance
planning.xlsx (23,4 Ko)
.


#2

Bonjour pat44

Je vous renvoie votre fichier avec la formule pour les semaines

Mais j’ais une urgence et il faut que je parte

n’ayez crainte il y auras une autre personne du forum qui ce feras un plaisir de vous aidez :wink: désoler

votre fichier ====> planning.xlsx (22,7 Ko)

Cdlt

@kiss6


#3

Merci pour le retour rapide.
Nickel pour la partie semaine, par contre juste une chose. Comment faire pour que cela suive du lundi au vendredi si on change le mois.


#4

Bonjour à tous,

Pour résoudre tes problèmes de traits épais, de cellules fusionnées, tu sera obligé de passer par une macro. :wink:


#5

Ok merci quand même. C’est dommage.


#6

Re,

Tiens, teste ceci, si cela convient je te ferai une explication de la macro
Quand tu changes la date en B4, le reste se modifie tout seul
planning.xlsm (52,9 Ko)


#7

Merci pour le coup de main.
J’ai testé ta version, mais lorsque je change de mois, le trait rouge ne suit pas le dimanche comme lors du test au moins de décembre.


#8

Re,

Quelle version de ton Excel ?


#9

La version que j’utilise est la 2013


#10

Re,

Alors explique ce qui ne fonctionne pas, car j’ai la même version et chez moi cela fonctionne :thinking:


#11

je te joint le fichier
planningv1.xlsm (107,4 Ko)


#12

Re,

Bizarre, tu changes le mois par la date en B4 ?


#13

Lorsque je fait le manip de changer de date en B4, il me met un message d’erreur dans le VBA en surlignant Format.
Ci joint l’image d’erreur
message d’erreur.pdf (61,4 Ko)


#14

Re,

sur celle ligne où se trouve format, remplace par celle-ci (il y a juste VBA. en plus)

Cells(9, i).Value = "Semaine " & VBA.Format(Application.WorksheetFunction.WeekNum(Cells(8, i).Value, 21), "00")

Mais dis moi comment tu changeais de date ?

Je précise que le classeur que tu m’as envoyé avec ma macro, fonctionne chez moi, donc il doit avoir un réglage sur ton Excel qui n’est pas correct
J’ai même effectué des essais sur 2010 et 2016 et c’est OK


#15

Ca y est ça marche. Il fallait juste que je rajoute VBA. devant Format.
Maintenant, s’il te plait, pourrais tu m’expliquer ta macro.
Et merci pour ton aide.


#16

Re,

Les macros avec explications

Option Explicit
Dim i%, Dc% 'Déclaration des variables pour les 2 macros

Private Sub Worksheet_Change(ByVal Target As Range) 'Si changement dans une cellule
  On Error GoTo fin 'Si erreur và à Fin en bas de page pour sortir de la macro
  If Not Application.Intersect(Target, Range("B4")) Is Nothing Then 'Si la cellule est B4 uniquement
    Application.ScreenUpdating = False 'Désactive le rafraichissement d'écran
    Dc = Cells(8, Columns.Count).End(xlToLeft).Column 'n° de la dernière colonne non vide de la ligne 8
    Range(Cells(9, 6), Cells(9, Dc + 5)).MergeCells = False 'Supprime les cellules fusionnées de la ligne allant de colonne 9 à la dernière colonne +5 (en cas de changement de mois moins de 31 jours)
    Range(Cells(9, 6), Cells(9, Dc + 5)).Interior.Color = xlNone  'Supprime les couleurs de la ligne allant de colonne 9 à la dernière colonne +5 (en cas de changement de mois moins de 31 jours)
    Range(Cells(9, 6), Cells(9, Dc + 5)) = ""  'Supprime les données de la ligne allant de colonne 9 à la dernière colonne +5 (en cas de changement de mois moins de 31 jours)
    Bordure 'lance la macro Bordure pour supprimer les bordures (dont la rouge) et replace les bordures normales
    For i = 6 To Dc 'boucle sur les colonnes de 6(F) à DC
      If Cells(10, i).Text = "lun" Then 'si le text de la colonne en ligne 10 contient "lun" alors
       Range(Cells(9, i), Cells(9, i + 4)).MergeCells = True 'je fusionne et centre depuis la même colonne et jusqu'à la colonne +4 sur la ligne 9
       Range(Cells(9, i), Cells(9, i + 4)).Interior.Color = RGB(204, 255, 255) ' je la colorise en bleu
       Cells(9, i).Value = "Semaine " & VBA.Format(Application.WorksheetFunction.WeekNum(Cells(8, i).Value, 21), "00") 'je la nomme avec le N° de semaine
      End If
      If Cells(10, i).Text = "dim" Then 'si le text de la colonne en ligne 10 contient "dim" alors
        Range(Cells(10, i), Cells(25, i)).Select 'je sélectionne depuis la colonne, les lignes allant de 10 à 25
        With Selection.Borders(xlEdgeRight) 'et avec cette sélection, sur le bord droit
            .LineStyle = xlContinuous 'je lui place une ligne continue
            .Color = -16776961 'de couleur rouge
            .Weight = xlThick 'de grosse épaisseur
        End With
      End If
    Next i
    Range("B4").Select 'Je me replace sur la cellule B4
  End If
fin:
End Sub

Sub Bordure()
  Range(Cells(10, 6), Cells(25, Dc + 5)).Select 'Je sélectionne de la ligne 10 colonne 6 à la ligne 25 dernière colonne +5
  Selection.Borders(xlEdgeLeft).LineStyle = xlNone 'J'ôte les bordures
  Selection.Borders(xlEdgeTop).LineStyle = xlNone
  Selection.Borders(xlEdgeRight).LineStyle = xlNone
  Selection.Borders(xlInsideVertical).LineStyle = xlNone
  Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
  Range(Cells(10, 6), Cells(25, Dc)).Select 'Je sélectionne de la ligne 10 colonne 6 à la ligne 25 dernière colonne
  With Selection.Borders(xlEdgeLeft) 'je remet des bordures
      .LineStyle = xlContinuous 'continue
      .ColorIndex = 0 'noire
      .Weight = xlThin 'taille normale
  End With
  With Selection.Borders(xlEdgeTop)
      .LineStyle = xlContinuous
      .ColorIndex = 0
      .Weight = xlThin
  End With
  With Selection.Borders(xlEdgeRight)
      .LineStyle = xlContinuous
      .ColorIndex = 0
      .Weight = xlThin
  End With
  With Selection.Borders(xlInsideVertical)
      .LineStyle = xlContinuous
      .ColorIndex = 0
      .Weight = xlThin
  End With
  With Selection.Borders(xlInsideHorizontal)
      .ColorIndex = 0
      .Weight = xlThin
  End With
End Sub

Si le problème est résolu, n’oublie pas de passer le post en résolu :wink:


#17

merci pour l’explication. Je regarde ca dans le détail et si cela fonctionne je coche Résolu.
Merci encore