XL 2019 Copier une feuille dans une autre en VBA

Optimal

XLDnaute Junior
Bonsoir.

J'utilise un code qui me permet de créer mes feuilles de classeur en fonction d'une liste avec cette macro :
Code:
Sub ajout_feuilles()

Dim nom As String, a As Range
For Each a In Range("Tbl_Liste")

nom = a.Value
 
 If Not feuille_existe(nom) And nom <> "" Then
   Sheets.Add Count:=1, after:=Worksheets(Worksheets.Count)
   ActiveSheet.Name = nom

   End If
Next a
End Sub

Je voudrais pouvoir intégrer dans cette procédure une macro qui ferait une copie de ma feuille "Modéle" dans la ou les feuilles nouvellement crée.

J'ai fait une macro qui me permet de faire la copie mais maintenant je ne sais pas comment la modifier et l'intégrer dans ma procédure.

Code:
Sub copie_modèle()

ThisWorkbook.Worksheets("Modele").Cells.Copy ThisWorkbook.Worksheets("MaFeuille").Cells

end sub
 
Solution
Bonsoir Optimal, JM, mapomme,

Pourquoi ne pas copier la feuille Modele, c'est très classique :
VB:
Sub ajout_feuilles()
Dim F As Object, vis%, c As Range
Set F = ActiveSheet
Application.ScreenUpdating = False
With Sheets("Modele")
    vis = .Visible 'état
    .Visible = xlSheetVisible 'si la feuille est masquée
    For Each c In [Tbl_Liste]
        If Not feuille_existe(CStr(c)) And c <> "" Then
            .Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = CStr(c)
        End If
    Next
    .Visible = vis 'état initial
End With
F.Activate
End Sub
Edit : ne pas oublier les 2 CStr.

Bonne nuit.

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Optimal
Je te laisse tester la chose.
(J'ai point le temps, c'est l'heure de la soupe ;))
VB:
Sub ajout_feuilles()
Dim nom As String, a As Range
For Each a In Range("Tbl_Liste")
nom = a.Value
If Not feuille_existe(nom) And nom <> "" Then
   Sheets.Add Count:=1, after:=Worksheets(Worksheets.Count)
   ActiveSheet.Name = nom
Sheets("Modele").UsedRange.Copy ActiveSheet.Cells(1)
Application.CutCopyMode = False
End If
Next a
End Sub
 

Optimal

XLDnaute Junior
@Staple1600

Bonsoir pour le bout de code.

Alors ça fonctionne pour ce qui est de la copie dans les feuilles nouvellement crée.

Par contre ce n'est pas vraiment un copié collé de la feuille, du coup la mise en page et les formules contenues dedans ne fonctionnent pas.

Je joins un fichier pour te montrer ce qui se passe.

La page Neovacs est ma feuille d'origine qui a servi à faire ma feuille "Modele" !

Les feuilles Genomic Vision" et "Iliad" ont été crée par la macro et no fonctionnent pas.

J'ai laissé volontairement les feuilles "Avenir Telecom" et "Europlasma" dedans pour que tu puisses tester.
Fais un copié collé classique de toute la feuille modèle et tu mets dans ces deux feuilles pour voir ce qui doit se produire en activant la macro.

Merci d'avance pour ton aide
 

Pièces jointes

  • Fichier_Test_Optimal.xlsm
    254.2 KB · Affichages: 21

mapomme

XLDnaute Barbatruc
Supporter XLD
Sheets("Modele").UsedRange.Copy ActiveSheet.Cells(1)

Attention ! UsedRange ne commence pas forcément à la cellule A1.
il faudrait donc coller usedrange à la bonne place (adresse de la première cellule de usedrange) :
VB:
Sheets("Modele").UsedRange.Copy ActiveSheet.Range(Sheets("Modele").UsedRange.Range("a1").Address)

Pas évident de comprendre qu'ici Range("a1") ne désigne pas forcément la cellule A1 de la feuille destination mais bien la première cellule de usedrange.

edit: bonne-nuit @job75 ;)
 

Pièces jointes

  • Staple1600- UsedRange- v1.xlsm
    17.6 KB · Affichages: 4
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir Optimal, JM, mapomme,

Pourquoi ne pas copier la feuille Modele, c'est très classique :
VB:
Sub ajout_feuilles()
Dim F As Object, vis%, c As Range
Set F = ActiveSheet
Application.ScreenUpdating = False
With Sheets("Modele")
    vis = .Visible 'état
    .Visible = xlSheetVisible 'si la feuille est masquée
    For Each c In [Tbl_Liste]
        If Not feuille_existe(CStr(c)) And c <> "" Then
            .Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = CStr(c)
        End If
    Next
    .Visible = vis 'état initial
End With
F.Activate
End Sub
Edit : ne pas oublier les 2 CStr.

Bonne nuit.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal