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 :

Export d une liste de feuilles via une listbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut Export d une liste de feuilles via une listbox
    Bonjour,

    J ai actuellement une Listbox qui recense les noms des différentes feuilles de mon classeur. Il est possible de sélectionner plusieurs valeurs dans cette listebox, le but étant d'exporter les feuilles concernées dans un nouveau document via un bouton "export".

    actuellement, j ai comme code derriere le bouton export:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim a, b, c, i, d as string
     
    a=", "
    c=""""         'caractere apostrophe
     
    For i = 0 To ListBox1.ListCount - 1
    On Error Resume Next
                If save.ListBox1.Selected(i) = True Then
                b = save.ListBox1.List(i)
                d = c & b & c & d
                MsgBox (d)         
                End If
    Next i
    je récupère alors la variable "d" qui normalement doit prendre la forme :
    "onglet1", "onglet3", "ongletx",

    dans le but d utiliser la fonction sheets(array("onglet1", "onglet2", "ongletx", )

    je bloque lorsque j'execute la suite du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Sheets(Array(d)).Select
        Sheets(Array(d)).Copy
    il existe sans doute une méthode + conventionnelle d'exporter une liste de feuilles mais j avoue ne pas avoir beaucoup d'aptitude.

    Merci d avance pour votre aide.
    Ludovic

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Un exemple..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       Sheets(Array("Feuil7", "Feuil6", "Feuil5")).Move Before: _
    =Workbooks("Classeur1").Sheets(5)
    A+
    EDIT:
    Attention, cette macro DOIT être dans un module Bas.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Essayez la démarche suivante

    1) Dans un nouveau classeur, créez plusieurs feuilles
    2) Créez un UserForm1, une ListBox1, un CommandButton1
    3) Dans la fenêtre de code du UserForm, copiez le code suivant


    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
    38
    39
    40
    41
    42
    43
    44
    Private WB As Workbook
     
    Private Sub UserForm_Initialize()
    Dim i&
    Set WB = ThisWorkbook
    ReDim T(1 To WB.Sheets.Count)
    For i& = 1 To UBound(T)
      T(i&) = WB.Sheets(i&).Name
    Next i&
    With ListBox1
      .List = T
      .MultiSelect = fmMultiSelectMulti
    End With
    CommandButton1.Caption = "Export"
    End Sub
     
    Private Sub CommandButton1_Click()
    Dim OldSelect%
    Dim i&
    Dim bool As Boolean
    OldSelect% = WB.ActiveSheet.Index
    With ListBox1
      For i& = 0 To .ListCount - 1
        If .Selected(i&) = True Then
          If Not bool Then
            WB.Sheets(i& + 1).Select True
            bool = True
          Else
            WB.Sheets(i& + 1).Select False
          End If
        End If
      Next i&
    End With
    '--- Copies des feuilles sélectionnées dans un nouveau classeur ---
    Dim NewWB As Workbook
    Set NewWB = Workbooks.Add
    WB.Windows(1).SelectedSheets.Copy after:=NewWB.Sheets(NewWB.Sheets.Count)
    WB.Activate
    WB.Windows(1).SelectedSheets(1).Select
    WB.Sheets(OldSelect%).Select
    Application.Windows.Arrange ArrangeStyle:=xlArrangeStyleHorizontal
    Set WB = Nothing
    Unload Me
    End Sub

    4) Dans un module standard, copiez le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub LaunchUSF()
    UserForm1.Show
    End Sub
    Lancez la macro LaunchUSF, sélectionnez plusieurs feuilles dans la ListBox et cliquez sur le bouton Export.
    Ces feuilles seront copiées dans un nouveau classeur.

    Cordialement.

    PMO
    Patrick Morange

Discussions similaires

  1. [LibreOffice][Base de données] Recuperer une liste de tables et une liste de champs d'une table sur LibreOffice & OpenOffice
    Par gerard.sauvage dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 08/04/2014, 12h35
  2. [Toutes versions] Recopier un tableau d'une autre feuille via une liste déroulante
    Par alex.du.09 dans le forum Excel
    Réponses: 3
    Dernier message: 18/05/2011, 17h10
  3. Sélection de feuilles via une liste cochable
    Par buhrne dans le forum Macros et VBA Excel
    Réponses: 30
    Dernier message: 24/10/2008, 16h27
  4. Réponses: 2
    Dernier message: 26/05/2007, 17h28
  5. [Debutant]Remplacer une liste de valeur par une liste de val
    Par Sebbo dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 31/03/2006, 12h15

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