IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Copier-Coller des Sheets dans un autre classeur [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Points : 72
    Points
    72
    Par défaut Copier-Coller des Sheets dans un autre classeur
    Bonjour à tous,

    Je souhaiterai copier-coller 4 sheets en direction d'un nouveau classeur, puis par la suite enregistrer en xlsx et fermer ce nouveau classeur. Enfin je souhaiterai continuer à effectuer des opérations sur mon classeur xlsm. (réinitialiser la base de données)

    Voici mon code : (j'ai une erreur sur la ligne en rouge: la méthode Copy de la classe Sheets a échoué)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     'Ouverture d'un nouveau classeur vierge
        ActiveWindow.DisplayWorkbookTabs = True
        
        Dim objWorkbookSource As Workbook, objWorkbookCible As Workbook
     
    Set objWorkbookSource = ThisWorkbook
    Set objWorkbookCible = Workbooks.Add()
    
        objWorkbookSource.Sheets(Array("Rapport", "Rapport Semaine", "Densité", "BDD")).Copy
        objWorkbookSource.Sheets(Array("Rapport", "Rapport Semaine", "Densité", "BDD")).Copy objWorkbookCible 
        
    With objWorkbookCible
        Sheets("Rapport").Activate
        ActiveSheet.Unprotect "protection"
        Sheets("Rapport Semaine").Activate
        ActiveSheet.Unprotect "protection"
        Sheets("BDD").Activate
        ActiveSheet.Unprotect "protection"
    End With
    
    'Enregistrement XLSX puis fermeture du document
    Application.DisplayAlerts = False
    objWorkbookCible.SaveAs Filename:="" & chemin2 & nom & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    objWorkbookCible.Close
    
    'On retourne sur le formulaire original afin de terminer les opérations :
    Windows("Gestion.xlsm").Activate
    Sheets("Carte").Select
    ActiveWindow.DisplayWorkbookTabs = False
    
    'Appel de la fonction mise à zero des captions du sheet "Rapport semaine"
    Miseazero_caption
    
    'On supprime le contenu de la BDD
    Sheets("BDD").Select
    Sheets("BDD").Unprotect Sheets("MDP").Range("G7").Value
    Sheets("BDD").Range("A3:ZZ99999").ClearContents
    Range("A3").Select
    Sheets("BDD").Select
    Sheets("BDD").Protect Sheets("MDP").Range("G7").Value
    
    'Modification de la valeur de la variable de changement de mois
    Sheets("MDP").Unprotect Sheets("MDP").Range("G8").Value
    Sheets("MDP").Range("G5").Value = Month(Date)
    Sheets("MDP").Protect Sheets("MDP").Range("G8").Value
    
    'On revient sur la vue "Carte"
    Sheets("Carte").Activate
    With ActiveWindow
    .DisplayHorizontalScrollBar = False
    .DisplayVerticalScrollBar = False
    End With
    
    MsgBox "Données du mois précédent sauvegardé :" & vbCr & nom & ".pdf" & vbCr & nom & ".xlsx"
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Merci d'avance pour votre aide !

    GK

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 180
    Points : 72
    Points
    72
    Par défaut
    J'y suis arrivé en cherchant un peu partout ^^ (En bleu les lignes que je cherché et là où j'ai eu un peu de mal ! ça peut servir pour quelqu'un d'autre)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     'Copier-coller des sheets en direction de l'autre classeur
        ActiveWindow.DisplayWorkbookTabs = True
        Application.ScreenUpdating = False
        ActiveWorkbook.Sheets(Array("Rapport", "Rapport Semaine", "Densité", "BDD")).Copy
        
        With Windows(2)
            Application.ScreenUpdating = False
            Sheets("Rapport").Activate
            ActiveSheet.Unprotect "protection"
            Sheets("Rapport Semaine").Activate
            ActiveSheet.Unprotect "protection"
            Sheets("Densité").Activate
            ActiveSheet.Unprotect "protection"
            Sheets("BDD").Activate
            ActiveSheet.Unprotect "protection"
            Sheets("Rapport").Activate
            
            'Suppression des boutons inutiles dans le rapport XLSX
            ActiveSheet.Shapes.Range(Array("CommandButton1")).Select
            Selection.Delete
            Sheets("Rapport Semaine").Select
            ActiveSheet.Shapes.Range(Array("CommandButton1")).Select
            Selection.Delete
            ActiveSheet.Shapes.Range(Array("CommandButton2")).Select
            Selection.Delete
            Sheets("Densité").Select
            ActiveSheet.Shapes.Range(Array("CommandButton1")).Select
            Selection.Delete
            ActiveSheet.Shapes.Range(Array("CommandButton2")).Select
            Selection.Delete
            Sheets("BDD").Select
            ActiveSheet.Shapes.Range(Array("CommandButton1")).Select
            Selection.Delete
            ActiveSheet.Shapes.Range(Array("CommandButton2")).Select
            Selection.Delete
            
            'Par défaut on affichera l'onglet "Rapport"
            Sheets("Rapport").Activate
        End With
    
    'Enregistrement XLSX puis fermeture du document
    With Windows(2)
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:="" & chemin2 & nom & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWorkbook.Close
    End With
    
    'On retourne sur le formulaire original afin de terminer les opérations :
    Windows("Gestion.xlsm").Activate
    Application.ScreenUpdating = True
    Sheets("Carte").Select
    Application.ScreenUpdating = False
    ActiveWindow.DisplayWorkbookTabs = False
    
    'Appel de la fonction mise à zero des captions du sheet "Rapport semaine"
    Miseazero_caption
    
    'On supprime le contenu de la BDD
    Sheets("BDD").Select
    Sheets("BDD").Unprotect Sheets("MDP").Range("G7").Value
    Sheets("BDD").Range("A3:ZZ99999").ClearContents
    Range("A3").Select
    Sheets("BDD").Select
    Sheets("BDD").Protect Sheets("MDP").Range("G7").Value
    
    'Modification de la valeur de la variable de changement de mois
    Sheets("MDP").Unprotect Sheets("MDP").Range("G7").Value
    Sheets("MDP").Range("G5").Value = Month(Date)
    Sheets("MDP").Protect Sheets("MDP").Range("G7").Value
    
    'On revient sur la vue "Carte"
    Sheets("Carte").Activate
    With ActiveWindow
    .DisplayHorizontalScrollBar = False
    .DisplayVerticalScrollBar = False
    End With
    Sheets("Carte").Protect Sheets("MDP").Range("G7").Value
    
    MsgBox "Données du mois précédent sauvegardé :" & vbCr & nom & ".pdf" & vbCr & nom & ".xlsx"

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Ce n'est pas (toujours) nécessaire de copier-coller; surtout pour une feuille complète. Ouvre Excel et deux classeurs.

    Puis enregistre et élague une macro avec cela:

    Clic-droit sur le nom de ta feuille
    Clique sur Déplacer et copier
    Choisis l'autre classeur dans le liste déroulante.
    Si tu veux copier tu clique la case

    Arrête l'enregistrement.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 839
    Points : 28 750
    Points
    28 750
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme le fait très justement remarquer Clément, il est parfaitement inutile de passer par toutes ces opérations de Insertion, Copier/Colle et Suppression (s'il s'agit de déplacement) lorsque l'on doit copier ou déplacer une feuille entière.
    Il a parfaitement décrit ce qu'il faut faire manuellement

    Ce qui se résume en VBA par

    Copier une feuille d'un classeur vers un classeur existant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("NomClasseurSource.xlsx").Sheets("NomFeuille").Copy After:=Workbooks("NomClasseurCible.xlsx").Sheets(1)
    Copier une feuille d'un classeur vers un nouveau classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("NomClasseurSource.xlsx").Sheets("NomFeuille").Copy
    Déplacer une feuille d'un classeur vers un classeur existant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("NomClasseurSource.xlsx").Sheets("NomFeuille").Move After:=Workbooks("NomClasseurCible.xlsx").Sheets(1)
    Déplacer une feuille d'un classeur vers un nouveau classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("NomClasseurSource.xlsx").Sheets("Db").Move
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Copier des tableaux dans un autre classeur
    Par NicolasDC dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/11/2015, 16h19
  2. [XL-2007] Copier-coller plusieurs feuilles dans un autre classeur (xlsm=>xlsx)
    Par Cesaror dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/06/2012, 11h55
  3. copier coller plusieurs ongets dans une autre feuille et ranger
    Par herve L76 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/07/2007, 15h41
  4. copier/coller des graphiques dans le presse-papier
    Par legos dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/01/2007, 13h04
  5. [VBA-E] copier une fiche active dans un autre classeur.
    Par Little-Freud dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 15/03/2006, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo