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 :

Générer un classeur par onglet avec un copier/coller spécial valeur [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mars 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mars 2017
    Messages : 12
    Par défaut Générer un classeur par onglet avec un copier/coller spécial valeur
    Bonjour

    Ma problématique est la suivante :

    J'ai un tableau croisé dynamique avec un filtre, les options du tableau me permettent de créer un onglet par donnée du filtre.

    Mon but est d'avoir une macro qui génère un nouveau classeur par onglet avec un copier-coller spécial valeur et format et dans l'idéal dans un répertoire particulier.

    Ci-dessous mon code qui permet de générer un classeur par onglet :

    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
    For Each feuille In ActiveWorkbook.Sheets
     
        With ActiveWorkbook
     
            .Title = feuille.Name
     
            .Subject = feuille.Name
     
            .SaveAs Filename:=feuille.Name + ".xlsx"
     
            ActiveWorkbook.Close
     
        End With
     
    Next
    Au-delà ça se complique, et mes essais sont infructueux

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 334
    Par défaut
    Bonjour,

    Une façon d'y arriver:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Copy_Save_Worksheets_As_Workbook()
       Dim wb As Workbook, feuille As Worksheet
       With ActiveWorkbook
          For Each feuille In .Sheets
             Set wb = Workbooks.Add
             .Sheets(feuille.Name).Copy Before:=wb.Sheets(1)
             wb.SaveAs "D:\" & feuille.Name & ".xlsx"         '--- à adapter
             wb.Close
          Next feuille
       End With
    End Sub
    Bonne continuation

  3. #3
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mars 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mars 2017
    Messages : 12
    Par défaut copier/coller spécial valeur
    Bonjour

    En reprenant mon fichier et en regardant la macro, j'ai toutefois un problème de copier/coller spécial valeur qui ne se fait pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       Dim wb As Workbook, feuille As Worksheet
       With ActiveWorkbook
          For Each feuille In .Sheets
             Set wb = Workbooks.Add
             .Sheets(feuille.Name).Copy Before:=wb.Sheets(1)
             wb.SaveAs "c:\SEIT TI\" & feuille.Name & ".xlsx"         
             wb.Close
          Next feuille
       End With
    End Sub
    Je sais bien l'écrire pour un copier/coller dans le même classeur, mais pas dans un classeur différent

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 161
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la copie intégrale va embarquer le format et les valeurs OU les formules si les cellules contiennent des formules

    il reste donc à gommer les formules pour les remplacer par leurs valeurs

    ça se fait assez facilement via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaPlage.Value = MaPlage.Value
    les formules ont laissé la place aux valeurs

  5. #5
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mars 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mars 2017
    Messages : 12
    Par défaut
    Merci

    la c'est une copie a partir de tableaux croisé dynamique

    d'autre part ou est-ce que j'insère ce code dans celui que j'ai écris plus haut ?

    le VBA n'est pas mon point fort (je suis beaucoup plus à l'aise avec les formules d'Excel)

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 161
    Billets dans le blog
    5
    Par défaut
    avant le SaveAs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wb.Sheets(1).UsedRange.Value = wb.Sheets(1).UsedRange.Value

    mais du coup, je ne comprend pas bien, le sujet inital est de faire une copie "Format + Valeurs"
    si ça provient d'un TCD, il n'y a donc pas de formules ... qu'Est-ce qui ne va pas dans la copie intégrale que tu souhaites supprimer ?

  7. #7
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mars 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mars 2017
    Messages : 12
    Par défaut
    bonjour

    ce qui ne va pas c'est que dans chaque fichier excel, il y a la totalité des données du tableau croisé dynamique, et que je veux un fichier par valeur du filtre du tableau croisé dynamique, d'où la solution de faire un copier/coller spécial valeur du TCD.

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 161
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pourquoi ne pas plutôt filtrer la source des données du TCD plutôt que le TCD lui-même, et d'exporter chaque filtrage dans un nouveau classeur ?

    mieux encore, un filtre avancé plutôt que des filtres automatiques
    http://philippetulliez.developpez.co...dvancedfilter/

  9. #9
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mars 2017
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mars 2017
    Messages : 12
    Par défaut
    la nécessité du TCD est de pouvoir mettre en forme les lignes et les colonnes, dans ma base de données j'ai uniquement des lignes de données
    dans le TCD j'ai en ligne les dates et en colonne les rubriques utilisées

    le TCD me permet donc de faire une restitution sous la forme voulue

    le filtre élaboré me permet de filtrer ma BD mais pas de mettre en forme le résultat

    mon souci de VBA est de réaliser un copier/coller spécial valeur (le format est un plus mais pas indispensable)

    je pourrais aussi imaginer que la macro dans un premier temps prend chaque onglet du classeur de la base de données et fait ce copier/coller spécial puis exporte les feuilles, mais là encore cela ne marche pas.

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

    J'ai résolu le problème en faisant le copier/coller spécial valeur avant l'export et ça fonctionne bien

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

Discussions similaires

  1. Générer en auto. des onglets avec plusieurs noms.
    Par Mehdi8793 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/02/2015, 12h51
  2. [XL-2007] Envoyer une feuille d'un classeur par email avec le body du message
    Par scoubi77 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/12/2013, 18h47
  3. Réponses: 1
    Dernier message: 04/10/2013, 14h59
  4. Réponses: 8
    Dernier message: 26/11/2011, 17h14
  5. Possible de générer un jar par package avec maven?
    Par daemon rom dans le forum Maven
    Réponses: 2
    Dernier message: 12/04/2009, 22h24

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