[VBA-EXCEL 2003] Dupliquer une feuille complete [DONE]

Dupliquer une feuille complete [DONE] [VBA-EXCEL 2003] - VB/VBA/VBS - Programmation

Marsh Posté le 14-11-2005 à 10:44:29    

http://img381.imageshack.us/img381/8425/sanstitre26su.th.jpg
 
Bonjour,
Je voudrais dupliquer une feuille car le columns.copy ne me copie pas tout  
( il me manque les boutons et la protection des cellules verrouillées )
 
 

Code :
  1. Sheets("Base" ).Columns.Copy Sheets("nlle_feuille" ).Columns

Message cité 1 fois
Message édité par sakuraba le 14-11-2005 à 15:06:41
Reply

Marsh Posté le 14-11-2005 à 10:44:29   

Reply

Marsh Posté le 14-11-2005 à 11:00:05    

Salut sakuraba,
 

Code :
  1. Sheets("nom_de_ta_feuille" ).Select
  2.     Sheets("Masque" ).Copy After:=Sheets(3) ' ou before:sheets(1)

Cela te crée automatiquement une copie exacte avec toutes les macros, les commentaires, les bouttons... de ta feuille.
Pour la renomer ensuite :

Code :
  1. ActiveSheet.Name = "Nouveau_Nom"

bon courage


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 14-11-2005 à 11:27:47    

Code :
  1. Sub RecupNomOnglet()
  2.     Dim WsName As String
  3.     WsName = ActiveSheet.Name
  4.      Sheets("Base" ).Columns.Copy Sheets(WsName).Columns
  5.     ' Entre le nom du chantier ds la cellule A1
  6.      Sheets(WsName).Range("A1" ).Value = WsName
  7. End Sub


 
j'arrive pas à l'integrer là dedans
si je remplace Sheets("Base" ).Columns.Copy Sheets(WsName).Columns par 'Sheets("Base" ).Copy Sheets(WsName)
bah ça crée une feuille base(2) et une avec mon wsname

Message cité 1 fois
Message édité par sakuraba le 14-11-2005 à 11:35:21
Reply

Marsh Posté le 14-11-2005 à 11:56:34    

Re,
dans cette fonction tu utilises columns.copy ça te recopie toutes tes colones dans une feuille existante WsName. Avec cette copie tu perds tout ce qui est directement attaché à la feuille (macros worsheet_Activate, commandbutton...)  

sakuraba a écrit :

Code :
  1. Sub RecupNomOnglet()
  2.     Dim WsName As String
  3.     WsName = ActiveSheet.Name
  4.      Sheets("Base" ).Columns.Copy Sheets(WsName).Columns
  5.     ' Entre le nom du chantier ds la cellule A1
  6.      Sheets(WsName).Range("A1" ).Value = WsName
  7. End Sub



Si tu fais :

Code :
  1. Sub RecupNomOnglet()
  2.     Dim WsName As String
  3.     WsName= "Nouvelle feuille"
  4.      Sheets("Base" ).Copy After:=Sheets(3)
  5.     ' Entre le nom du chantier ds la cellule A1
  6.      Activesheet.Name = WsName
  7.      Sheets(WsName).Range("A1" ).Value = WsName
  8. End Sub

Ca te crée directement ta nouvelle feuille, il faut que tu trouves dans la code juste avant ce qui t'a permis d'avoir la nouvelle feuille et l'enlever.
 
:)
 
Edit : le sheets(X). copy ne marche pas sur une feuille déjà existante.

Message cité 1 fois
Message édité par watashi le 14-11-2005 à 11:58:01

---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 14-11-2005 à 12:13:55    

nan
je voudrais utiliser ma fonction plutot car ça me fait changer trop de code sinon
 

Code :
  1. Sub RecupNomOnglet()
  2.     Dim WsName As String
  3.         WsName = ActiveSheet.Name
  4.     Sheets("Base" ).Copy Sheets(WsName)
  5.    ' Entre le nom du chantier ds la cellule A1
  6.       Sheets(WsName).Range("A1" ).Value = WsName
  7. End Sub


 
http://img398.imageshack.us/img398/313/sanstitre23lv.jpg
 
 
base (2) contient tout ce que je veux sauf le bon nom de feuille et son son ds la cellule A1

Message cité 1 fois
Message édité par sakuraba le 14-11-2005 à 12:15:54
Reply

Marsh Posté le 14-11-2005 à 13:57:43    

Re

sakuraba a écrit :

Je voudrais dupliquer une feuille car le columns.copy ne me copie pas tout  
( il me manque les boutons et la protection des cellules verrouillées )

Si tu veux tous les boutons et toutes les macros... Tu n'as pas d'autre choix que de copier le feuille avec Sheets(X).copy Si tu utilises column.copy alors

watashi a écrit :

tu perds tout ce qui est directement attaché à la feuille (macros worsheet_Activate, commandbutton...)

Et comme :

sakuraba a écrit :

