Copie d'un code lors d'une création d'une feuille

Bonsoir le forum,

Au cours d'un traitement je crée une feuille (copie d'une feuille modèle).

Comment codifier pour que la feuille créée puisse profiter de l'écriture qui suit:

End Sub

Merci d'avance

Annette

Bonsoir,

Normalement lorsque tu crées une feuille par duplication d'une autre, le code qui y est intégré "suit avec"

Exemple : dans un nouveau classeur dans le module de Feuil1 crée la Sub coucou() :

Sub coucou()
Msgbox "test"
End Sub

ensuite dans un module standart créer la Sub Duplique() :

Sub Duplique()
    Sheets("Feuil1").Copy Before:=Sheets(2)
End Sub

Toutes les feuilles créées avec la sub Duplique() comportent la Sub coucou()

A+

Re bonsoir

Cher Galopin01

Que ferai-je sans toi?

C'est le code suivant que n'est pas copié dans la nouvelle feuille.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

xxx

xx

x

xx

xxx

end sub

Je mets ci dessous la parte du code qui créée la feuille.

DebDateCde:

Range("A1").Select

Comment dois je modifier ce code?

Merci d'avance

Annette

Bonsoir,

Une procédure commence par Sub... et finit par End Sub ! De plus elle est étroitement dépendante du contexte.

Difficile donc dans ces conditions de répondre de manière fiable, mais sans doute que le code suivant devrait faire l'affaire :

DebDateCde:
If Range("BF6").Value = 1 Then GoTo FinDateCde
Dim Nom$, WsN$
WsN = ActiveSheet.Name
Nom = Range("E3").Value
With Sheets("Modèle")
  .Visible = True
  .Unprotect
  .Copy Before:=Sheets(WsN)
    ActiveSheet.Name = Nom
  .Protect
  .Visible = False
End With
ActiveWindow.DisplayZeros = False
Range("A1").Select

A+

Bonjour à tous

Cher Galopin la partie de code que tu m'as communiquée me convient et à résolu ma question.

Une modification est elle possible pour que la feuille créée se mette en dernière position.

Ceci pour satisfaire un code qui liste sur les feuilles affichées qui sont placées après la feuille "Modèle"

Ordre de mes Feuilles "Paramêtres"," Récap", "Banque","Modèle"(non visible), puis viennent les feuilles "2009-01","2009-02",etc

NB:rappel des lignes de création

.Copy Before:=Sheets(WsN)

ActiveSheet.Name = Nom

Merci d'avance

Annette

Re forum

Sheets([Nom]).Move after:=Sheets("Modèle")

En insérant ce code c'est OK pour le fonctionnement mais il serait plus intéressante d'avoir les feuilles ajoutées dans un ordre hiérarchique.

2009-01, 2009-02, 2009-03, etc

Si une feuille est saisie dans le mauvais ordre la remettre à sa place m'intéresse

A bientôt Annette

re bonjour

pour copier la feuille en dernière position

.Copy After:=Sheets(Sheets.Count)

ActiveSheet.Name = Nom

Reste à trouver le tri des feuilles ajoutées.(tri descendant si possible)

A plus tard

Annette

bonjour,

C'est une question beaucoup plus complexe qu'il n'y parait :

Le code suivant peut faire l'affaire mais il à l'inconvénient d'être caduque tous les ans...

Sub WsSort()
Dim Arr, S$
Application.ScreenUpdating = False
S$ = "Paramètres Récap Banque Modèle " & _
"2009-01 2009-02 2009-03 2009-04 2009-05 2009-06 " & _
"2009-07 2009-08 2009-09 2009-10 2009-11 2009-12"
On Error Resume Next
Arr = Split(S)
For i = 1 To UBound(Arr)
Sheets(Arr(i)).Move after:=Sheets(Arr(i - 1))
Next
Application.ScreenUpdating = True
End Sub

Et dans ta macro principale tu appelleras WsSort :

DebDateCde: 
If Range("BF6").Value = 1 Then GoTo FinDateCde 
Dim Nom$, WsN$ 
WsN = ActiveSheet.Name 
Nom = Range("E3").Value 
With Sheets("Modèle") 
  .Visible = True 
  .Unprotect
  .Copy After:=Sheets(Sheets.Count) 
    ActiveSheet.Name = Nom 
    WsSort
  .Protect
  .Visible = False 
End With 
ActiveWindow.DisplayZeros = False 
Range("A1").Select

A+

re bonjour

Merci Galopin01, ton code fonctionne comme tu n'en doutais pointr.

Jusqu'à la prochaine "étincelle" je vais laisser cette écriture.

A moins que l'on puisse ramener dans le Split le contenu de cellules dans ce cas, je n'aurai plus à modifier le code de temps en temps.

Merci et à bientôt

Annette

re bonjour

Galopin01 Ton code modifié comme ci dessous fonctionne, mais il me parait bien long.

Avec tes connaissances et pour continuer mon apprentissage comment puis je le simplifier .

fichier joint

https://www.excel-pratique.com/~files/doc/split.xls

Sub WsSort()

Dim Arr, S$

Application.ScreenUpdating = False

S$ = "Paramètres Récap Banque Modèle " & _

(Range("A2") & " " & Range("A3") & " " & Range("A4") & " " & Range("A5") & " " & Range("A6") _

& " " & Range("A7") & " " & Range("A8") & " " & Range("A9") & " " & Range("A10") & " " & Range("A11"))

On Error Resume Next

Arr = Split(S)

For i = 1 To UBound(Arr)

Sheets(Arr(i)).Move after:=Sheets(Arr(i - 1))

Next

Application.ScreenUpdating = True

End Sub

bonsoir,

Euh... On pourrait éventuellement empiler deux Array, mais je ne te le recommande vraiment pas. Simplifier n'est -vraiment- pas le mot qui conviendrait !

A+

Salut le forum

Juste pour simplifier, comme tu le demandes, une façon de le faire

Sub WsSort()
'Tri des feuilles dans comandes HL
Dim Arr, S$, I As Byte

Application.ScreenUpdating = False

S$ = "Paramètres Récap Banque Modèle"

For I = 2 To Range("A25").End(3).Row
  S$ = S$ & " " & Cells(I, 1)
Next I

On Error Resume Next
Arr = Split(S)

For I = 1 To UBound(Arr)
  Sheets(Arr(I)).Move after:=Sheets(Arr(I - 1))
Next I

Application.ScreenUpdating = True

End Sub

Mytå

bonjour,

Oui, je devais avoir un p'tit coup de pompe hier, j'étais parti dans une direction un peu fumeuse...

A+

Bonjour à tous

Merci à tous

NB:

Lire et choisir entre les avis,voilà le premier pas de la connaissance;

lire et réfléchir sur ce qu'on a vu, voilà le second pas de la connaissance;

lire Mytå voilà le top de la connaissance du sujet traité.

Bon courage à nous tous.

Annette[/quote][/u]

Rechercher des sujets similaires à "copie code lors creation feuille"