Nom des feuilles excel automatique selon une cellule + compteur

MR682 Messages postés 16 Statut Membre -  
MR682 Messages postés 16 Statut Membre -
Bonjour à tous,

Tout d'abord mes meilleurs voeux pour cette nouvelle année.

N'étant pas très douée en macro, je fais appel à votre savoir.

J'aimerai une macro qui me permette de nommer automatiquement les feuilles selon un numéro de départ 'F201901' que j'ai indiquer dans la première feuille "N°factures!A1" pour que les suivantes deviennent F201902..03 etc. J'ai voulu ajouter la fonction qui évite la création de doublon mais je suis emmêlée les pinceaux

Voici mon bout de macro

' AjoutAutoFeuilles ()
Dim compteur As Integer
compteur = 1
For compteur = 1 To Range("N°factures!A1").Value
Sheets.Add

For Each Worksheet In Worksheets
If Worksheet.Name = "N°factures!A1" & compteur Then
Application.DisplayAlerts = False
Worksheet.Delete
Application.DisplayAlerts = True
End If
Next Worksheet
ActiveSheet.Name = "N°factures!A1" & compteur
Next
End Sub


je n'ai pas trouvé comment vous faire part de mon fichier excel

Merci pour votre retour

5 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    site de partage fichier
    https://www.cjoint.com
    0
    1. MR682 Messages postés 16 Statut Membre
       
      Bonjour,
      Merci pour le lien, j'y ai mis mon fichier
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Pour transmettre un fichier,
      Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
      il faut passer par un site de pièce jointe tel que cjoint.com

      Allez sur ce site : https://www.cjoint.com/
      Clic sur parcourir,
      Cherche ton fichier,
      clic sur ouvrir,
      Clic sur "Créer le lien cjoint",
      Copier le lien,
      Revenir ici le coller dans une réponse...

      ou
      'mon partage
      https://mon-partage.fr/
      0
  2. MR682 Messages postés 16 Statut Membre
     
    Bonjour,

    Désolée je débute voici le lien https://www.cjoint.com/c/IAeharS0YXO Merci pour ta patience
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Certes, certes mais a quel moment voulez vous que ca se passe votre affaire car comprends pas trop la logique!!
      0
      1. MR682 Messages postés 16 Statut Membre > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
         
        Dans le fichier, j'ai les deux premières feuilles qui récapitule pour l'une les numéros de factures et l'autre l'ensemble des factures détaillées. Puis viennent les factures "F201901", F201902..j'aimerai qu'en créant la feuille suivante, le nom de la feuille se mette automatiquement en gardant l'ordre chronologique soit F201903 mais aussi, après réflexion, qu'elle se créée, en copiant le détail de la feuille F201901.
        En espérant avoir été plus compréhensible
        0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Il vous faut une feuille model qui sera recopiee avec les valeurs et le nom qu'il faudra dans la chronologie. Normalement pas besoin de la feuille N°factures. Le numero de prochaine facture pourrait etre ecrit en auto dans la cellule B16 du model. Il faudra aussi un bouton ou autre action pour faire cette recopie!!

      Pourquoi feuille: F201901 et ailleurs N° facture: 2019-01

      La feuille FACTURATION JANVIER 2019 sera remplie comment et a quoi sert-elle??
      0
  3. MR682 Messages postés 16 Statut Membre
     
    Re,

    j'ai trouvé cette fonction vba qui fonctionne mais elle ne tient pas compte des n°déjà créer préalablement.
    est-ce qu'il y a un moyen d'ajouter dans la fonction un compteur (en partant du n° de ma première "feuille 2019-01") ?

    Sub Create()
    'Updateby Extendoffice 20160704
    Dim I As Long
    Dim xNumber As Integer
    Dim xName As String
    Dim xActiveSheet As Worksheet
    On Error Resume Next
    Application.ScreenUpdating = False
    Set xActiveSheet = ActiveSheet
    xNumber = InputBox("Enter number of times to copy the current sheet")
    For I = 1 To xNumber
    xName = ActiveSheet.Name
    xActiveSheet.Copy After:=ActiveWorkbook.Sheets(xName)
    ActiveSheet.Name = "2019-" & I
    Next
    xActiveSheet.Activate
    Application.ScreenUpdating = True
    End Sub

    c'est un fichier test ..F201901 => F=feuille et le n°de facture 201901

    la feuille FACTURATION ve reprendre différentes information de toutes les factures créées
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      Vous restez sur votre facon de voir, allons y:

      Sub Create()
          'Updateby Extendoffice 20160704
          Dim I As Long
          Dim xNumber As Integer
          Dim xName As String
          Dim xActiveSheet As Worksheet
          
          On Error Resume Next
          Application.ScreenUpdating = False
          Num_depart = ActiveSheet.Range("B16")
          Num_depart = Split(Num_depart, "-")
          Ndep = CLng(Num_depart(1))
          Set xActiveSheet = ActiveSheet
          xNumber = InputBox("Enter number of times to copy the current sheet")
          For I = Ndep To xNumber
              xName = ActiveSheet.Name
              xActiveSheet.Copy After:=ActiveWorkbook.Sheets(xName)
              With ActiveSheet
                  .Name = "2019-" & Format(I, "00")
                  .Range("B16") = .Name
              End With
          Next I
          xActiveSheet.Activate
          Application.ScreenUpdating = True
          Set xActiveSheet = Nothing
      End Sub
      


      Il faudrait ajouter des tests sur la saisie de l'inputbox, mais a vous de voir……...
      0
    2. MR682 Messages postés 16 Statut Membre
       
      Bonjour,

      Je continue de chercher une solution...

      La fonction ne gère pas le compteur, elle me créée en doublon la dernière feuille.

      En tout cas je te remercie pour ton aide.
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      En effet, code modifie:

      Sub Create()
          'Updateby Extendoffice 20160704
          Dim I As Long
          Dim xNumber As Integer
          Dim xName As String
          Dim xActiveSheet As Worksheet
          
          On Error Resume Next
          Application.ScreenUpdating = False
          Num_depart = ActiveSheet.Range("B16")
          Num_depart = Split(Num_depart, "-")
          Ndep = CLng(Num_depart(1)) + 1
          Set xActiveSheet = ActiveSheet
          xNumber = InputBox("Enter number of times to copy the current sheet")
          xNumber = xNumber + Ndep
          For I = Ndep To xNumber
              xName = ActiveSheet.Name
              xActiveSheet.Copy After:=ActiveWorkbook.Sheets(xName)
              With ActiveSheet
                  .Name = "2019-" & Format(I, "00")
                  .Range("B16") = .Name
              End With
          Next I
          xActiveSheet.Activate
          Application.ScreenUpdating = True
          Set xActiveSheet = Nothing
      End Sub
      0
  4. MR682 Messages postés 16 Statut Membre
     
    Bonjour,

    Top je n'ai plus de doublon merci. Par contre, ça me crée deux feuilles au lieu d'une mais c'est gérable.

    Et si je veux pousser l'automatisme...

    Est-ce qu'il est possible de créer automatiquement le nombre de factures défini par la feuilles "N°factures" ? ex. : j'inscris les numéros de factures (2019-01..2019-02 jusuqu'à 2019-70, soit 70 factures) sur cette feuille de la cellule B1 à B70. Puis, via le clic du bouton qui se trouve sur la feuille de factures "modèle", les 70 factures se créées avec le nom de la feuille mis automatiquement ?
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      deux feuilles au lieu d'une
      Plait-il??
      Chez moi si 1: creation d'une seule feuille
      et ainsi de suite

      Numero en fonction de B1-B70 en auto sur clic bouton, pas de problème...

      Suite:
      une facon de faire:
      Sub Create()
          'Updateby Extendoffice 20160704
          Dim I As Long
          Dim xNumber As Integer
          Dim xName As String
          Dim xActiveSheet As Worksheet
          Dim Plage As Variant
          
          'On Error Resume Next
          'Application.ScreenUpdating = False
          With Worksheets("N°Facture")
              Plage = .Range("B1:B" & .Range("B" & Rows.Count).End(xlUp).Row)
              Nb = UBound(Plage)
          End With
          With Worksheets("Modéle")
              .Activate
              xName = .Name
          End With
          For n = 1 To Nb
              ActiveSheet.Copy After:=ActiveWorkbook.Sheets(xName)
              With ActiveSheet
                  .Name = Plage(n, 1)
                  .Range("B16") = .Name
                  xName = .Name
              End With
          Next n
          xActiveSheet.Activate
          Application.ScreenUpdating = True
          Set xActiveSheet = Nothing
      End Sub
      0
    2. MR682 Messages postés 16 Statut Membre
       
      Bonjour,

      Si mes feuilles ne sont pas protégés, la macro me créée toutes les factures avec une dernière + 2019-70(2) et

      Si mes feuilles sont protégés, ce que j'aimerai..., là ça fait une erreur d'exécution
      0
    3. MR682 Messages postés 16 Statut Membre
       
      ok j'ai trouvé pour la protection de la feuille j'ai rajouté Unprotect et Protect (ci-dessous) par contre je n'arrive pas à enlever la dernière feuille supplémentaire 2019-070 (2)

      Sub MacroavecfeuilleProtect()
      ActiveSheet.Unprotect "ae2c"
      'Updateby Extendoffice 20160704
      Dim I As Long
      Dim xNumber As Integer
      Dim xName As String
      Dim xActiveSheet As Worksheet
      Dim Plage As Variant

      'On Error Resume Next
      'Application.ScreenUpdating = False
      With Worksheets("N°Factures")
      Plage = .Range("B1:B70" & .Range("B" & Rows.Count).End(xlUp).Row)
      Nb = UBound(Plage)
      End With
      With Worksheets("MODELE")
      .Activate
      xName = .Name
      End With
      For n = 1 To Nb
      ActiveSheet.Copy After:=ActiveWorkbook.Sheets(xName)
      With ActiveSheet
      .Name = Plage(n, 1)
      .Range("B16") = .Name
      xName = .Name
      End With
      Next n
      xActiveSheet.Activate
      Application.ScreenUpdating = True
      Set xActiveSheet = Nothing
      ActiveSheet.Protect "ae2c", True, True, True
      End Sub
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re
      Chez moi y a pas de feuilles protègees et ça marche sans problème!!!!!!
      Pouvez mettre votre fichier à dispo??
      0
    5. MR682 Messages postés 16 Statut Membre
       
      ggrrrr ça ne me garde pas le verrouillage de ma feuille modele
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. MR682 Messages postés 16 Statut Membre
     
    Bonjour,

    Génial ça fonctionne nickel!!

    un énorme MERCI pour ton aide et ton temps
    0