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 un onglet caché et sélectionner le nouvel onglet [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 100
    Par défaut Copier un onglet caché et sélectionner le nouvel onglet
    Bonjour
    J'espère que vous allez tous bien en cette période particulière.

    Petite question du jour :-)

    J'ai un onglet caché qui me sert de base pour tout mon tableau. Cet onglet je dois l'afficher, le copier, puis le refermer. Jusque là c'est simple !

    J'ai tester la macro suivant, seulement il me manque un élément de base. En fin de code le nom du fichier est copié est Sheets("Fichier Type (2)").Select, ce qui implique qu'à chaque fois que je souhaite refaire le processus, la macro bug au niveau du nom du fichier.
    Je m'éparpille un peu et j'ai besoin de vos lumières pour pouvoir trouver un code de type Sheets("ActiveWindow").Select. Je m'y pers un peu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub CopierOnglet()
     
    ' Copier onglet
        Sheets("Table des matières").Select
        Sheets("Fichier Type").Visible = True
        Sheets("Fichier Type").Select
        Sheets("Fichier Type").Copy After:=Sheets(4)
        Sheets("Fichier Type").Select
        ActiveWindow.SelectedSheets.Visible = False
        Sheets("Fichier Type (2)").Select
        Range("A10").Select
    End Sub

    Je vous remercie tout pour votre aide et vous souhaite une agréable journée

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Les méthodes Select, Activate, Etc. sont à proscrire des codes VBA sauf rares exceptions. C'est parfaitement inutile et cela ralentit l'exécution du programme.

    Voici une procédure qui modifie la propriété Visible de la feuille à copier afin de la rendre Visible, copie la feuille dans un nouveau classeur et rend à nouveau invisible la feuille

    Dans ce code, j'utilise le CodeName de la feuille (voir éventuellement ce billet VBA – CodeName d’une feuille Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub t()
      Dim vis As Integer
      With shtData
       vis = .Visible
      .Visible = xlSheetVisible
      .Copy
      .Visible = vis
      End With
    End Sub
    Si vous ne souhaitez pas avoir l'effet de "flash", utilisez l'instruction suivante Application.ScreenUpdating = False
    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

  3. #3
    Membre confirmé
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 100
    Par défaut
    Bonjour et merci Philippe,
    J'ai regardé la feuille sur les codes names. Très intéressant. J'ai aussi rajouté dans mon code l'instruction suivante Application.ScreenUpdating = False[/QUOTE]. Je ne suis pas une pro de la macro

    J'ai testé votre macro et cela ne fonctionne pas. Il affiche un bug sur le code Peut être me suis-je mal fait comprendre dans ma description. Cette macro va être utilisée de nombreuses fois afin de copier selon l'usage plusieurs fois le "fichier type". Il est donc impératif que mon code ne reboucle pas sur un onglet qui aura été renommé.

    Faut-il incorporer votre code une fois le bug solutionné dans mon code comme par exemple :

    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
    Sub CopierOnglet()
     
    'Bloquer l'écran pour executer la macro
            Application.ScreenUpdating = False
     
    Dim vis As Integer
     
    ' Copier onglet
        Sheets("Table des matières").Select
        Sheets("Fichier Type").Visible = True
        Sheets("Fichier Type").Select
        Sheets("Fichier Type").Copy After:=Sheets(4)
        Sheets("Fichier Type").Select
        ActiveWindow.SelectedSheets.Visible = False
     
      With shtData
       vis = .Visible
      .Visible = xlSheetVisible
      .Copy
      .Visible = vis
      End With
     
        Range("A10").Select
     
        'Libérer l'écran pour l'utilisateur
            Application.ScreenUpdating = True
    End Sub
    Merci pour votre aide

  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
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je teste toujours les codes que je publie et je peux vous assurer qu'il fonctionne avec la copie d'une feuille dont le CodeName est shtData et qui est présente dans le classeur où se trouve le code VBA
    Ce code doit remplacer le vôtre en ce qui concerne la copie d'une feuille. Il y a donc lieu de vérifier que votre procédure et la feuille à copier soit dans le même classeur ET que la valeur de la propriété CodeName de cette feuille est bien shtData

    Si vous ne souhaitez pas utiliser le CodeName, il suffit de remplacer la ligne With shtData par ThisWorkbook.Worksheets("Nom de la feuille")
    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 confirmé
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Décembre 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 100
    Par défaut
    Bonjour,
    J'ai beau testé, je n'y arrive pas. Je pense que je ne comprends pas tout
    Je me suis permise de vous joindre le fichier afin de me dire ce qui ne fonctionne pas ? La macro est dans le module 2
    Merci à vous Philippe
    Fichiers attachés Fichiers attachés

  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
    13 184
    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 : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ouvre pas les fichiers joints sauf si après de longs échanges nous ne nous en sortons pas, ce qui est tout de même très rare.

    Le problème est tellement simple que je n'en vois pas la nécessité.
    En revanche, vous trouverez un classeur exemple ci-joint et si vous le souhaitez vous pouvez y jeter un coup d’œil mais tout est expliqué ici

    Exemple avec un classeur contenant deux feuilles nommées respectivement [Modèle] (shtTemplate) et [Accueil] (shtHome). Ce qui est entre parenthèses est le CodeName des feuilles

    La feuille shtTemplate est cachée (pour l'instant simplement (xlsheetHidden) mais elle peut être réellement cachée (xlSheetVerHidden), c'est totalement transparent pour le code
    Elle contient un tableau structuré vide et prêt à l'encodage avec une cellule nommée TauxTva de portée feuille (cette cellule sert à calculer la tva dans les cellules de l'une ds colonnes du tableau) et un grand titre Mon Modèle

    La feuille shtHome contient une cellule nommée pNewName qui contient le nom à donner à la feuille (shtTemplate) une fois copiée dans un nouveau classeur, actuellement Nouvelle et un bouton ActiveX qui lance la procédure de copie de la feuille "modèle" vers un nouveau classeur.
    (voir illustration ci-dessous)

    Nom : Copy Sheet to New Workbook.png
