Nomer une feuille automatiquement

Résolu
Bonjour
J'ai un classeur nomé : fact 2017.xls, J’ai un onglets (feuille) créé; Janv 2017
Je voudrai créer par copie de Janv 2017 Fev 2017 puis de Fev 2017 créer Mars 2017 ainsi de suite jusqu'à... Dec 2017.Enfin créer un nouveau Classeur nomé Fact 2018.xls dont la 1ére feuille est une copie de Dec 2017
sous vba en créant un bouton
merci pour votre aide.

17 réponses

Résumé de la discussion

Automatiser la création mensuelle des feuilles dans un classeur Excel consiste à copier Janv 2017 vers Fev 2017, puis Fev 2017 vers Mars 2017, jusqu’à Décembre 2017, puis générer Fact 2018.xls. La solution proposée préconise d’insérer un bouton ActiveX nommé CommandButton1 sur Janv 2017 et de coller un code qui crée automatiquement la feuille suivante ou ouvre un nouveau classeur selon l’année. Si la feuille du mois suivant existe, le code l’active et passe à l’étape suivante, sinon il la copie et propose l’enregistrement sous le nom Fact 2018.xls. En cas de retours variés selon les versions d’Excel, plusieurs utilisateurs rapportent que le mécanisme ne se répète pas sans ajustements et que le contrôle d’erreurs doit être renforcé.