base (2) contient tout ce que je veux sauf le bon nom de feuille et son son ds la cellule A1

Et que :

watashi a écrit :

Edit : le sheets(X). copy ne marche pas sur une feuille déjà existante.


 

sakuraba a écrit :

nan
je voudrais utiliser ma fonction plutot car ça me fait changer trop de code sinon


Ben tant pis faudra quand même...


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 14-11-2005 à 14:22:53    

je comprends rien ...  :??:  
 

Code :
  1. ' creation d'un chantier via une feuille
  2. Sub NomOnglet()
  3.   If NomChantier.Value = "" Then Exit Sub
  4.   On Error Resume Next
  5.   Application.ScreenUpdating = True
  6.   ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
  7.   ActiveSheet.Name = NomChantier.Value
  8.   Call RecupNomOnglet
  9.   If Err <> 0 Then
  10.     Err.Clear
  11.     With Application
  12.         .ScreenUpdating = True
  13.         .DisplayAlerts = False
  14.     End With
  15.     ActiveSheet.Delete
  16.     msg = "Le nom de feuille que vous avez tapé n'est pas valide !" _
  17.         & vbCrLf
  18.     msg = msg & vbCrLf
  19.     msg = msg & "- Vérifiez que le nom de la feuille ne dépasse " _
  20.         & "pas 31 caractères" & vbCrLf
  21.     msg = msg & "- Vérifiez que le nom de la feuille ne contient " _
  22.         & "aucun des caractères suivants :" & vbCrLf
  23.     msg = msg & "  \ / : ? * [ ou ]" & vbCrLf
  24.     msg = msg & "- Vérifiez qu'une feuille du classeur ne possède " _
  25.         & "pas déjà un nom identique" & vbCrLf
  26.     Reponse = MsgBox(msg, , "Saisie invalide" )
  27.   End If
  28. End Sub


Code :
  1. ' Recuperation du nom de la feuille active et formatage des cellules
  2. Sub RecupNomOnglet()
  3.      Dim WsName As String
  4.      WsName = "Nouvelle feuille"
  5.      Sheets("Base" ).Copy After:=Sheets(3)
  6.      ' Entre le nom du chantier ds la cellule A1
  7.       ActiveSheet.Name = WsName
  8.      Sheets(WsName).Range("A1" ).Value = WsName
  9.      
  10. End Sub

Message cité 1 fois
Message édité par sakuraba le 14-11-2005 à 14:23:22
Reply

Marsh Posté le 14-11-2005 à 15:03:57    

sakuraba a écrit :

je comprends rien ...  :??:

Ca me le fait souvent aussi ;)
 
Là c'est ta partie de code qui te permet de créer la feuille et de la renomer.

Code :
  1. ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
  2.   ActiveSheet.Name = NomChantier.Value
  3.   Call RecupNomOnglet


il te suffit de la remplacer par :

Code :
  1. Call CreationOnglet

avec :

Code :
  1. Sub CreationOnglet()
  2.     Sheets("Base" ).Copy After:=Sheets(Worksheets.Count)
  3.     WsName = Nomchantier.Value
  4.     ActiveSheet.Name = WsName
  5.     Range("A1" ).Value = WsName
  6. End Sub


Sachant que tu peux très bien placer ces lignes dans le code principal directement.


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 14-11-2005 à 15:05:33    

voila j'ai trouvé grâce à toi merci encore  
 

Code :
  1. Sub NomOnglet()
  2.   If NomChantier.Value = "" Then Exit Sub
  3.   On Error Resume Next
  4.   Application.ScreenUpdating = True
  5.   ActiveWorkbook.Sheets("Base" ).Copy after:=Worksheets(Worksheets.Count)
  6.   ActiveSheet.Name = NomChantier.Value
  7.   Sheets(NomChantier.Value).Unprotect
  8.   ActiveSheet.Range("A1" ).Value = NomChantier.Value
  9.   Sheets(NomChantier.Value).Protect
  10. If Err <> 0 Then
  11.     Err.Clear
  12.     With Application
  13.         .ScreenUpdating = True
  14.         .DisplayAlerts = False
  15.     End With
  16.     ActiveSheet.Delete
  17.     msg = "Le nom de feuille que vous avez tapé n'est pas valide !" _
  18.         & vbCrLf
  19.     msg = msg & vbCrLf
  20.     msg = msg & "- Vérifiez que le nom de la feuille ne dépasse " _
  21.         & "pas 31 caractères" & vbCrLf
  22.     msg = msg & "- Vérifiez que le nom de la feuille ne contient " _
  23.         & "aucun des caractères suivants :" & vbCrLf
  24.     msg = msg & "  \ / : ? * [ ou ]" & vbCrLf
  25.     msg = msg & "- Vérifiez qu'une feuille du classeur ne possède " _
  26.         & "pas déjà un nom identique" & vbCrLf
  27.     Reponse = MsgBox(msg, , "Saisie invalide" )
  28.   End If
  29.   Application.DisplayAlerts = True
  30.  
  31. End Sub

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed