XL 2010 changer la couleur d’un onglet à l’ouverture du doc Excel avec une condition

jeanmi

XLDnaute Occasionnel
J’ai un fichier Excel avec des onglets, autant que de jours dans le mois, sauf les dimanches, plus un dernier onglet qui lui est caché à l'ouverture d'Excel (Il se trouve à la fin de tous les onglets)

Chaque onglet est identifié par une date.
La date est actuellement sous la forme jour-date-moi , avec des – entre chaque information (ex : ven.-1-oct) Il est peut être possible de faire plus simple ?

voici le code que je voulais mettre en place pour créer la date et donc nommer l'onglet,

VB:
date_demander = InputBox("Entrer la date de début de création des onglets :")

jour = Day(date_demander)
date = CDate(date_demander)
mois = CDate(date_demander)

nom_N_onglet = Format(date_test, "ddd") & "-" & jour & "-" & Format(mois_test, "mmm")

Nom_onglet_actif = ActiveSheet.Name
Sheets(Nom_onglet_actif).Name = nom_N_onglet

Après, il faut que j'arrive à créer automatiquement tous les autres onglets du mois, sauf les dimanches, mais ça je cherche. Actuellement je pratique 1 par 1 manuellement.

Ce que j’aimerai faire, à l’ouverture du doc Excel :

1- Que l’onglet correspondant à la date du jour soit ouvert
2- Que l’onglet correspondant à la date du jour soit colorisé en bleu par exemple, mais peut-être une autre couleur, à voir la possibilité de changer dans le code cela
2- A la fermeture du doc que l’onglet colorisé repasse à sa couleur initiale

Merci d’avance pour votre aide.

Bien cordialement
 
Solution
re jeanmi bonsoir chti160
chti160 a raison, deux fois n, ridicule
pour répondre au fil 24 sur la base du classeur que j'ai proposé
pour cacher les feuilles
Code:
Sub creer_feuilles()
Sheets("Base").Visible = True
Sheets("C_postal").Visible = True
On Error Resume Next
Application.ScreenUpdating = False ' desactive le rafraichissement écran
d = Range("a1")
n = Range("b1")
deb = CDate(d)
ori = CDate(d)
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
Sheets(4).Name = "01"
For x = 2 To n
deb = deb + 1 ' incrmente la date de début d'un jour
 Sheets("01").Select 'selectionne feuille 01
    Sheets("01").Copy After:=Sheets(Sheets.Count) ' la copie  en dernier
    Sheets("01 (2)").Select ' la selectionne
    ' la ligne suivante colorie l'onglet en...

ChTi160

XLDnaute Barbatruc
Re
y'a aussi un problème a ce Niveau
VB:
Private Sub Workbook_Open()
Dim i%, DateJour As String
' les actions qui seront réalisées à l'ouverture du doc
' *** effectuer un zome sur la largeur du tableau ***
    Range("A3:O3").Select '<-------------------ICI
    ActiveWindow.Zoom = True
' recherche l'onglet date jour pour le mettre en couleur bleu
 dt = Date
DateJour = Format(dt, "ddd-dd-mmm")
On Error Resume Next
For i = 1 To ThisWorkbook.Sheets.Count
    If ThisWorkbook.Worksheets(i).Name = DateJour Then
     ThisWorkbook.Worksheets(i).Activate
       ThisWorkbook.Worksheets(i).Tab.ColorIndex = 5 ' couleur bleu = 5
    Exit For
    End If
Next i
'Worksheets(1).Visible = True
'Worksheets(2).Visible = True
'Worksheets(1).Visible = False
'Worksheets(2).Visible = False

End Sub
je pense qu'a l'ouverture le fichier ce demande :"Mais dans quelle Feuille du Classeur je dois sélectionner la plage
"Range("A3:O3")" Lol
lorsque je teste la macro
si je rentre 12/08/2021 j'ai bien les feuilles du 12 au 31 qui sont créées §
jean marie
 

GALOUGALOU

XLDnaute Accro
re jeanmi bonsoir chti160
chti160 a raison, deux fois n, ridicule
pour répondre au fil 24 sur la base du classeur que j'ai proposé
pour cacher les feuilles
Code:
Sub creer_feuilles()
Sheets("Base").Visible = True
Sheets("C_postal").Visible = True
On Error Resume Next
Application.ScreenUpdating = False ' desactive le rafraichissement écran
d = Range("a1")
n = Range("b1")
deb = CDate(d)
ori = CDate(d)
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
Sheets(4).Name = "01"
For x = 2 To n
deb = deb + 1 ' incrmente la date de début d'un jour
 Sheets("01").Select 'selectionne feuille 01
    Sheets("01").Copy After:=Sheets(Sheets.Count) ' la copie  en dernier
    Sheets("01 (2)").Select ' la selectionne
    ' la ligne suivante colorie l'onglet en rouge si c'est un jour de WE, si on ne veut pas cette possibilité mettre supprimer la ligne suivante ou mettre une apostriophe en tête de laligne qui passera en vert
    If Application.WorksheetFunction.Weekday(deb, 2) > 6 Then Sheets("01 (2)").Tab.Color = 255
    Sheets("01 (2)").Name = Format(deb, "ddd-dd-mm") ' renomme la feuille avec le jour
   
Next
Sheets("01").Name = Format(ori, "ddd-dd-mm")
If Weekday(ori) = 1 Then Sheets(4).Tab.Color = 255
Application.ScreenUpdating = True 'réactive le rafraichissement écran
Sheets("Base").Visible = False
Sheets("C_postal").Visible = False
End Sub

