Choix de ce qui apparait
Bonjour,
J'ai pour mon altertance un planning d'alternance que j'ai refais sur excel et je souhaite faire ressortir différentes périodes de l'année avec des couleurs de bordures. (j'ai légendé mon fichier). Mais je me pose une question, par exemple lorsque j'imprime le fichier je souhaite que mon tuteur pro voit toutes les périodes sauf les périodes en noir. Mais comment est ce que je pourrais faire pour choisir a l'impression ? Je m'y connais un peu en plan architecturaux et ce que je recherche ce serait comme faire une sorte de calque (choisir individuellement quelle couleur apparait sur le calendrier).
J'espère que c'est compréhensible !
Merci d'avance !
Si besoin du VBA me vas très bien, ca me permettrais d'apprendre encore plus a m'en servir.
Ci-joint mon fichier
Bonjour,
je ne suis pas certain d'avoir compris votre souhait dans tous les détails, mais je vous propose déjà une esquisse ici
C'est un fichier .xlsm donc avec du code VBA.
Le principe que j'ai adopté :
J'ai dupliqué la feuille pour l'impression.
C'est sur cette feuille que sera appliqué la macro VBA MasquerCellulesBorduresDiagonales.
La cellule D52 est nommée "MODELE1" (elle correspond à la mise en forme que l'on souhaite appliquer au cas 1),
Actuellement elle est avec bordures extérieure simples comme un jour standard du planning. A vous de choisir le style
Vous pourriez définir d'autres Cellules "MODELE2" "MODELE3" "MODELE4" pour les différents cas (Légende 1, 2 ,3, 4).
Sélectionnez tout le planning A4 à AK35 dans la feuille dupliquée (Je l'ai fait dans "Pour Impression")
Lancez la macro :
Les cellules concernées sont celles :
- qui ont une diagonale montante de gauche à droite
- cette diagonale étant de couleur Noir Rouge vert ou bleu
Elles seront mise en forme en fonction de la couleur Noir Rouge vert ou bleu à partir de la cellule Modèle correspondante (ici, j'ai utilisé la même cellule modèle nommée "MODELE1").
Je m'aperçois qu'il y a des nombres (cellule y 30 par exemple) qui changent de police(à priori, elles devraient être les mêmes pour tous les jours du planning initial)
Si vous souhaitez ne pas faire apparaitre de nombre, il suffit dans la cellule modèle de choisir comme couleur de police "Blanc"
Pour l'impression, masquez les lignes modèles ou sélectionnez la zone d'impression souhaitée.
J'attends vos remarques
Voici le code
Sub MasquerCellulesBorduresDiagonales()
' balaie les cellules de la plage sélectionnée
Dim Cellule As Range
For Each Region In Selection.Areas
For Each Cellule In Region.Cells
If Cellule.Borders(xlDiagonalUp).LineStyle = xlContinuous Then
' La cellule a une dagonale montante de gauche à droite
Select Case Cellule.Borders(xlDiagonalUp).ColorIndex
Case xlAutomatic
Case 1, 3, 14, 33 'Noir Rouge vert bleu
InitBordures Cellule, Cellule.Borders(xlDiagonalUp).ColorIndex
Case Else
End Select
End If
Next Cellule
Next Region
End Sub
Sub InitBordures(pCellule As Range, pCouleur)
Select Case pCouleur
Case 1
Range("MODELE1").Copy
Case 3
Range("MODELE1").Copy
Case 14
Range("MODELE1").Copy
Case 33
Range("MODELE1").Copy
Case Else
End Select
pCellule.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End SubPour rendre le code plus souple, pour les critères de choix des cellules à "éteindre", vous pourriez utiliser les légendes, toujours en utilisant les cellules nommées, par exemple LEGENDE1 pour la cellule D43 etc.
Le test dans le code deviendrait alors :
If Cellule.Borders(xlDiagonalUp).LineStyle =Range("LEGENDE1").Borders(xlDiagonalUp).LineStyle Then
Select Case Cellule.Borders(xlDiagonalUp).ColorIndex
Case Range("LEGENDE1").Borders(xlDiagonalUp).ColorIndex
InitBordures Cellule, 1
Case Range("LEGENDE2").Borders(xlDiagonalUp).ColorIndex
InitBordures Cellule, 2
...
Case Else
End Select
End Ifet la mise en forme
Sub InitBordures(pCellule As Range, pCouleur)
Select Case pCouleur
Case 1
Range("MODELE1").Copy
Case 2
Range("MODELE2").Copy
Case 2
Range("MODELE3").Copy
Case 2
Range("MODELE4").Copy
Case Else
End Select
pCellule.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End SubUne dernière remarque : si c'est juste pour effectuer une impression avec certaines cellules ayant une apparence particulière, peu d'intérêt de passer par du code VBA, en le faisant manuellement sur la copie de la feuille originale, çà ne prend qu'une minute.