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 :

Copie en valeurs de plusieurs feuilles d'un classeur dans un autre classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Août 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut Copie en valeurs de plusieurs feuilles d'un classeur dans un autre classeur
    Bonjour,

    Je bute sur un problème à priori simple: je cherche à copier deux feuilles d'un classeur dans un autre.
    J'aimerai copier les feuilles en valeur et non pas le classeur entier pour éviter de copier aussi dans le nouveau classeur la macro de la première.

    Ainsi j'ai le code suivant qui bloque sur la deuxième feuille avec un message d'erreur "L'indice n'appartient pas à la sélection" et je ne comprends pas où ça coince.

    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
    Private Sub Workbook_open()
    
    'mise à jour l'ouverture
    
        ActiveWorkbook.RefreshAll
        
        Sheets("REGISTRE ISO").Select
        Cells.Select
        Application.CutCopyMode = False
        Selection.Copy
    
        Workbooks.Open Filename:= _
            "R:\Z69\DIM\Registre Isolement\Registre Iso UHCD.xls"
        'Sheets(1).Select
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    
        Windows("TestRegistreExcel UHCD.xlsm").Activate
        Sheets("Tableau de Bord").Select
        Cells.Select
        Application.CutCopyMode = False
        Selection.Copy
    
        Workbooks("Registre Iso UHCD.xls").Activate
        'Sheets(2).Select
        Sheets("Tableau").Range("A1").Select //Message d'erreur à ce niveau-là
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    
        Sheets("Registre").Select
        Range("A1").Select
        ActiveWorkbook.Save
        ActiveWindow.Close
        
        
    End Sub


    Si quelqu'un a une idée..!

    Merci d'avance!


    Livet

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Merci d'utiliser les balises code (bouton #) ça rend le code posté beaucoup plus lisible.

    D'après le message d'erreur, la feuille "Tableau" n'existe pas dans le classeur "Registre Iso UHCD.xls"
    Es-tu sur de l'orthographe exacte du nom du classeur et de la feuille ? un espace que tu aurais oublié par exemple "Tableau "

    PS: les select et activate sont rarement utile en vba, ils ralentissent l'execution du code et sont souvent sources d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Sheets("REGISTRE ISO").Select
     Cells.Select
     Selection.Copy
    s'écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("REGISTRE ISO").cells.Copy
    Du coup l'entièreté du code pourrait s'écrire:
    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.Open Filename:= _
     "R:\Z69\DIM\Registre Isolement\Registre Iso UHCD.xls"
    thisworkbook.Sheets("REGISTRE ISO").cells.Copy
     
     Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
     :=False, Transpose:=False
     
     thisworkbook.Sheets("Tableau de Bord").cells.copy
    Workbooks("Registre Iso UHCD.xls").Sheets("Tableau").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
     :=False, Transpose:=False
     
     Sheets("Registre").Select
     Range("A1").Select
     
     ActiveWindow.Close true
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Août 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Merci pour la réponse!
    (j'ai rajouté les balises code)

    La copie se passe bien mais la feuille est vide dans le classeur "Registre Iso UHCD", comme si la copie apparaissait et disparaissait juste après.

    Et pour la deuxième feuille, j'ai la même erreur. Pourtant j'ai fait un copier-coller du nom de l'onglet dans le code.


    Livet

  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 764
    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 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu peux également utiliser la méthode Copy de l'objet Worksheet
    Exemple de la copie d'une feuille nommée CA du classeur où se trouve le code VBA vers le classeur nommé Recap.xlsx en plaçant la feuille copiée avant la première feuille. Le classeur Recap.xlsx doit être ouvert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim shtSource As Worksheet
     Set shtSource = ThisWorkbook.Worksheets("CA")
     shtSource.Copy before:=Workbooks("Recap.xlsx").Worksheets(1)
    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 à l'essai
    Femme Profil pro
    Inscrit en
    Août 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Merci pour cette réponse.

    En fait, j'ai aussi des liaisons dans mon classeur que je ne peux pas garder dans le nouveau classeur, elles ne marcheront pas sinon. (classeur enregistré sur un disque partagé etc..)

    Du coup je passe par des copier-coller en valeur. Ensuite j'ai une petite macro dans le nouveau classeur pour refaire une mise en forme des données.



    Livet

  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 764
    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 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Même avec liaison cela fonctionne.
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub t()
     Dim shtSource As Worksheet
     Set shtSource = ThisWorkbook.Worksheets("CA")
     With Workbooks("Recap.xlsx") ' Nom du classeur
      shtSource.Copy Before:=.Worksheets(1) ' Copie de la feuille
      ' Conserve les valeurs uniquement
      With .Worksheets(1).Range("A1").CurrentRegion ' Table qui commence en A1
      .Value = .Value
      End With
     End With
    End Sub
    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
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Août 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 33
    Points : 21
    Points
    21
    Par défaut
    Merci!

    Mais j'ai un message d'erreur quand je lance la macro "l'indice n'appartient pas à la sélection".
    Il doit y a voir un souci sur le chemin d'accès...

    Je vais retenter.



    Livet

  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 764
    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 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il faut bien entendu modifier le nom du classeur cible (ici Recap.xlsx) ainsi que la feuille source (ici CA) et dans mon exemple le classeur source est ThisWorkbook (le classeur où se trouve le code VBA)
    Et si la plage de cellules contenue dans la feuille source ne commence pas en cellule A1 (ligne 7 de l'exemple), il y a lieu de rectifier et si le contenu contient des cellules non contiguë il faudrait changer cette ligne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With .Worksheets(1).UsedRange
    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

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

Discussions similaires

  1. [XL-2010] Copier plusieurs feuilles dont celle active vers un autre classeur
    Par Barth1309 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/01/2018, 09h13
  2. Enregister plusieurs feuilles d'un classeur dans un autre classeur
    Par ghazalinadou dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 04/09/2017, 23h38
  3. Copier-coller une feuille d'un classeur dans un autre classeur
    Par Babar09 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/05/2017, 14h26
  4. Réponses: 4
    Dernier message: 17/07/2015, 15h54
  5. Réponses: 10
    Dernier message: 18/02/2015, 16h48

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