Création et suppression d'onglets

Je suis débutant en VBA et je veux faciliter une tache que j'exerce très souvent.

J'ai un classeur d'au moins 30 feuilles dont une feuille nommée "modèle", bien paramétrée et comportant plusieurs formules ainsi qu'une feuille comportant un tableau comportant une liste de comptes. ce que je veux c'est de dupliquer la feuille nommée "modèle" autant de fois que les comptes figurants dans la liste et de mettre à jour à chaque fois un compte nouvellement créer.

Merci pour vous tous

Salutations

Bonjour DAROUI, le forum,

Cordialement,

9fichier.xlsm (44.37 Ko)

Re,

Un essai....

On crée les onglets en fonction de la colonne B de la feuille amort_plan et on les renomme avec les n° de compte.

 Option Explicit

Private Sub CommandButton1_Click()
 Dim wb As Workbook
 Dim ws As Worksheet, wsData As Worksheet, wsTemplate As Worksheet
 Dim lo As ListObject
 Dim Cell As Range
 Dim SheetName As String

    With Application
        .DisplayAlerts = False                    'désactive message
        .ScreenUpdating = False                   'désactive rafraichissement de l'écran
    End With

            Set wb = ActiveWorkbook                 'définit le classeur
        Set wsData = wb.Worksheets("amort_plan")    'définit wsData
    Set wsTemplate = wb.Worksheets("amort_modele")  'définit wsTemplate

    For Each ws In wb.Worksheets                    'boucle sur chaque feuille du classeur
        Select Case ws.Name
            Case "amort_modele", "amort_plan":
            Case Else: ws.Delete                    'efface toutes les feuilles sauf amort_modele et amort_plan
        End Select
    Next ws

    Application.DisplayAlerts = True               'réactive les messages

    Set lo = wsData.ListObjects("Plan_cpte_immo")  'définit le tableau utilisé

    If Not lo.DataBodyRange Is Nothing Then
        For Each Cell In lo.ListColumns(1).DataBodyRange   'boucle sur chaque cellule de la colonne 1 du tableau
            SheetName = Cell.Value                         'nom de l'onglet
            wsTemplate.Copy after:=wb.Worksheets(Worksheets.Count) 'copie la feuille amort_modele en dernière position
            With ActiveSheet
                .Name = SheetName         'renomme la feuille créée
            End With
        Next Cell                         'fin de boucle
    End If

    wsData.Activate                       'revient sur la feuiile amort_plan

End Sub

La macro n'est pas de moi, je l'avais en stock et adapté à ton cas, , merci à l'auteur

Attention, pour que cela fonctionne, il ne faut pas de doublons (N° de compte unique) ni de cellule vide.

Cordialement,

Merci pour votre aide.

J'ai testé le fichier, il marche bien, mais je ne veux pas que les autres feuilles soient supprimées.

1°) Prière m'indiquer comment je dois démasquer la macro pour que je puisse apporter des rectifications ci possible;

2°) Est ce que vous pouvez me faire une mise à jour de cette macro en désactivant l'instruction de suppression des autres feuilles;

Merci.

Cordialement

Re,

La macro est dans le module de la feuille amort_plan (puisqu'elle est associée au bouton).

Sans suppression des onglets:

Option Explicit

Private Sub CommandButton1_Click()
 Dim wb As Workbook
 Dim ws As Worksheet, wsData As Worksheet, wsTemplate As Worksheet
 Dim lo As ListObject
 Dim Cell As Range
 Dim SheetName As String

    With Application
        .ScreenUpdating = False      
    End With

            Set wb = ActiveWorkbook                 'définit le classeur
        Set wsData = wb.Worksheets("amort_plan")    'définit wsData
    Set wsTemplate = wb.Worksheets("amort_modele")  'définit wsTemplate

    Set lo = wsData.ListObjects("Plan_cpte_immo")  'définit le tableau utilisé

    If Not lo.DataBodyRange Is Nothing Then
        For Each Cell In lo.ListColumns(1).DataBodyRange   'boucle sur chaque cellule de la colonne 1 du tableau
            SheetName = Cell.Value                         'nom de l'onglet
            wsTemplate.Copy after:=wb.Worksheets(Worksheets.Count) 'copie la feuille amort_modele en dernière position
            With ActiveSheet
                .Name = SheetName         'renomme la feuille créée
            End With
        Next Cell                         'fin de boucle
    End If

    wsData.Activate                       'revient sur la feuiile amort_plan

End Sub

Le souci c'est que si l'onglet existe déjà, la macro va planter,

Il faudrait tester l'existence de la feuille puis définir ce qu'il faut faire (abandonner,écraser) si tel est le cas.

EDIT: un essai ...si l'onglet existe, on affiche un message et on passe à la ligne suivante.

11fichier-3.xlsm (44.05 Ko)

Cordialement,

Bonjour,

Merci pour votre aide,

le fichier il marche mais si vous pouvez me décrire comment le copier sur mon vrai classeur qui contient au moins une trentaine de page et de déplacer le bouton sur une autre feuille.

cordialement

Bonjour,

Tout d'abord je tiens à vous remercier de votre aide et je reviens vers vous pour finaliser mon projet de la manière suivante:

1°) Après avoir ajouter un compte à ma liste je veux que celle-ci soit mis à jour.

