Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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...
C

Compte Supprimé 979

Guest
Bonjour Jeanmi,

Une petite question avant de commencer, a quoi vont vous servir tous ses onglets ?

A mes yeux, faire un onglet par jours sauf le dimanche = 312 onglets c'est une hérésie

@+
 

jeanmi

XLDnaute Occasionnel
Bonjour Jeanmi,

Une petite question avant de commencer, a quoi vont vous servir tous ses onglets ?

A mes yeux, faire un onglet par jours sauf le dimanche = 312 onglets c'est une hérésie

@+
Bonjour @BrunoM45 , bonjour à tous,

j'ai du mal expliquer ma demande.
Non pas 312 onglets, un fichier pour chaque mois de l'année, donc chaque fichier créé comportera 31 onglets moins les dimanches + un onglet caché.

cordialement
 

ChTi160

XLDnaute Barbatruc
Bonjour jeanmi
Bonjour le Fil ,le Forum
Donc tu auras 12 fichiers de x feuilles jours (sans les dimanches)?
Dans lesquels tu devras avoir tes procédures ,
C'est ça ?
Bonne journée
Jean marie
 

GALOUGALOU

XLDnaute Accro
bonjour jeanni, bonjour le fil, bonjour le forum
création d'un classeur par rapport au 1er jour du mois, avec le nombre d'onglets correspondant aux nombres de jours de la cellule A1, à l'ouverture l'onglet du jour coloré de bleu
cdt
galougalou
ps ce classeur n'est pas fait pour vous imposer ma solution, mais pour permettre de trouver des solutions à la mise au point de votre projet.
 

Pièces jointes

  • couleurv2.xlsm
    58.1 KB · Affichages: 10
Dernière édition:

jeanmi

XLDnaute Occasionnel
Bonjour @GALOUGALOU , bonjour à tous,

Merci pour cette exemple rapidement réalisé.

je n'ai pas compris ou on entre l'information du premier jour à créer ?

Dans l'exemple, il y a aussi les dimanches, mais ça ne me dérange pas, le premier onglet devrait-il pas être en rouge aussi ?

Est-il possible de nommer les onglets avec jour/date/mois ?

Cordialement
 

ChTi160

XLDnaute Barbatruc
Bonjour jeanmi
Bonjour le Fil ,le Forum
mon interprétation !
j'ai supprimé pas mal de chose Lol
ex : la procédure Workbook_BeforeClose
tout ce passe a l'ouverture du fichier
On crée les feuilles si elle n'hésitent pas et on colore en fonction de !
je n'utilise pas la valeur de la cellule B1 que j'ai laissé .
on active la feuille du Jour.
a voir comme dit GALOUGALOU rien d'obligé !
pour info , le fichier joint ne contient que la feuille "01"
EDIT
qu'entends tu par :
Est-il possible de nommer les onglets avec jour/date/mois ?
peux tu mettre un exemple
cela est possible !
pourquoi ne pas mettre dans ton fichier une feuille Modèle qui servirait a créer les feuilles date plutôt que la feuille "01" qui devrait alors avoir le format "Dimanche 1 Août"
jean marie
 
Dernière édition:

jeanmi

XLDnaute Occasionnel
Bonjour @ChTi160 , bonjour à tous,

l'exemple était donné en post #1 avec la macro imaginée pour récupérer la date est créer le nom du premier onglet :

texte du post #1
"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 ?"

la date est entrée dans un inputbox (voir post #1, pour ne pas redire ce qui est déjà dit).

Il est possible de créer un planning uniquement à partir d'une date pour le reste du mois, uniquement à partir de cette date de départ qui peut-être n'importe quelles date, de n'importe quel mois, de n'importe quelle année.
En général la date commence le premier jour du mois, mais par exemple, s'il y a des vacances les 15 premiers jour du mois, le planning ne commencera qu'a partir du 15 pour n'avoir que des onglets utilisés.

A la base j'avais imaginé avoir un fichier, de base,
La commande serais lancée à partir d'un bouton active x à partir de la première feuille modèle, que l'on reproduirai en x exemplaires suivant la demande de création de planning, pour la sauvegarder sous le nom de création du mois et de l'année de la date entrée.

j'espère être le plus claire possible, mais c'est pas gagné.

cordialement
 

GALOUGALOU

XLDnaute Accro
re jenmi re le fil re le forum
la macro de chti160 est préférable, mais je vais commenter le code que j'avais proposé.
pour le format il suffit de modifier la macro à toutes les instructions.
VB:
Format(deb, "ddd-dd-mm")
Maintenant dans le classeur, vous avez deux feuilles au départ, base, modèle.
La feuille "modèle" est dupliqué à partir d'une date (feuille base cellule a1), un nombre de fois indiqué dans la feuille base cellule b1.
Il est possible de concevoir une boite de dialogue, mais vous sembliez souhaiter automatiser la création de plusieurs onglets, ce qui est fait avec cette solution. Je n'ai pas su empêcher la création d'un onglet "dimanche"(mais il est coloré), un membre de xld aura peut-être une solution.
Les membres de xld, bénévoles, n'ont pas vocation à concevoir des classeurs. Vous devriez avoir maintenant un début de piste afin de concevoir un projet avec les différentes solutions qui vous ont été proposées. Un classeur vide d'information personnelle, qui nous serait présenté, serait une bonne base pour recevoir une aide pertinente.
cdt
galougalou
 

Pièces jointes

  • couleurv5.xlsm
    70.5 KB · Affichages: 4

jeanmi

XLDnaute Occasionnel
Bonjour au tous

Merci pour toutes ces participations active.

je vais regarder tous ça à partir de jeudi, car trop de boulot et fatigue pour pouvoir analyser vos réponses objectivement.
Donc, merci à vous de bien vouloir m'accepter de répondre, qu'à partir de jeudi.

cordialement
 

jeanmi

XLDnaute Occasionnel
Bonjour @GALOUGALOU , bonjour à tous,

Merci beaucoup pour cette proposition qui est effectivement très bien et répond à ce que j'aurai aimé savoir faire.

je n'ai pas résisté de regarder en rentrant du travail.

j'ai mis ma feuille dans le fichier pour faire des essais, et j'ai des petits pb, mais j'avais pas imaginé la suite.
je vais donc joindre à ce fichier la page de base que je souhaite utiliser.
j'avais oublier de présider qu'il y avais un autre onglet qui est utilisé pour des menus déroulant au niveau des colonnes (F,N et O) de l'onglet à duplique. Lors de la copie, il semble que ces menus ne fonctionnes plus, mais ça je pense pouvoir trouver la solution ou refaire.

Oui en finalité, il faudra que je réalise une boite de dialogue.

j'ai donc fait un essai , avec l'ajout de mes deux pages :

l'onglet qui est dupliqué n'est pas le bon et il y a la création d'un onglé supplémentaire. si par erreur on redemande une création de nouveaux onglets sont ajoutés.

j'ai regardé si je pouvais faire quelque chose pour remédier à ces petits soucis, mais là, il ne faut pas rêver, la réponse est non.

Je vous demande donc comment faire, si possible.

Avec tous mes remerciements

Cordialement
 

Pièces jointes

  • essai_creation onglets en automatique-couleurv5-1.xlsm
    133 KB · Affichages: 5

GALOUGALOU

XLDnaute Accro
re
j'avais oublier de présider qu'il y avais un autre onglet
dans le cas ou vous modifiez la structure du classeur il faut adapter la macro. dans ce cas présent dans la macro création d'onglets, il faut remplacer la valeur 3 par la valeur 4 (création à partir de la 4eme position, voir alerte dans la macro)
VB:
Sub creer_feuilles()

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" ' modifier le 4 en fonction du nombre d'onglet
For n = 2 To n - a
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 apostrophe en tête de la ligne 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 ' modifier le 4 en fonction du nombre d'onglet
Application.ScreenUpdating = True 'réactive le rafraichissement écran
End Sub

Sub sup()
Dim a As Long, b As Long
Application.DisplayAlerts = False
a = 4 ' modifier le 4 en fonction du nombre d'onglet
b = ThisWorkbook.Sheets.Count

For i = b To a Step -1
Sheets(i).Select
ActiveWindow.SelectedSheets.Delete
Next i
Application.DisplayAlerts = True
End Sub
si par erreur on redemande une création de nouveaux onglets sont ajoutés.
je vous ai rajouté un test sur la présence de trois feuilles (si vous modifiez la structre du classeur adapter la valeur)
Code:
Sub test()

If Sheets.Count > 3 Then ' modifier le 3 en fonction du nombre d'onglet
    If MsgBox("Le classeur est déja configuré, voulez vous continuer la création ?", vbYesNo) = vbYes Then
    Call creer_feuilles
    End If
    Exit Sub
    Else
    Call creer_feuilles
    End If
End Sub
cdt
galougalou
ps Dans votre projet, attention à la liaison vers d'autre classeur
 

Pièces jointes

  • creation onglets en automatique-couleur v6.xlsm
    130.7 KB · Affichages: 5
Dernière édition:

Discussions similaires

Réponses
46
Affichages
2 K
Réponses
5
Affichages
501
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…