Affichages : 143
Taille : 6,3 Ko


    Code de la procédure événementielle du bouton ActiveX
    Cette procédure se trouve dans le module de la feuille shtHome
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cmdRun_Click()
      Dim NewName As String
      NewName = ThisWorkbook.Names("pNewName").RefersToRange.Value
      mMain.CopyTemplate NewName
    End Sub
    Code de la procédure de copie du modèle vers un nouveau classeur
    Ce code se trouve dans un module standard nommé mMain
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub CopyTemplate(NewName As String)
      ' Arguments
      '   NewName  Nouveau nom à donner à la feuille
      '
      Dim vis As Integer
      '
      With shtTemplate
       vis = .Visible
      .Visible = xlSheetVisible
      .Copy
      .Visible = vis
      End With
      ActiveSheet.Name = NewName
    End Sub

    Le classeur ayant servi d'exemple
    Copy Sheet To NewWorkBook.xlsm

    [EDIT]
    Attention : Dans la procédure nommée CopyTemplate, je n'ai pas prévu de gérer l'erreur au moment du renommage de la feuille nouvellement créée (caractères non autorisés ou chaîne vide).
    La procédure ci-dessous le fait. En cas d'erreur la feuille conserve son nom d'origine à savoir Template
    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
    Sub CopyTemplate(NewName As String)
      ' Arguments
      '   NewName  Nouveau nom à donner à la feuille
      '
      Dim vis As Integer
      '
      With shtTemplate
       vis = .Visible: .Visible = xlSheetVisible: .Copy: .Visible = vis
      End With
      With ActiveSheet
       On Error Resume Next
      .Name = NewName
       On Error GoTo 0
      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

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 22/12/2016, 11h15
  2. [XL-2007] Copier Onglet complet avec mise en forme
    Par Cissou69 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/03/2013, 16h10
  3. [XL-2003] Copier Coller et Renommer Graphique
    Par Tintou dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/03/2010, 10h20
  4. [XL-2002] copier onglet dans un autre onglet
    Par patou41000 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/04/2009, 21h58
  5. copier onglets dans nouveau classeur
    Par hlander dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 13/02/2009, 11h29

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