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 onglets dans nouveau classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut copier onglets dans nouveau classeur
    Bonjour, n'arrivant pas a déplacer la discussion.....

    Je dispose d'un fichier Excel, comportant plusieurs onglets.

    J'ai créé une Userform avec des cases a cocher qui correspondent au onglet

    case1 nommé page1
    case2 nommé page2
    case3 nommé page3 etc....

    et j'ai un bouton pour valider

    Si je coche 1 et 2 et que je valide, j'aimerais créer un nouveau classeur "destination" avec les deux onglets 1et 2

    Si je coche 2 et 3 et que je valide, j'aimerais créer un nouveau classeur "destination" avec les deux onglets 2 et 3

    Je ne sais pas comment gérer plusieurs classeur a la fois et faire une seule copie

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    Il faut que tu creer un nouveau classeur
    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
    Private Sub CommandButton1_Click()
    If Userform1.CheckBox1.Value = True Then
    Worksheets(1).Copy after:=Workbooks("nom de ton nouveau classeur").Worksheets(1)
    End If
     
    If Userform1.CheckBox2.Value = True Then
    Worksheets(2).Copy after:=Workbooks("nom de ton nouveau classeur").Worksheets(1)
     
     
    If Userform1.CheckBox3.Value = True Then
    Worksheets(3).Copy after:=Workbooks("nom de ton nouveau classeur").Worksheets(1)
    End If
     
     
    If Userform1.CheckBox4.Value = True Then
    Worksheets(4).Copy after:=Workbooks("nom de ton nouveau classeur").Worksheets(1)
    End If
    end sub

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Merci pour ton aide.... avec le code que tu m'as donné j'obtiens l'erreur suivante:

    erreur d'exécution 9
    L'indice n'appartient pas a la selection

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    A quel niveau ta l'erreur?
    il manque un end if au deuxieme if!!!

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    ici

    Worksheets(1).Copy after:=Workbooks("test").Worksheets(1)

    J'avais vu qu'il manquait en end if


    par contre ne faut il pas créer "test" avant

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    si bien sûr
    Il faut creer un classeur test.
    J'avais pas compris que c'était un nouveau classeur

    Workbooks.add

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    comment lui dire que ce nouveau classeur s'appel test

  8. #8
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Lors de l'enregistrement, tu peux lui donner le nom voulu, en spécifiant le chemin et le nom.

    Mais à l'ouverture comme dans .Add, il porte le nom par défaut (Classeur1,2,3,... où il est rendu bref)

  9. #9
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Voici un exemple pour créer un classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub CreerClasseur()
        Dim Nouveau As Workbook
     
        Set Nouveau = Workbooks.Add
     
        Nouveau.SaveAs Filename:="C:\Dossier\NouveauClasseur.xls"
    End Sub
    Il suffit de placer ce bout dans ton code!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    voila mon code :

    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
     
    Dim test As Workbook
     
    Set test = Workbooks.Add
     
    If UserForm1.index.Value = True Then
    Worksheets(1).Copy after:=Workbooks("test").Worksheets(1)
    End If
     
    If UserForm1.MC.Value = True Then
    Worksheets(2).Copy after:=Workbooks("test").Worksheets(1)
    End If
     
    If UserForm1.AMC.Value = True Then
    Worksheets(3).Copy after:=Workbooks("test").Worksheets(1)
    End If
     
     
    If UserForm1.GI.Value = True Then
    Worksheets(4).Copy after:=Workbooks("test").Worksheets(1)
    End If
     
      UserForm1.Hide
     
    End Sub
    et j'ai toujours le même message d'erreur

    Faut il obligatoirement sauvegarder le fichier pour ajouter les onglets dans le nouveau classeur.

  11. #11
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    voici un exemple pour exporter 2 feuilles Sheet1 & Sheet2 vers un nouveau fichier c:\test\test2.xls.

    Les autres feuilles ne sont pas exportées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Sheets(Array("Sheet1", "Sheet2")).Copy
        ActiveWorkbook.SaveAs Filename:= _
            "C:\test\test2 export.xls", FileFormat:= _
            xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
            , CreateBackup:=False
    Tu peux aussi utiliser .Savecopyas, qui a l'avantage de laisser le classeur actif inchangé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Sheets(Array("Sheet1", "Sheet2")).Copy
        ActiveWorkbook.SaveCopyAs Filename:= _
            "C:\test\test2 export.xls"

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    pas mieux, toujours la même erreur

  13. #13
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Re,
    tu t'expliques un peu court car ma boule de cristal est cassée.

    Donc :
    1) montre ton code (tout)
    2) dis dans quel module il est placé
    3) dis à quelle instruction il plante (fais la ressortir)
    4) dis si le code est dans le fichier avec les feuilles à sauver
    5) donne le code et le message d'erreur détaillé..

    NB : mon code marche.... garanti, donc l'erreur est ailleurs.

    LA QUALITE DE LA REPONSE EST DIRECTEMENT PROPORTIONNELLE A AL QUALITE DE LA QUESTION ET DES DETAILS !!!!

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Excuse moi Godzestla, je répondais au message précédent.

    Je vais tester ce que tu m'as transmis

    je reviens vers toi ensuite

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    J'ai pu tester le code, donc en resultat j'arrive a copier un onglet dans un autre classeur, ce qui me dérange c'est de devoir copier ce nouveau classeur dans un répertoire spécifique.

    mais avec ce code
    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
    Private Sub CExporter_Click()
     
     
     
        If UserForm1.index.Value = True Then
            Sheets(Array("Index")).Copy
            ActiveWorkbook.SaveCopyAs Filename:="C:\temp\export.xls"
     
        End If
     
        If UserForm1.MC.Value = True Then
            Sheets(Array("Measurements Chart")).Copy
            ActiveWorkbook.SaveCopyAs Filename:="C:\temp\export.xls"
        End If
     
        UserForm1.Hide
     
    End Sub
    Je n'arrive pas a copier les deux onglets si ils sont tous les deux sélectionnés, j'obtiens ce message d'erreur :
    Erreur d'execution '9'
    L'indice n'appartient pas a la selection

  16. #16
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    ce qui me dérange c'est de devoir copier ce nouveau classeur dans un répertoire spécifique.
    Tu veux quoi ? le même répertoire que le fichier actif ?

    Alors tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           ActiveWorkbook.SaveCopyAs Filename:=Activeworkbook.path & "\export.xls"
    Je n'arrive pas a copier les deux onglets si ils sont tous les deux sélectionnés, j'obtiens ce message d'erreur :
    Erreur d'execution '9'
    L'indice n'appartient pas a la selection
    Montre ton code qui fait cela. Si c'est le code que tu viens de publier, 2 x savecopyas dans le même fichier ne fonctionne évidement pas.

    Explique !

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Concernant le nouveau fichier j'aimerais créer un classeur sans l'enregistrer et laisser l'utilisateur le mettre ou il veut avec le nom adéquate.

    Mais si c'est pas possible ta solution de mettre dans le même répertoire est mieux.

    Je t'ai mis l'ensemble du code, et je pensais bien que 2 x savecopyas posaient pb mais comment faire alors.

  18. #18
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Citation Envoyé par hlander Voir le message
    Concernant le nouveau fichier j'aimerais créer un classeur sans l'enregistrer et laisser l'utilisateur le mettre ou il veut avec le nom adéquate.
    C'est possible mais cela n'a rien à voir avec ce que tu as demandé .

    Code pour un nouveau classeur :
    Pour faire le copy des feuilles, je te laisse via l'enregistreur de macro smuler la copie d'une feuille d'un classeur source vers classeur destination et tu verras ainsi le code a utiliser.

    Je t'ai mis l'ensemble du code, et je pensais bien que 2 x savecopyas posaient pb mais comment faire alors.
    C'est bien ce que je craignais.
    Ton problème est un problème de logique.
    Si je suppose que les 2 sélections que tu me donnes sont les seules, voici une solution valable avec le savecopyas MAIS PAS AVEC TON PRINCIPE DE FICHIER NOUVEAU SAUVE PAR L'UTILISATEUR

    Le premier case gère la double sélection, le 2éme la sélection de index seule et le troisième celle de Measurement seule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Select Case True
            Case UserForm1.Index.Value And UserForm1.MC.Value '2 sel
                Sheets(Array("Index", "Measurements Chart")).Copy
                ActiveWorkbook.SaveCopyAs Filename:=activeworkbook.Path & "\export.xls"
            Case UserForm1.Index.Value 'sel 1
                Sheets("Index").Copy
                ActiveWorkbook.SaveCopyAs Filename:=activeworkbook.Path & "\export.xls"
            Case UserForm1.MC.Value ' sel 2
                Sheets("Measurements Chart").Copy
                ActiveWorkbook.SaveCopyAs Filename:=activeworkbook.Path & "\export.xls"
            Case Else
        End Select

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 36
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    C'est possible mais cela n'a rien à voir avec ce que tu as demandé .

    J'ai essayer avec le code ci-dessous, mais c'est réussite car comment copier dans un classeur non nommé

    Code pour un nouveau classeur :
    Pour faire le copy des feuilles, je te laisse via l'enregistreur de macro smuler la copie d'une feuille d'un classeur source vers classeur destination et tu verras ainsi le code a utiliser.

    Je vais regarder



    C'est bien ce que je craignais.
    Ton problème est un problème de logique.
    Si je suppose que les 2 sélections que tu me donnes sont les seules, voici une solution valable avec le savecopyas MAIS PAS AVEC TON PRINCIPE DE FICHIER NOUVEAU SAUVE PAR L'UTILISATEUR

    Et non justement j'ai près d'une douzaine d'onglets donc difficile de faire comme dessous.


    Le premier case gère la double sélection, le 2éme la sélection de index seule et le troisième celle de Measurement seule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        Select Case True
            Case UserForm1.Index.Value And UserForm1.MC.Value '2 sel
                Sheets(Array("Index", "Measurements Chart")).Copy
                ActiveWorkbook.SaveCopyAs Filename:=activeworkbook.Path & "\export.xls"
            Case UserForm1.Index.Value 'sel 1
                Sheets("Index").Copy
                ActiveWorkbook.SaveCopyAs Filename:=activeworkbook.Path & "\export.xls"
            Case UserForm1.MC.Value ' sel 2
                Sheets("Measurements Chart").Copy
                ActiveWorkbook.SaveCopyAs Filename:=activeworkbook.Path & "\export.xls"
            Case Else
        End Select
    En tout cas merci pour ton aide et le temps que tu me consacres

  20. #20
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Dommage que tu n'as pas expliqué tout cela depuis le début car là, on est parti vers une voie de garage.

    Donc il faut partir sur l'option Workbooks.add et copie des feuilles sur base des sélections par tes boutons.

    Un exemple basé sur tes 2 feuilles . cela ne fonctionnera que si dans ta session excel active tu n'as pas déjà ouvert un autre nouveau fichier (vide).

    Vérifie en créant un nouveau fichier s'il porte bien le nom Book1 car ici j'ai une version English.

    Tu dois juste rajouter ce qui est en gras, après vérif que c'est bien Book1 sinon tu dois adapter.

    le nouveau fichier reste NON SAUVE, comme tu le voulais.

    Allez ouste, maintenant je t'abandonne là. C'est du tout cuit ou presque.

    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
    Workbooks.Add
    If UserForm1.Index.Value = True Then
        Sheets(Array("Index")).Copy Before:=Workbooks("Book1").Sheets(1)
    End If
    
    If UserForm1.MC.Value = True Then
        Sheets(Array("Measurements Chart")).Copy Before:=Workbooks("Book1").Sheets(1)
    End If
    
    '...... mettre ici tous les autres copy
    
    'repasse la main au fichier de départ
    
    ThisWorkbook.Activate

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Copier/coller dans nouveau classeur la ou les feuille(s) sélectionnée avec checkbox
    Par apache84 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/02/2014, 18h19
  2. [XL-2002] Extraction de lignes non contigües pour les copier dans nouveau classeur
    Par JerCaz dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/03/2010, 10h46
  3. copie 6 onglets à la suite dans nouveau classeur
    Par fred792 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/12/2008, 00h22
  4. [E-02] Copier tout un onglet dans un classeur fermé
    Par landi440 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/10/2008, 12h20
  5. Réponses: 4
    Dernier message: 26/07/2007, 22h56

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