Selection d'un onglet en fonction de la date [Résolu/Fermé]

Messages postés
37
Date d'inscription
lundi 13 juillet 2015
Statut
Membre
Dernière intervention
20 octobre 2015
- - Dernière réponse :  mamyvtte44420 - 11 sept. 2015 à 08:35
Bonjour,

Je dispose d'un classeur excel contenant un onglet pour chaque mois de l'année.
J'ai fait une macro qui copie des cellules provenant d'un autre classeur dans ce fichier. Seulement, j'aimerai que les données soient copiées automatiquement dans le bon onglet. Par exemple, si nous sommes au mois de juillet, je veux que les cellules copiées soient placées dans l'onglet juillet.
Si vous avez la solution, cela m'aiderait beaucoup ! Merci d'avance
Afficher la suite 

3 réponses

Messages postés
6274
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
398
0
Merci
Bonjour,

A mettre dans le classeur des mois dans ThisWorkBook:

Option Explicit
Dim chaine As String
Dim monmois As String
Private Sub Workbook_Open()
[A1] = Now
 [A1].Value = Format([A1].Value, "dd mmmm yyyy")
chaine = [A1].Value
extractionMots
End Sub
'Extraire les données séparées par un espace dans une chaine de caractères
Sub extractionMots()
    Dim Tableau() As String
    Dim i As Integer
    
    'découpe la chaine en fonction des espaces " "
    'le résultat de la fonction Split est stocké dans un tableau
    Tableau = Split(chaine, " ")
    
    'boucle sur le tableau pour visualiser le résultat
    For i = 0 To UBound(Tableau)
        'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros
        Debug.Print Tableau(i)
    Next i
    monmois = Tableau(1)
    Sheets(monmois).Select
End Sub

cs_Le Pivert
Messages postés
6274
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
398 -
On peut faire plus court:

Option Explicit
Dim monmois As String
Private Sub Workbook_Open()
[A1] = Now
 [A1].Value = Format([A1].Value, "mmmm")
 monmois = [A1].Value
    Sheets(monmois).Select
End Sub
cs_Le Pivert
Messages postés
6274
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
398 -
Encore plus court:

Option Explicit
Dim monmois As String
Private Sub Workbook_Open()
monmois = Now
 monmois = Format(monmois, "mmmm")
Sheets(monmois).Select
End Sub


Voilà
pijaku
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2187 > cs_Le Pivert
Messages postés
6274
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
-
Salut LePivert,

Ou encore plus court, sur ton exemple...
Option Explicit

Private Sub Workbook_Open()
Sheets(Format(Now, "mmmm")).Select
End Sub
a51432
Messages postés
37
Date d'inscription
lundi 13 juillet 2015
Statut
Membre
Dernière intervention
20 octobre 2015
-
Bonjour,

Le code fonctionne parfaitement ! Malheuresement je n'ai pas été précis dans ma description et m'en excuse...
Les noms des onglets ne sont pas le mois complet mais une série de 3, 4 ou 5 lettres comme suit : janv, fev, mars, avril, mai, juin, juil, août, sept, oct, nov, dec.
Je ne vois pas comment adapter le code et je ne peux pas renommer les onglets (ce qui serait sûrement plus simple). Si vous avez une solution... Merci d'avance !
-
Jevoudrai avoir accès a mes onglets
Messages postés
6274
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
398
0
Merci
Salut pijaku,

On voit le pro!

Bonne journée
Messages postés
6274
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
398
0
Merci
Si tu ne veux pas renommer tes onglets, je ne vois qu'une solution:

Option Explicit
Dim monmois As String
Private Sub Workbook_Open()
monmois = Now
 monmois = Format(monmois, "mmmm")
 If monmois = "juillet" Then
 monmois = "juil"
 End If
Sheets(monmois).Select
End Sub


je te laisse faire le reste

A moins que pijaku est la solution miracle!
pijaku
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2187 -
A moins que pijaku est la solution miracle!
Hé hé!
La voici :
Dim MesMois As String, Feuille As String, MoisEnCours As Integer
MesMois = "janv;fev;mars;avril;mai;juin;juil;août;sept;oct;nov;dec"
MoisEnCours = Month(Date)
Feuille = Split(MesMois, ";")(MoisEnCours - 2)
Sheets(Feuille).Select


Ou, encore mieux, en déclarant MesMois en Constante :

Option Explicit

Const MesMois As String = "janv;fev;mars;avril;mai;juin;juil;août;sept;oct;nov;dec"

Private Sub Workbook_Open()
Dim Feuille As String, MoisEnCours As Integer

    MoisEnCours = Month(Date)
    Feuille = Split(MesMois, ";")(MoisEnCours - 2)
    Sheets(Feuille).Select
End Sub


Ce qui, après raccourci, s'écrit en une seule ligne de code (si on excepte la constante) :

Option Explicit

Const MesMois As String = "janv;fev;mars;avril;mai;juin;juil;août;sept;oct;nov;dec"

Private Sub Workbook_Open()
    Sheets(CStr(Split(MesMois, ";")(Month(Date) - 2))).Select
End Sub


EDIT : Attention!!! J'm'ai gouré!!
Ma date système est déréglée... Chez moi on est déjà le 15/08... Donc utilisez ceci :

Option Explicit

Const MesMois As String = "janv;fev;mars;avril;mai;juin;juil;août;sept;oct;nov;dec"

Private Sub Workbook_Open()
    Sheets(CStr(Split(MesMois, ";")(Month(Date) - 1))).Select
End Sub

Il me semblait bien que le -2 n'était pas normal..... Pfff!
Bonne fin de journée
a51432
Messages postés
37
Date d'inscription
lundi 13 juillet 2015
Statut
Membre
Dernière intervention
20 octobre 2015
-
Ca devrait résoudre mon problème, je met le post en résoulu après vérification.
Merci beaucoup !