pour les liaisons dans la feuille modèle il faut enlever le mot de passe puis dans /données./Modifier les liaisons.
le classeur ci-joint a été configuré (pour le mot de passe dans la feuille modèle il n'y en a plus pensez à le reposer). Vérifiez aussi vos formules, elles ont pu être détruite par la suppression des liaisons.
pour fin de mois référence celluleA1
Code:
=FIN.MOIS(A1;0)
nbre de jour de la date saisie A1 à fin de mois
Code:
=DATEDIF(A1;G1;"D")+1
adapter dans votre classeur
cdt
galougalou
 

Pièces jointes

  • creation onglets en automatique-couleur v8.xlsm
    130.1 KB · Affichages: 2
Dernière édition:

jeanmi

XLDnaute Occasionnel
Re
donc il n'est plus prévu de créer les feuilles des dates du 1 au 31 par exemple ?
c'est ça ?
y'a aussi un problème a ce Niveau
tu utilises dans la Boucle deux fois la même variable(on supprime le -a)

ca donne ex : 31 =1 To 31 ( si n=31)
jean marie
re
si toujours d'actualité la création du 1 au 31 ou du 15 au 15 ou autre.
pour le for n=2 to n il y a dans le programme for n=2 to n-a objet de ma question du post #24
cordialement
 

jeanmi

XLDnaute Occasionnel
re jeanmi bonsoir chti160
chti160 a raison, deux fois n, ridicule
pour répondre au fil 24 sur la base du classeur que j'ai proposé
pour cacher les feuilles
Code:
Sub creer_feuilles()
Sheets("Base").Visible = True
Sheets("C_postal").Visible = True
On Error Resume Next
Application.ScreenUpdating = False ' desactive le rafraichissement écran
d = Range("a1")
n = Range("b1")
deb = CDate(d)
ori = CDate(d)
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
Sheets(4).Name = "01"
For x = 2 To n
deb = deb + 1 ' incrmente la date de début d'un jour
 Sheets("01").Select 'selectionne feuille 01
    Sheets("01").Copy After:=Sheets(Sheets.Count) ' la copie  en dernier
    Sheets("01 (2)").Select ' la selectionne
    ' la ligne suivante colorie l'onglet en rouge si c'est un jour de WE, si on ne veut pas cette possibilité mettre supprimer la ligne suivante ou mettre une apostriophe en tête de laligne qui passera en vert
    If Application.WorksheetFunction.Weekday(deb, 2) > 6 Then Sheets("01 (2)").Tab.Color = 255
    Sheets("01 (2)").Name = Format(deb, "ddd-dd-mm") ' renomme la feuille avec le jour
  
Next
Sheets("01").Name = Format(ori, "ddd-dd-mm")
If Weekday(ori) = 1 Then Sheets(4).Tab.Color = 255
Application.ScreenUpdating = True 'réactive le rafraichissement écran
Sheets("Base").Visible = False
Sheets("C_postal").Visible = False
End Sub

pour les liaisons dans la feuille modèle il faut enlever le mot de passe puis dans /données./Modifier les liaisons.
le classeur ci-joint a été configuré (pour le mot de passe dans la feuille modèle il n'y en a plus pensez à le reposer). Vérifiez aussi vos formules, elles ont pu être détruite par la suppression des liaisons.
pour fin de mois référence celluleA1
Code:
=FIN.MOIS(A1;0)
nbre de jour de la date saisie A1 à fin de mois
Code:
=DATEDIF(A1;G1;"D")+1
adapter dans votre classeur
cdt
galougalou
Bonjour @GALOUGALOU , bonjour à tous,
je regarde tous ça, merci beaucoup d'avoir pris du temps pour mon application.
cordialement
 

jeanmi

XLDnaute Occasionnel
re jeanmi bonsoir chti160
chti160 a raison, deux fois n, ridicule
pour répondre au fil 24 sur la base du classeur que j'ai proposé
pour cacher les feuilles
Code:
Sub creer_feuilles()
Sheets("Base").Visible = True
Sheets("C_postal").Visible = True
On Error Resume Next
Application.ScreenUpdating = False ' desactive le rafraichissement écran
d = Range("a1")
n = Range("b1")
deb = CDate(d)
ori = CDate(d)
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
Sheets(4).Name = "01"
For x = 2 To n
deb = deb + 1 ' incrmente la date de début d'un jour
 Sheets("01").Select 'selectionne feuille 01
    Sheets("01").Copy After:=Sheets(Sheets.Count) ' la copie  en dernier
    Sheets("01 (2)").Select ' la selectionne
    ' la ligne suivante colorie l'onglet en rouge si c'est un jour de WE, si on ne veut pas cette possibilité mettre supprimer la ligne suivante ou mettre une apostriophe en tête de laligne qui passera en vert
    If Application.WorksheetFunction.Weekday(deb, 2) > 6 Then Sheets("01 (2)").Tab.Color = 255
    Sheets("01 (2)").Name = Format(deb, "ddd-dd-mm") ' renomme la feuille avec le jour
 
Next
Sheets("01").Name = Format(ori, "ddd-dd-mm")
If Weekday(ori) = 1 Then Sheets(4).Tab.Color = 255
Application.ScreenUpdating = True 'réactive le rafraichissement écran
Sheets("Base").Visible = False
Sheets("C_postal").Visible = False
End Sub

pour les liaisons dans la feuille modèle il faut enlever le mot de passe puis dans /données./Modifier les liaisons.
le classeur ci-joint a été configuré (pour le mot de passe dans la feuille modèle il n'y en a plus pensez à le reposer). Vérifiez aussi vos formules, elles ont pu être détruite par la suppression des liaisons.
pour fin de mois référence celluleA1
Code:
=FIN.MOIS(A1;0)
nbre de jour de la date saisie A1 à fin de mois
Code:
=DATEDIF(A1;G1;"D")+1
adapter dans votre classeur
cdt
galougalou
re ,

j'ai tous remis à jour, merci pour l'aide.

Pour les liaisons dans la feuille modèle, il faut enlever le mot de passe puis dans /données./Modifier les liaisons ==>la fonction n'est pas disponible même avec la feuille non protégée. ou je peut chercher ?

PS: après beaucoup de lecture sur internet j'ai trouvé la solution pour mes liens indésirables.
il étaient dans le nom d'une cellule : il faut donc faire Ctrl+F3 et dans la boite gestionnaire de noms modifier ou supprimer les lien sans référence.

Cordialement
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 898
Membres
101 834
dernier inscrit
Jeremy06510