Compléter mon code

fenec

XLDnaute Impliqué
Bonjour le forum

j'utilise un code pour copier un onglet en fin de classeur qui fonctionne très bien mais qui ne supprime pas le code dans la feuille.
Code:
Sub copier_onglet()

d = Sheets(1).Cells(5, 3) 'Sauvegarde le calendrier
 Sheets("Calendrier").Copy after:=Sheets(Sheets.Count)
 ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
 
 With ActiveSheet
   .Name = "Congés " & d
   
    Sheets("Etat de Congés").Columns("B:M").Copy

    Columns("AM:AX").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
        
        End With
    
End Sub

En cherchant sur le forum j'ai trouvé un code de notre ami MyDearFriend ici

https://www.excel-downloads.com/threads/supprimer-code-vba-lors-dune-copie-de-feuille.81364/

Code:
Sub CopieFeuilleSansVBA()
'myDearFriend! - septembre 2007
    Sheets("Feuil1").Copy       'à adapter pour la feuille souhaitée
    With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
        .DeleteLines 1, .CountOfLines
    End With
End Sub


'La feuille "Feuil1" sera copiée dans un nouveau classeur sans son code VBA.

mais je ne parviens pas à l'intégrer dans le mien d'où ma venue

D'avance merci à ceux qui pourront m'aider

Cordialement,

Philippe
 

Papou-net

XLDnaute Barbatruc
Re : Compléter mon code

Bonjour Philippe,

Comme ceci, peut-être (pas testé):

Code:
Sub copier_onglet()

d = Sheets(1).Cells(5, 3) 'Sauvegarde le calendrier
Sheets("Calendrier").Copy after:=Sheets(Sheets.Count)
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
 
With ActiveSheet
   .Name = "Congés " & d
    Sheets("Etat de Congés").Columns("B:M").Copy
    Columns("AM:AX").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End With
ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule _
  .DeleteLines 1, .CountOfLines
End Sub
Cordialement.
 

job75

XLDnaute Barbatruc
Re : Compléter mon code

Bonjour fenec, Papou-net,

Ceci paraît plus simple, à voir :

Code:
Sub copier_onglet()
With Worksheets.Add(after:=Sheets(Sheets.Count))
  .Name = "Congés " & Sheets(1).[C5]
  Sheets("Calendrier").Cells.Copy .[A1]
  .UsedRange = .UsedRange.Value
  Sheets("Etat de Congés").[B:M].Copy .[AM1]
  With Intersect(.[AM:AX], .UsedRange.EntireRow)
    .Value = .Value
  End With
End With
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Compléter mon code

Re,

La macro précédente copie aussi les formats des colonnes B:M.

Si l'on veut juste copier les valeurs :

Code:
Sub copier_onglet1()
With Worksheets.Add(after:=Sheets(Sheets.Count))
  .Name = "Congés " & Sheets(1).[C5]
  Sheets("Calendrier").Cells.Copy .[A1]
  .UsedRange = .UsedRange.Value
  Sheets("Etat de Congés").[B:M].Copy
  .[AM1].PasteSpecial xlPasteValues
  Application.CutCopyMode = 0
  .[A1].Select 'cadrage
End With
End Sub
A+
 

fenec

XLDnaute Impliqué
Re : Compléter mon code

Bonsoir le forum, Papou-net, Job75

Pardonnez moi de la réponse tardive mais je travaillais ce week-end

Papou-net

Merci de ta réponse mais j'avais déjà essayé votre solution mais je rencontre une erreur

Job75

Une fois de plus vous me venez en aide et la rien à dire c'est top.
J'ai testé vos deux solutions:
La 1er ne copie pas toute les valeurs
alors j'ai testé la 2ème
elle me copie bien toute les valeurs sauf le format alors en rajoutant dans votre code une ligne ça correspond à mon attente
j'ai rajouté ceci peut être pas super mais j'apprends "pardonnez mon faible niveau"

Code:
.[AM1].PasteSpecial xlPasteFormats

Je testerais à nouveau demain et vous tiens au courant (la fatigue de mon week -end de nuit me pèse trop

Cordialement,

Philippe.
 

job75

XLDnaute Barbatruc
Re : Compléter mon code

Bonjour fenec,

La 1er ne copie pas toute les valeurs

C'est sans doute parce qu'il y a des formules dans la plage copiée.

Alors pour éviter toute surprise faisons partout du collage spécial :

Code:
Sub copier_onglet()
With Worksheets.Add(after:=Sheets(Sheets.Count))
  .Name = "Congés " & Sheets(1).[C5]
  Sheets("Calendrier").Cells.Copy
  .[A1].PasteSpecial xlPasteValues
  .[A1].PasteSpecial xlPasteFormats
  Sheets("Etat de Congés").[B:M].Copy
  .[AM1].PasteSpecial xlPasteValues
  .[AM1].PasteSpecial xlPasteFormats
  Application.CutCopyMode = 0
  .[A1].Select 'cadrage
End With
End Sub
Edit : mais si dans la feuille "Calendrier" des formules utilisent le nom de la feuille, conserver bien sûr :

Code:
Sheets("Calendrier").Cells.Copy .[A1]
.UsedRange = .UsedRange.Value
A+
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
145
Réponses
5
Affichages
174