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 contenu d'une feuille dans un autre fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 21
    Points
    21
    Par défaut Copier contenu d'une feuille dans un autre fichier
    Bonjour à tous,

    Je me pose quelques questions sur une macro que j'essaye de debugger actuellement.

    En fait le but de celle-ci est de copier le contenu d'un Range() de cellule et de les coller dans un autre fichier. A priori rien de compliqué à cela.

    Cependant, je sais comment le faire d'une feuille à l'autre, comment créer un nouveau fichier et l'activer, comment enregistrer sous un mon demandé, etc.

    J'ai testé une méthode pour copier la feuille entière mais ce n'est pas mon but car celle-ci me copie aussi les macros et je ne veux que le contenu...

    Mais la concaténation de ce savoir ne marche pas...

    --------------------------------------------------------------------------

    Edité 30minutes plus tard...


    Par un heureux hasard, je me suis rappelé que certaines propriétés convenaient mieux que d'autres pour les sélections et donc la réponse m'est apparue...

    Je poste donc le code final pour ceux que cela pourrait intéresser, finalement il s'agit d'une fonction dont presque tout le monde a eu besoin à un moment donné...

    Description : ExportData() est une fonction permettant de copier le contenu d'une page et de le coller dans un nouveau classeur Excel.

    Mots-clés : copier, coller, enregistrer sous, enregistrer, nouveau, fichier, copy, paste, save as, save, saveas, new file.


    Le code est un snippet prêt à l'emploi...

    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
    Option Explicit
     
    Sub ExportData()
    '
    Dim fname As String
        ' crée une nouvelle feuille en proposant le nom à l'utilisateur
        Dim timestamp As String
        timestamp = Format(Now, "yyyymmdd_hhmmss")
     
        fname = InputBox("Nouveau nom de fichier (sans le .xls) :", "Enregistrer sous", "nom_fichier")
     
        ' on teste que le fichier n'existe pas, normalement impossible mais bon :D
        If Dir(fname & "_" & timestamp & ".xls") <> "" Then
            MsgBox ("Un fichier de ce nom existe déjà.")
        Else
            fname = fname & "_" & timestamp & ".xls"
        End If
     
        If fname <> "" Then
        ' on crée un nouveau classeur et on l'enregistre sous le nom fname en ajoutant le timestamp, donc doublon impossible (cf. ci-dessus le test)...
        Dim exc As New Excel.Application
        Dim exl As New Excel.Workbook
            Workbooks.Add
            ActiveWorkbook.SaveAs FileName:=fname, FileFormat:= _
                xlNormal, passWord:="", WriteResPassword:="", ReadOnlyRecommended:=False _
                , CreateBackup:=True
            MsgBox ("Nouveau document enregistré sous " & fname)
            'ActiveWorkbook.Close
        End If
        '
        ' collecte des données, copiage et collage sur le nouveau classeur
        '
        Dim XL01, XL02 As String
        Dim XL1, XL2 As Workbook
     
        Dim i, j, EOF As Long, ColNbr As Byte
        Dim Nbr, Content As String
     
        XL01 = ThisWorkbook.Name
        XL02 = fname
     
        Set XL1 = Workbooks(XL01)
        Set XL2 = Workbooks(XL02)
     
        XL1.Activate
        Sheets("Sheet1").Select
        EOF = Range("B65535").End(xlUp).Row
        Cells().Select
        Selection.Copy
     
        XL2.Activate
        Sheets("Sheet1").Select
        Cells().PasteSpecial (xlPasteAll) ' adaptable en fonction des besoins ( si besoin, se rapporter à la doc de la fonction PasteSpecial() )
     
        ActiveWorkbook.Save ' pour ne pas avoir fait tout le travail pour rien
    '    ActiveWorkbook.Close
        '
        XL1.Activate ' on retourne sur le premier classeur
        Sheets("Sheet1").Select
        Cells(1, 1).Select
        '
        Set XL1 = Nothing
        Set XL2 = Nothing
        '
        Set exc = Nothing
        Set exl = Nothing
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 332
    Points
    34 332
    Par défaut
    bonsoir,
    - tu n'initialise pas ta variable monfichier
    - pour des raisons de lisibilité, mets toutes les déclarations en haut, et pas à la sauvage tout le long de la procédure...
    - évite d'utiliser EOF, c'est spécifique à certains éléments d'Office (recordset, etc.)
    - seule la derniere valeur de ta boucle sera utilisée dans content

    quelques corrections donc avant la prochaine série
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    Merci pour ta réponse.

    Tu as raison, je vais nettoyer un peu le code et faire les déclarations en premier lieu, c'est la définition même d'une décla... normalement.

    Pour le EOF, c'était une réminiscence de mes cours d'algorithmique et ne sachant pas si EOF était utilisé sous Excel, je me suis permis cette liberté.

    Pour le reste, j'ai posté la solution dans le premier message, je ne pensais pas avoir une réponse si rapide donc encore une fois, merci.

Discussions similaires

  1. Copie d'une feuille dans un autre fichier
    Par Monte_Carlo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/03/2012, 13h20
  2. [XL-2003] Copier le contenu d'une feuille dans la feuille d'un autre classeur
    Par Lison Lisette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/12/2010, 15h44
  3. [XL-2003] Copier une feuille dans un autre classeur
    Par mistermail dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/10/2009, 18h06
  4. Réponses: 2
    Dernier message: 15/02/2008, 09h24
  5. [VBA Excel] Copie d'une feuille dans un autre fichier
    Par nattyman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2006, 10h35

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