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 plusieurs feuilles dans un autre classeur (xlsm=>xlsx) [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut Copier-coller plusieurs feuilles dans un autre classeur (xlsm=>xlsx)
    Bonjour à tous,

    J'aurai besoin une nouvelle fois de votre aide. Je dispose d'un classeur (type xlsm) contenant 6 feuilles (tableurs et graphiques). Je cherche à exporter plusieurs de ces feuilles vers un nouveau classeur. Le problème est que je n'arrive pas à procéder à la copie de ces feuilles.

    Le code suivant (le plus basique du monde) permet de copier les différentes feuilles, mais :
    - chaque feuille copiée est dans un classeur différent
    - le classeur n'est pas enregistré et le format par défaut est .xls (ce qui pose un problème lors de l'enregistrement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Ws As Worksheet
     
    For Each Ws In ThisWorkbook.Worksheets
        Ws.Copy
    Next Ws
    Afin de forcer la copie dans un même classeur, j'ai apporté les modifications suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Cible As Workbook
    Dim Ws As Worksheet
     
    Set Cible = Application.Workbooks.Add
     
    For Each Ws In ThisWorkbook.Worksheets
        Ws.Copy Before:=Cible.Worksheets("Feuil1")
    Next Ws
    Lorsque j'arrive sur la ligne de commande pour copier-coller la feuille, Excel me donne le magnifique message d'erreur suivant

    "Excel ne parvient pas à insérer les feuilles dans le classeur de destination car il contient moins de lignes et de colonnes que le classeur source. Pour déplacer ou copier les données vers le classeur de destination, vous pouvez les sélectionner, puis utiliser les fonctions Copier-Coller pour les insérer dans les feuilles d'un autre classeur".


    Après quelques recherches sur internet, il semble qu'il y ait un problème de compatibilité dans le format des feuilles (le nouveau classeur étant par défaut au format XL-97-2003 avec un nombre de lignes et de colonnes différents de celui de XL 2007).

    J'ai donc fait la modification suivante pour enregistrer le nouveau classeur au format xlsx :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Cible As Workbook
    Dim Ws As Worksheet
    Dim Chemin As String
     
    Set Cible = Application.Workbooks.Add
     
    Chemin = CurDir & "\Copie.xlsx"
     
    Cible.SaveAs Chemin
     
    For Each Ws In ThisWorkbook.Worksheets
        Ws.Copy Before:=Cible.Worksheets("Feuil1")
    Next Ws
    Et ça ne marche toujours pas ! J'ai le même message d'erreur que précédemment et au même endroit.

    Est-ce qu'il s'agit d'un problème de compatibilité xlsm et xlsx ou est-ce autre chose ?

    Quelqu'un a-t-il un avis ?

    Merci d'avance

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Question bête : pourquoi tu ne fais pas juste un SaveAs sur le premier fichier plutôt que de copier toutes les feuilles ?
    Sinon, pour ma part pour copier une feuille dans un autre classeur, je crée une feuille et je fais plutôt une copie des cellules.
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    La réponse est rapide !

    Question bête : pourquoi tu ne fais pas juste un SaveAs sur le premier fichier plutôt que de copier toutes les feuilles ?
    Effectivement dans le code que j'ai proposé je fais une copie de toutes les feuilles. C'est juste que je n'ai pas encore mis en place le code qui filtre les feuilles à copier ou pas.

    Sinon, pour ma part pour copier une feuille dans un autre classeur, je crée une feuille et je fais plutôt une copie des cellules.
    Ca revient à faire thisworkbook.sheets(1).cells.copy et Workbook("copie.xlsx").sheets(1).paste. Je note.

    Mais quand la feuille à copier est un graphique, comment est-ce que je peux faire ?

  4. #4
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Tu es sous quelle version d'excel ? Si tu es sous 2003, il faut peut-être d'abord sauvegarder le xlsm en xls pour ensuite ne plus avoir de problème de copie. Sinon, il suffit de changer les options du SaveAs pour avoir un format 2007 dès le début.
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Comme j'ai mis dans l'en-tête, je travaille Excel 2007.

    il suffit de changer les options du SaveAs pour avoir un format 2007 dès le début.
    Est-ce qu'il y a moyen d'indiquer ça en vba ? D'autres part, je ne suis pas sûr que ça règlera mon soucis. J'avais expliqué que même en sauvegardant le classeur cible en xlsx, Excel refusait de faire la copie de mes feuilles.

  6. #6
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Il ne suffit pas de mettre une extension ".xlsx" pour que ça sauvegarde au format 2007. Tu as pensé à regarder l'aide sur la fonction SaveAs pour avoir les options ?
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Effectivement, je n'avais pas vu ça.

    J'ai donc ajouté une option dans mon SaveAs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Cible As Workbook
    Dim Ws As Worksheet
    Dim Chemin As String
     
    Set Cible = Application.Workbooks.Add
     
    Chemin = CurDir & "\Copie"
     
    Cible.SaveAs Chemin, xlOpenXMLWorkbook
     
    For Each Ws In ThisWorkbook.Worksheets
        Ws.Copy Before:=Cible.Worksheets("Feuil1")
    Next Ws
    Le classeur créé est au format xlsx. Et là, je suis bluffé car il n'y a que 65536 lignes !! C'est quoi ce délire !

    Je retiens la leçon pour dire que l'extension ne suffit pas à définir le format d'un fichier mais apparemment ce que j'ai fait n'est pas suffisant. Dans les autres options de saveas, il n'y a que des informations sur la sécurité du nouveau classeur, rien d'autres concernant le format.

    Est-ce que tu aurais d'autres idées que je pourrai creuser ?

  8. #8
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Pour ma part, je n'ai pas de 2007 (ou plus) sous la main pour tester, désolé.
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Eurêka !!!!

    Mon problème venait de la création de mon nouveau classeur. En effet, lorsqu'on créé un nouveau classeur, Excel ouvre ce dernier avec le format choisi pour l'enregistrement par défaut. Lorsque je faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Workbooks.Add
    je créais un classeur au format Excel 97-2003, ouvert en mode compatibilité. Par conséquent, la simple sauvegarde en xlsx ne suffisait pas. Il aurait fallu fermer et rouvrir le classeur pour que le mode comptabilité ne soit plus activé.

    La solution est donc la suivante :
    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
    Dim Cible As Workbook
    Dim Ws As Worksheet
    Dim Chemin As String
     
    Application.DefaultSaveFormat = xlOpenXMLWorkbook
     
    Set Cible = Application.Workbooks.Add
     
    Chemin = CurDir & "\Copie"
     
    Cible.SaveAs Chemin, xlOpenXMLWorkbook
     
    For Each Ws In ThisWorkbook.Worksheets
        Ws.Copy Before:=Cible.Worksheets("Feuil1")
    Next Ws
     
    Application.DefaultSaveFormat = xlExcel8
    C'est cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.DefaultSaveFormat = xlOpenXMLWorkbook
    qui modifie le format par défaut des classeurs et qui me permet donc de créer un nouveau classeur directement en format xlsx (sans mode de comptabilité)

    Merci beaucoup ZebreLoup pour le temps que tu m'as consacré !

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

Discussions similaires

  1. Copier coller une feuille dans une autre feuille avec condition
    Par souhail72 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/03/2015, 09h52
  2. [XL-2007] Erreur pour copier plusieurs feuilles dans un autre classeur
    Par manu900 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/02/2012, 09h31
  3. Couper / Coller plusieurs feuilles dans un nouveau classeur
    Par Gamal le Celte dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2008, 14h30
  4. Réponses: 2
    Dernier message: 15/02/2008, 09h24
  5. 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

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