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 :

MACRO : scinder un fichier en plusieurs fichiers (avec nombre d'onglets variable)


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut MACRO : scinder un fichier en plusieurs fichiers (avec nombre d'onglets variable)
    Bonjour,

    J'ai un fichier avec 17 onglets.
    je veux le couper de la manière suivante :
    1er fichier souhaité devra avoir les 3 premiers onglets (1er onglet, 2ème onglet, 3ème onglet)
    2ème fichier souhaité devra avoir les 2 onglets suivants (4ème onglet, 5ème onglet)
    3ème fichier souhaité devra avoir les 2 onglets suivants (6ème onglet, 7ème onglet)
    4ème fichier souhaité devra avoir les 2 onglets suivants (8ème onglet, 9ème onglet)
    5ème fichier souhaité devra avoir les 2 onglets suivants (10ème onglet, 11ème onglet)
    6ème fichier souhaité devra avoir les 2 onglets suivants (12ème onglet, 13ème onglet)
    7ème fichier souhaité devra avoir les 2 onglets suivants (14ème onglet, 15ème onglet)
    8ème fichier souhaité devra avoir les 2 onglets suivants (16ème onglet, 17ème onglet)


    Dans chaque fichier ces couples d'onglets devront toujours s'appeler : "Boîte" pour un onglet et l'autre "Bonbon"
    Qui peut m'aider ?
    car manuellement c'est chronophage
    un grand merciii
    Fichiers attachés Fichiers attachés

  2. #2
    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,

    Presque personne ne veut tenter le diable en ouvrant des fichiers-joints

    Et puis c'est encore plus rapide de le faire à la main que d'attendre qu'un éventuel volontaire ne passe plusieurs heures à écrire une macro. Parce que le but du forum n'est pas de fournir du code gratuit clef-en-main, mais d'aider le demandeur à produire son propre code

    Et si tu veux absolument une macro, l'enregistreur de macros te donne le canevas de procédure dont tu as besoin.

    Un simple clic-droit sur le nom de la feuille, puis Déplacer ou copier…

    Au pire, tu raboutes ta macro enregistrées 7 fois en changeant le nom du classeur. Au mieux tu mets ta macro dans une boucle et tu t'arranges pour mettre le noms des classeurs.

    Nom : copie.png
Affichages : 2171
Taille : 98,2 Ko
    À 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.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Réponse
    Bonjour,

    Je suis nouvelle sur un forum, donc pas habituée aux manières de faire. désolée.

    Alors oui j'ai utilisé mon enregistreur de macro, depuis 15 jours, sauf qu'en utilisant les références relatives, ou pas, ça ne me donne rien…
    Oui j'ai utilisé aussi une petite macro, et la voici...mais elle me coupe les fichiers avec un seul onglet, et là mon cas c'est : 3 onglets, puis 2 onglets, par 2 onglets..

    En parcourant internet, j'avais trouvé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim ws
    Dim newWk As Workbook
     
     For Each ws In Worksheets
     Set newWk = Workbooks.Add(xlWBATWorksheet)
     ws.Copy newWk.Sheets(1)
     'newWk.SaveAs (Thisworkbook.path & "\" & ws.Name & ".xls")
     newWk.SaveAs (ThisWorkbook.Path & "\" & ws.Name & ".xls")
     newWk.Close
     Set newWk = Nothing
     Next ws
     
    End Sub
    Mais ça ne fonctionne pas, comme il le faut, puisque mon cas, c'est 3 onglets, puis 2 onglets, 2 onglets, 2 onglets...etc

    En terme d'effort, puisque je travaille 7 jours sur 7, à 12 heures par jour, alors oui, les macros m'aideraient.
    La fonction "déplacer .. copier" je la pratique.

    Par jour, j'ai à peu près 10 fichiers avec 33 onglets à chaque fois, d'où le besoin d'automatiser au mieux cette tâche - pour éviter les erreurs, et être plus rapide.
    Merci de votre bienveillance,

  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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Par jour, j'ai à peu près 10 fichiers avec 33 onglets à chaque fois, d'où le besoin d'automatiser au mieux cette tâche - pour éviter les erreurs, et être plus rapide.
    Et bien je pense que c'est une excellente motivation pour apprendre la programmation en VBA

    J'ai moi même commencé en 1999 à apprendre le VBA et j'ai consulté et posé des questions dans un forum excel aujourd'hui disparu (MPFE) à raison de 4 à 5 heures par soir et ce pendant 3 mois pour enfin sortir mon application qui m'a permis d'automatiser mes offres commerciales. Je suis passé ainsi de deux heures à 10 minutes pour la rédaction de mon offre.

    Il n'y a pas 36 possibilités soit tu t'y mets soit tu fais appel à un professionnel qui te facturera son travail.

    La première chose à faire, c'est de mettre sur papier ce que tu as à faire et ensuite découper les différentes tâches en petites procédures. Tu verras que tout à coup cela semblera beaucoup plus simple
    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

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour

    Citation Envoyé par Philippe Tulliez Voir le message
    .K.... mettre sur papier ce que tu as à faire et ensuite découper les différentes tâches en petites procédures....


    Je ne saurais trop plussoyer ce qui est dit là

    En observant à ce propos que les questions posées sur ce forum ne seraient, pour le coup, relatives qu'à l'une, parfaitement isolée, des tâches ainsi séparées.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour Jacques,
    En observant à ce propos que les questions posées sur ce forum ne seraient, pour le coup, relatives qu'à l'une, parfaitement isolée, des tâches ainsi séparées
    Oui, c'est ainsi que nous procédions et c'est ainsi que je conçois un forum d'entraide
    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

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut merci pour ces belles lecons
    Si je n'ai pas pris de cours, depuis mon nouveau job, c'est parce que je n'ai qu'un peu de temps pour dormir et pas de place pour autre chose.
    L'aidante que je suis en dehors de mon boulot, part travailler ce dimanche à 7h45, et vous remercie pour ces belles leçons.

    En effet, je vais trouver des services payants, qui seront moins dans le jugement, car le jugement représente aucun intérêt.
    Et si à mon tour, je peux aider sur des fonctions simples, d'excel, je le ferai, sans préjugé, et surtout sans belles leçons de vie, car ce n est pas le lieu.

    Profitez bien de votre Week end, pour blablater de tout et de rien !

  8. #8
    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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En effet, je vais trouver des services payants, qui seront moins dans le jugement, car le jugement représente aucun intérêt.
    Désolé si mes propos ont été mal interprétés mais il n'y a aucun jugement. Seulement un retour d'expérience et une mise au point.

    Et si à mon tour, je peux aider sur des fonctions simples, d'excel, je le ferai, sans préjugé, et surtout sans belles leçons de vie, car ce n est pas le lieu.
    Le nombre de mes interventions; contributions et tutoriels déposés sur ce site et sur mon blog parlent d'eux-même.
    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

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    c'est parce que je n'ai qu'un peu de temps pour dormir et pas de place pour autre chose.
    On ne dirait toutefois pas que cela soit tout-à-fait exact.
    Le métier d'aide-soignante est un métier louable et qui mérite mon respect autant qu le mérite celui de développeur.
    Il est bien de consacrer toute son énergie au métier que l'on choisit.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    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 773
    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 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je vous mets sur une piste
    Voici une instruction permettant de copier plusieurs feuilles dans un nouveau classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(Array("Feuil1", "Feuil2", "feuil3")).Copy
    La fonction Array permet de créer une liste d'éléments, séparés par des virgules.

    A moins de créer autant de lignes qu'il n'y a de groupe de feuilles à copier, ce qui serait un non sens et ne rendrait pas pérenne l'application, on pourrait donc imaginer de copier les mêmes feuilles en utilisant une variable tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub CopySheets2Workbook()
      Dim tblSheet(0 To 2)
      tblSheet(0) = "Feuil1"
      tblSheet(1) = "Feuil2"
      tblSheet(2) = "Feuil3"
      Sheets(tblSheet).Copy
    End Sub
    Ces mêmes instructions sont intéressantes pour la compréhension mais ne sont toujours pas utilisable si le noms des feuilles changent et/ou si le nombre de feuilles augmente.
    Donc il faut construire dynamiquement les tables en leur donnant le nom des feuilles
    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
    Sub T()
      Dim sht As Worksheet
      Dim tbl()            ' table contenant le nom des feuilles à regrouper
      Dim nb As Integer    ' Compteur de groupe de feuilles
      Dim msg As String    ' Chaine contenant le rapport
      For Each sht In ThisWorkbook.Worksheets
       With sht
         ReDim Preserve tbl(nb): tbl(nb) = .Name
          If .Index = 3 Or (.Index > 3 And nb = 1) Then
            msg = msg & vbCrLf & "Index = " & Format(.Index, "00") & ", Les feuilles copiées [" & Join(tbl, ";") & "]"
            ' Ici le code pour copier les feuilles dans un nouveau classeur
            '
            nb = -1
            Erase tbl
          End If
       nb = nb + 1
       End With
      Next
      MsgBox "Résultat " & msg
      Set sht = Nothing
    End Sub
    A lire pour en savoir plus Utiliser les variables tableaux en VBA Excel
    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

  11. #11
    Nouveau Candidat au Club
    Femme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je vous lirai en rentrant à 22h.
    J'ai un job et en plus chaque soir 7 soirs par semaine, à 20h30, je suis aidante (et non aide soignante), c'est à dire : m'occuper de mon aïeul pour le garder a son domicile. Ça veut dire une Trentaine d'heures par semaine pour lui, Week end compris. Ça veut dire, que je suis ficelée, et ne peut pas faire de formation, ou même bouquiner, ou même regarder un film.. bref ! des choses normales.
    donc j'ai eu l'idée de ce forum, sans penser à exploiter qui que ce soit.
    je vous lirai en soirée, merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/02/2017, 00h44
  2. generer un fichier avec nombres aléatoires
    Par ben_tiba_asma dans le forum Débuter
    Réponses: 8
    Dernier message: 20/09/2011, 14h15
  3. Chargement BCP d'un fichier avec nombre de champs variable
    Par GuillermoMagistrale dans le forum Outils
    Réponses: 1
    Dernier message: 22/04/2010, 17h38
  4. AWK : créer fichier avec un nom de variable
    Par DIE dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 27/08/2009, 08h18
  5. Réponses: 1
    Dernier message: 08/07/2009, 17h06

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