2°) Si je veux sélectionner tous les onglets créés d'après la liste pour les supprimer, comment dois-je faire?

Merci encore une fois.

Salutations

Bonjour DAROUI, le forum,

Après avoir ajouter un compte à ma liste je veux que celle-ci soit mis à jour.

Pas sur de comprendre ?

Si je veux sélectionner tous les onglets créés d'après la liste pour les supprimer, comment dois-je faire?

Dans ta demande initiale, on créait les onglets à partit de ton tableau et si l'onglet était déjà présent, on ne faisait rien.

Tu souhaites effacer uniquement les onglets dont les noms figurent dans ton tableau ?

Où supprimer le(s) compte(s) de la liste + les onglet(s) ?

J'ai bossé de nuit, je n'ai pas trop les idées claires...

Cordialement,

Salut,

Tout d'abord je tiens à vous remercier pour les efforts déployés afin de m'aider à améliorer mon projet.

Ce que je veux maintenant comme complément c'est de :

1°) Créer automatiquement un onglet à chaque fois qu'un compte est rajouté sur la liste;

2°) une commande pour sélectionner les onglets figurants sur la liste pour les supprimer.

Merci infiniment

Cordialement

Re,

1°) Créer automatiquement un onglet à chaque fois qu'un compte est rajouté sur la liste;

Chaque fois que tu inscris un compte en colonne B, un onglet se crée sans passer par le bouton "Créer les onglets".

(Je ne me suis pas préoccupé des données des autres colonnes).

2°) une commande pour sélectionner les onglets figurants sur la liste pour les supprimer.

J'ai rajouté un bouton "Supprimer les onglets" (seules "amort_plan" et "amort_modele" sont conservées).

Je ne supprime rien dans le tableau.

A tester...

11fichier-4.xlsm (66.16 Ko)

Cordialement,

Bonjour,

Je tiens à vous remercier pour tous les efforts déployés et je tiens quant même à vous dire que la macro marche bien, sauf que la commande 2 me supprime toutes les feuilles du classeur, hors ce que je veux c'est : ne supprimer que les onglets crées, c'est à dire ceux qui figurent sur la liste de la feuille nommée "amort_plan".

Si c'est possible et ça ne vous dérange pas c'est parfais, si non je me contente de ce qu'il y a.

Salutations chaleureuses

Bonjour DAROUI, le forum,

ne supprimer que les onglets qui figurent sur la liste de la feuille nommée "amort_plan".

A tester....

Private Sub CommandButton2_Click()
 Dim ws As Worksheet, i As Integer

  If MsgBox("Etes-vous certain de vouloir supprimer les onglets ?", vbYesNo, "Demande de confirmation") = vbYes Then
   For i = Sheets.Count To 2 Step -1
     If Application.CountIf(Sheets("amort_plan").ListObjects("Plan_cpte_immo").ListColumns(1).DataBodyRange, Sheets(i).Name) = 1 Then
      Application.DisplayAlerts = False
       Sheets(i).Delete
      Application.DisplayAlerts = True
     End If
   Next i
  End If
End Sub
10fichier-5-1.xlsm (49.87 Ko)

Cordialement,

Rechercher des sujets similaires à "creation suppression onglets"