copier onglet

sancerre75

XLDnaute Nouveau
je souhaiterais copier un onglet dans un autre fichier excel mais je n'arrive pas à le faire. En fait mon fichier source est plein de formule et ce qui m'intéresse ce n'est que les données et le format. Quand je recopie mon onglet, les liaisons des formules sont plus bonnes et des ###### apparaissent sur toutes les lignes. Quelqu'un sait comment faire pour copier un onglet dans ma situation. Merci par avance.
 

Minick

XLDnaute Impliqué
Re : copier onglet

re,

En prenant la macro comme donnee plus haut, il n'y a pas de probleme.
Par contre si tu changes la plage et que tu y inclus les cellules fusionnees
bing dans le mur (cochonnerie de cellules fusionnees, perso j'en utilise jamais a cause de ca entre autre)

EDIT:
Ah ben non je dis des betises pas de problemes...
Par contre il faut enlever le calcul auto le temps de faire la copie sinon le recalcul est
fausse a cause de la position de travail qui depends du nom de l'onglet.

Code:
Option Explicit

Sub MacroMail()
    Dim AccuseReception As Boolean
    Dim Sujet As String
    Dim ShtSrc As Worksheet, ShtTmp As Worksheet
    Dim Ctrl As Shape
    
    ' On memorise la feuille active pour plus tard
    Set ShtSrc = ActiveSheet
    
    [B][COLOR=Red]Application.Calculation = xlCalculationManual[/COLOR][/B]
        ' on copie la feuille source (donc la feuille active) dans une nouvelle feuille en fin de fichier
        ShtSrc.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

        ' on memorise la feuille temporaire (plus facile pour la manipuler ensuite)
        Set ShtTmp = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

        ' on copie/colle valeurs la plage qui nous interesse dans la feuille temporaire
        With ShtTmp.Range("A1:AA5000")
            .Copy
            .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        End With
    [COLOR=Red][B]Application.Calculation = xlCalculationAutomatic[/B][/COLOR]
    
    AccuseReception = True
    Sujet = "Demande de communication de boîte archives auprès ADLA"
    
    'Copie de la feuille temporaire dans un nouveau classeur
    ShtTmp.Copy
    'Eventuellement on renomme la feuille pour eviter le  (2) en fin de nom d'onglet
    ActiveSheet.Name = ShtSrc.Name
    
    'Suppresion des boutons de la feuille temporaire
    For Each Ctrl In ActiveSheet.Shapes
        If Ctrl.FormControlType = xlButtonControl Then
            Ctrl.Delete
        End If
    Next Ctrl
    
    ' envoi du mail et fermeture du classeur nouvellement cree (sans l'enregistrer)
    ActiveWorkbook.SendMail "", Sujet, AccuseReception
    ActiveWorkbook.Close False
    
    'suppression de la feuille temporaire (on desactive, au passage, les messages d'alerte pour ne pas a avoir a confirmer la suppression)
    Application.DisplayAlerts = False
        ShtTmp.Delete
    Application.DisplayAlerts = True
    'on reactive la feuille source
    ShtSrc.Activate
    
    'on fait un peu de menage dans la memoire
    Set ShtTmp = Nothing
    Set ShtSrc = Nothing
End Sub

++
Minick
 
Dernière édition:

Minick

XLDnaute Impliqué
Re : copier onglet

Ok, alors ca devrait etre bon

Code:
Option Explicit

Sub MacroMail()
    Dim AccuseReception As Boolean
    Dim Sujet As String
    Dim WrkDst As Workbook
    Dim ShtOrigine As Worksheet, ShtSrc As Worksheet, ShtTmp As Worksheet
    Dim Ctrl As Shape
    
    'pour eviter l'effet stroboscopique on fige l'affichage
    Application.ScreenUpdating = False
    
        'Memorisation de la feuille d'origine
        Set ShtOrigine = ActiveSheet
        
        'On boucle sur toutes les feuilles du classeur
        For Each ShtSrc In ThisWorkbook.Sheets
            'Si le nom de la feuille contient "bilan-"
            If Left(LCase(ShtSrc.Name), 6) = "bilan-" Then
                
                Application.Calculation = xlCalculationManual
                    ' on copie la feuille source dans une nouvelle feuille en fin de fichier
                    ShtSrc.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
            
                    ' on memorise la feuille temporaire (plus facile pour la manipuler ensuite)
                    Set ShtTmp = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
            
                    ' on copie/colle valeurs la plage qui nous interesse dans la feuille temporaire
                    With ShtTmp.Range("A1:AA5000")
                        .Copy
                        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
                    End With
                Application.Calculation = xlCalculationAutomatic
                
                ' si le classeur des destination n'est pas cree
                If WrkDst Is Nothing Then
                    'Copie de la feuille temporaire dans un nouveau classeur
                    ShtTmp.Copy
                    ' memorisation du classeur destination
                    Set WrkDst = Workbooks(ActiveSheet.Parent.Name)
                Else
                     'sinon 
                     'Copie de la feuille temporaire dans le classeur destination
                    ShtTmp.Copy after:=WrkDst.Sheets(WrkDst.Sheets.Count)
                End If

                'Eventuellement on renomme la feuille pour eviter le  (2) en fin de nom d'onglet
                ActiveSheet.Name = ShtSrc.Name
                
                'Suppresion des boutons de la feuille temporaire
                For Each Ctrl In ActiveSheet.Shapes
                    If Ctrl.FormControlType = xlButtonControl Then
                        Ctrl.Delete
                    End If
                Next Ctrl
        
                'suppression de la feuille temporaire (on desactive, au passage, les messages d'alerte pour ne pas a avoir a confirmer la suppression)
                Application.DisplayAlerts = False
                    ShtTmp.Delete
                Application.DisplayAlerts = True
            End If
        Next ShtSrc
        
        AccuseReception = True
        Sujet = "Demande de communication de boîte archives auprès ADLA"
    
        ' envoi du mail et fermeture du classeur destination (sans l'enregistrer)
        WrkDst.SendMail "", Sujet, AccuseReception
        WrkDst.Close False
    
        'on reactive la feuille d'origine
        ShtOrigine.Activate
    
        'on fait un peu de menage dans la memoire
        Set ShtOrigine = Nothing
        Set ShtTmp = Nothing
        Set ShtSrc = Nothing
        Set WrkDst = Nothing
    
    'on retablie l'affichage
    Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Brigitte

XLDnaute Barbatruc
Re : copier onglet

Oui mais... tu séééééééé c'qu'on dit à ch'nord ?


Les gens du ch'nord
zont dans le coeur
le bleu qui minque
à leur décor.....

Alors hein !

Tins en cadeau : Ce lien n'existe plus

Va voir là... tu devrais rire.
 

Discussions similaires

Réponses
4
Affichages
316

Statistiques des forums

Discussions
312 389
Messages
2 087 903
Membres
103 676
dernier inscrit
Haiti