Selection d'un onglet en fonction de la date

Résolu
a51432 Messages postés 39 Statut Membre -  
 mamyvtte44420 -
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

3 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    

    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
      0
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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à
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        Salut LePivert,

        Ou encore plus court, sur ton exemple...
        Option Explicit
        
        Private Sub Workbook_Open()
        Sheets(Format(Now, "mmmm")).Select
        End Sub
        0
    3. a51432 Messages postés 39 Statut Membre 1
       
      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 !
      0
    4. mamyvtte44420
       
      Jevoudrai avoir accès a mes onglets
      0
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Salut pijaku,

    On voit le pro!

    Bonne journée
    0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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!
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0
    2. a51432 Messages postés 39 Statut Membre 1
       
      Ca devrait résoudre mon problème, je met le post en résoulu après vérification.
      Merci beaucoup !
      0