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,
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,
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 SubLe 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.
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...
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
Cordialement,