Bobot (l’IA à votre service)
  1. Bonjour,

    Places un bouton ActiveX sur la feuille (bouton nommé CommandButton1) et copies le code ci-dessous dans le module de la feuille nommée Janv 2017 (qui doit être la seule du classeur) :

    Option Explicit
    Private Sub CommandButton1_Click()
    Dim dlg As FileDialog
    Dim c As Workbook
    Dim f As Worksheet
    Dim d As Date
    Dim n As String
    Dim a As Integer
    Dim i As Integer
    
      'Désélectionner le bouton
      ActiveCell.Activate
      'Date actuelle
      d = CDate("1 " & Me.Name)
      'Année actuelle
      a = Year(d)
      'Date mois suivant
      d = DateSerial(a, Month(d) + 1, 1)
      'Nom de la feuille
      n = Application.Proper(Format(d, "mmm yyyy"))
      If a = Year(d) Then
        ' si la feuille suivante est dans la même année ....
        On Error Resume Next
        Set f = Worksheets(n)
        On Error GoTo 0
        If f Is Nothing Then
          ' - si la feuile n'existe pas, l'ajouter.
          Me.Copy after:=Me
          Set f = ActiveSheet
          f.Name = n
        Else
          ' - si la feuille existe, la sélectionner
          f.Activate
        End If
      Else
        ' si on change d'année, copier la feuille dans un nouveau classeur
        Me.Copy
        Set f = ActiveSheet
        f.Name = n
        Set c = f.Parent
        ' proposer l'enregistrement du nouveau classeur
        Set dlg = Application.FileDialog(msoFileDialogSaveAs)
        With dlg
          ' nom du fichier
          .InitialFileName = ThisWorkbook.Path & "\" & "Fact " & Year(d)
          ' filtrer sur l'extension *.xls
          For i = 1 To .Filters.Count
            If .Filters(i).Extensions = "*.xls" Then
              .FilterIndex = i
              Exit For
            End If
          Next i
          If .Show <> 0 Then
            'Enregistrer le classeur
            On Error Resume Next
            Application.DisplayAlerts = False
            .Execute
            Application.DisplayAlerts = True
            On Error GoTo 0
          End If
        End With
      End If
    
    End Sub

    Exemple :
    https://www.cjoint.com/c/GEbpJTODdFd


    1
    1. merci pour votre attention
      je trouve une erreur au niveau compilation de la ligne 14
      d = CDate("1 " & Me.Name)(Me sélectionner).
      et je pause une autre question dans le ^m sujet:
      comment copier une feuille (derniére feuille) et la nomé selon l'idex de la feuille précedente(copié), je m'explique
      ActiveSheet.Paste
      if sheets(1)then ActiveSheet.Name = "Fev 2017"
      if sheets(2)then ActiveSheet.Name = "Mars 2017"
      .
      .
      .
      .
      .j'usqu'a :if sheets(12)then ActiveSheet.Name = "Dec 2017"
      comment est ce que je peu écrire cette procédure dans VBA
      et enfin créer un nouveau classeur nomer Fact 2018.xls enregistrée sur le bureau dont la 1ere feuille est une copie de Dec 2017
      j'ai télécharger l'exemple que vous m'avez envoyer et je trouve pas la macro
      merci beaucoup pour votre attention
      0
      1. Bonjour,

        S'il y a une erreur sur la ligne 14 c'est que la consigne n'est pas respectée :
        Une seule feuille nommée Janv 2017

        L'erreur vient du fait que la feuille n'est pas nommée correctement :
        il ne faut pas Fev 2017 mais Févr 2017

        Dans le fichier exemple (que je viens de télécharger pour vérifier) la macro se situe comme dit plus haut, dans le module de feuille.

        Il est impératif qu'elle se situe là et pas dans un module standard, Cela permet de la dupliquer à chaque copie de feuille et de la retrouver dans le fichier de 2018.
        0
    2. bon soir monsieur
      j'attire votre attention que je suis débutant en vba surtout
      il ya des points que je n'est pas bien copris
      est ce que je peu vous envoyer mon fichier excell et comment
      bonne réception et merci d'avance
      0
      1. bonsoir
        je vous remercie profondément
        mais il ya un message de securité que j'ai pu l’éviter il dit pour des raisons de sécurité les macros ont eté arrêté comment faire?
        0
        1. Bonjour
          pourquoi lorsque je clique sur le bouton (mois suivant) rien ne se passe
          j'ai fait beaucoup d'essaie
          merci de me répondre
          0
          1. Re,

            Parce que les macros ne sont pas activées :
            Excel 2007 et après : Options Excel / Centre de gestion de la confidentialité / Paramètres du centre de gestion de la confidentialité / Options des macros = Activer toutes les macros + Accès approuvé au modèle d'objet du projet VBA
            Excel 2003 et avant : Outils / Options / Onglet sécurité / Sécurité des macros / Onglet Niveau de sécurité = Sécurité faible + / Onglet Editeurs approuvés = faire confiance au projet Visual Basic
            0
        2. re
          j'ai fait comme vous m'avez expliquer mais toujours pas de réponse
          le bouton ne s'exécute pas
          autre sujet
          comment écrire sous VBA pour nommer une nouvelle feuille (une copie de la dernière selon le nom de la feuille copiée)
          cad :
          si le nom de la feuille copié="Janv 2017", alors nouveau non de la feuille a inserrer sera "Fev 2017" (then ActiveSheet.Name = "Fev 2017")
          si le nom de la feuille copié="Fev 2017", alors nouveau non de la feuille a inserrer sera "Mars 2017" (then ActiveSheet.Name = "Mars 2017")
          ainsi de suite j'usqua "Dec 2017"

          je veu introduire ce que vous aller m'ecrire dans le bouton nouveau
          Sub Groupe59_QuandClic()
          critere = InputBox("Critere?")
          If critere = "" Then Exit Sub
          ActiveSheet.Copy after:=Sheets(Sheets.Count)
          ActiveSheet.Name = critere
          [c7].Value = [c7].Value + 1
          [A843].Value = [C843].Value
          End Sub
          ici je veu éliminer l'imput box et remplacer par if then
          j'espére que vous m'avez copmris
          merci
          0
          1. merci pour votre aide et de la patience dont vous avez fait pour mon projet.
            0
            1. Est-ce que maintenant les macros fonctionnent ?
              0
          2. Non
            Lorsque je clic rien ne ce passe
            Je ne saï pas pourqpui
            Merci pour votre attention
            0
            1. le mode création est-il désactivé (sur l'onglet développeur) ?
              0
            2. Quel OS et Quelle version d'Excel ?
              0
          3. a peu prés j'ai trouver une solution qui n'est pas complète veuillez examiner ce que j'ai fait (corriger et compléter svp)
            merci d'avance
            https://www.cjoint.com/c/GEcwxi3Vy18
            0
            1. Bonjour,

              Excel 97-2003 ce n'est pas une version, dans cette période il y a eu 4 versions :
              - Excel 97 - (8.0) - 15/01/1997
              - Excel 2000 - (9.0) - juin 1999
              - Excel 2002 - (10.0) - juin 2001
              - Excel 2003 - (11.0) - Automne 2003
              Pour connaitre la version menu ? (ou aide) / a propos d'Excel
              Le comportement des macros peut être différent selon la version.

              Est-ce que les macros fonctionnent ?
              Est-ce que le fichier du premier message (post 1) fonctionne ?
              Tant que j'ai pas ces réponses on avancera pas !

              Cependant, comme je l'ai demandé dès mon premier message, il faut impérativement mettre la macro que j'ai proposée dans le module de feuille, pas dans un module standard !

              Est-ce que
              0
            2. @Patrice33740- Excel 2003 - (11.0) - Automne 2003
              -les macros fonctionnent mais le bouton (mois suivant) ne fonctionne pas je peu ni selectionner, ni copier et rien ne ce passe.
              -le fichier du premier message (post 1) ne fonctionne pas
              0
            3. @hakimrAvec cette version, le fichier du post 1 devrait fonctionner, est-ce le cas ?
              0
          4. Re,

            C'est bizarre que le fichier ne fonctionne pas !

            Je te remets un fichier similaire à celui du post 1 :
            https://www.cjoint.com/c/GEdmcuillCd

            Télécharger le et enregistres-le sur ton disque dur.
            Ne fait aucune modification.
            Teste-le c'est-à-dire :
            - Appuis sur le bouton mois suivant, il doit créer une feuille Févr 2017,
            - Appuis sur le bouton de Févr 2017, il crée Mars 2017,
            - ... jusqu'en Déc 2017.
            - Appuis sur le bouton de Déc 2017 : il crée un nouveau fichier avec uniquement Janv 2018 et une fenêtre propose l'enregistrement du fichier sous le nom Fact 2018.

            Est-ce ce fichier fonctionne ?
            0
            1. Non
              J'appui sur le bouton et rien ne ce passe
              0
              1. C'est pas normal,
                C'est peut-être un problème avec les boutons ActiveX (a cause de la mise à jour KB 2920794), essaies ce fichier (le second bouton est de type formulaire) :
                https://www.cjoint.com/c/GEdmHAMRbjd
                0
            2. oui ça marche(une seule fois), cad il a créer seulement Fev 2017 et par la suite aucun effet cad il n'a pas crée Mars 2017 en cliquant de nouveau.
              merci pour votre attention
              0
              1. pour avoir Mars 2017 il faut cliquer de nouveau sur le bouton (mois suivant) avec le bouton droit de la souris pour changer du Feuille1 au Feuille2 l'affectation du macro et ainsi de suite pour la création d'une nouvelle Feuille et ça s’arrête jusqu’à Feuille 9 (Oct2017) .
                et enfin une boite de dialogue qui s'ouvre dont le contenu est :
                vous avez modifié un projet signé. vous ne possédez pas la clé approprié pour le signer. cette signature sera ignorée.
                est ce que c'est comme ça je doit faire?
                0
                1. Ok, je vois :
                  Sur ton ordinateur, les boutons ActiveX ne fonctionnent pas.
                  C'est un bug qui provient très probablement d'une des mises à jour Office, ça arrive fréquemment sur certaines machines :
                  https://www.google.fr/#q=excel+activex+ne+fonctionne+plus&btnK=Recherche%20Google
                  La solution préconisée par Microsoft ne fonctionne pas toujours :
                  https://support.microsoft.com/fr-fr/help/817112/

                  Ce fichier, avec un bouton de formulaire à la place du bouton ActiveX devrait fonctionner correctement :
                  https://www.cjoint.com/c/GEdn0qNy2fd

                  Cordialement
                  Patrice
                  0
                2. @Patrice33740PS : Supprimes le Module 1
                  0
              2. Voila
                Finalement ça fonctionne bien mais il ya une petite retouche c'est en créant nouvelle classeur 2018 je veux que la 1ere feuille commence par copie de Dec 2017 et je commence de nouveau le travail cad en cliquant je 'obtiend Janv 2018 .........
                merci beaucoup pour votre aide.
                Riadh.
                0
              3. Monsieur
                peu être vous avez tromper de choisir la pièce jointe
                c'est le fichier que je vous est envoyer la 1ere fois de ma part
                merci pour votre compréhension
                0
                1. Oui, mais avec la commande nouvelle feuille qui fonctionne comme demandé !
                  0
                2. @hakimrBonjour
                  encore une question
                  a chaque création d'une nouvelle feuille j'ajoute 1 au cellule c7 et copier la cellule A843 dans C 843 :( [c7].Value = [c7].Value + 1
                  [A843].Value = [C843].Value) oû est ce que je peu introduire cette écriture dans votre procédure?
                  le changement du non de la feuille dans le lien hypertexte des bouton Haut et Bas est ce que je peu le faire automatiquement?
                  comme ça c'est fini et j'automatise tout les taches
                  Bonne journée
                  Riadh.
                  0
                3. @hakimrj'ai réussi a jouter les deux ligne pour modifier C7 et A843 a chaque ajout de feuille et ça fonctionne et ça marche bien, sauf il reste le changement de l'adresse des lien hypertexte des boutons Haut et Bas est ce que je peu automatiser cette tache ? sinon ce n'est pas un problème je fait manuellement
                  merci et bonne journée
                  0