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 :

Sélection de feuilles via une liste cochable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 106
    Par défaut Sélection de feuilles via une liste cochable
    Bonjour tout le monde.

    Voilà mon énigme.
    Je souhaiterais, via une imputbox ou autre, faire apparaitre la liste des feuilles non masquées dans mon classeur afin de sélectionner celles que l'on veut imprimer.

    Ensuite à partir de cette sélectioin lancer un bout de code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sheets(Array("Feuil1", "Feuil2",....)).selected
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    Mais je ne sais pas comment créer un listing cochable de mes feuilles.
    J'ai essayé à partir d'un usf mais mon niveau vba est trop limité et j'étais vite bloqué.

    Help please.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Tu as besoin de la propriété Visible pour trouver quelles feuilles sont visibles.
    Tu dois parcourir ta collection Sheets, et à chaque feuille, si elle est visible, tu rajoute un label et un checkbox (le label servira de texte à coté du checkbox: ce sera le nom de la feuille) dynamiquement dans ton userform.

    Tu auras grandement besoin de cette FAQ:
    http://excel.developpez.com/faq/?pag...laireDynamique

    Bon courage: ça ne sera pas facile du tout, car en plus tu dois programmer un espacement entre chaque "ligne" de ton userform, et aussi le redimensionner automatiquement en fonction du nombre de lignes.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 118
    Par défaut
    Voici un bout de code...

    Mais auparavant, tu dois créer une userform avec 1 Listbox et 2 Commandbutton. Dans les paramètres de la Listbox, il faut choisir pour le paramètre Multiselect l'option 1 - fmMultiSelectMulti

    J'espère que ça t'aidera...

    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
    Private Sub CommandButton1_Click()
     
    For Each ws In Worksheets
        UserForm1.ListBox1.AddItem (ws.Name)
    Next ws
     
    End Sub
     
    Private Sub CommandButton2_Click()
     
    For i = 0 To UserForm1.ListBox1.ListCount - 1
     
        If UserForm1.ListBox1.Selected(i) = True Then
           Sheets(UserForm1.ListBox1.List(i)).Select
           Sheets(UserForm1.ListBox1.List(i)).Activate
           ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="NOM DE L'IMPRIMANTE", Collate:=True
    '       ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
    '        "HP DeskJet 930C/932C/935C on Ne03:", Collate:=True
         End If
    Next i
    End Sub
    Bon courage...

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 106
    Par défaut
    Merci pour ton code, c'est exactement ici que j'en étais arrivé.
    J'ai mon usf avec un listbox contenant l'ensemble de mes feuilles visibles.

    Le problème avec ton code c'est que les feuilles sont imprimées une par une. Or en pied de page j'ai une pagination m'indiquant page/pages. Et du coup avec ce code toutes mes pages ont en pied : 1/1, ce qui ne convient pas.

    Je pensais plus à une selection globale regroupant tous les items selectionnés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sheets(Array(".......")).select
    activewindow.selectedsheets.printout ....

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Essaye déjà d'enregistrer:
    -sélection de plusieurs feuilles (avec la touche Ctrl)
    -et enregistrement

    L'enregistreur de macros est ton ami, et il répondra à la plupart de tes questions.

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 106
    Par défaut
    Justement quand je fais une selection à la souris de mes pages ça va bien, je sais faire, mais là c'est en fonction des items selectionnés dans la listbox.

    Avec ce code je sens que je suis pas loin de la solution mais je tourne autour sans mettre le doigt dessus:

    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 Msg As String, i As Integer
        Msg = ""
        With UserForm1.ListBox1
            For i = 0 To .ListCount - 1
                    If .Selected(i) Then
                    Msg = Msg & Sheets(UserForm1.ListBox1.List(i))
                    End If
            Next i
        End With
     
        MsgBox Msg, , "Les feuilles à imprimer sont...."
        Sheets(Array(Msg)).PrintOut copies:=1, collate:=True
    Unload Me
    Le message box me disant les feuilles à imprimer n'est pas d'une grande utilitée, mais c'est la suite qui m'interesse.

    Qqun a une idée???

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Non tu n'y es pas.

    Ce qu'il faut faire, c'est créer une variable tableau dynamique, tableau que tu agrandis d'une case et complète à chaque fois que tu rencontre une sélection.

    Rajoute donc ceci en début de procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim liste_feuilles() As String, taille_tableau As Integer
    Et en haut du module:
    Pour parcourir ta Listbox, c'est le bon code, mais il faut que tu modifies l'intérieur de ta condition comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    If .Selected(i) Then
            On Error Resume Next
            taille_tableau = UBound(liste_feuilles)
            If Err.Number <> 0 Then
                taille_tableau = 1
                ReDim liste_feuilles(1)
                Err.Clear
            Else
                taille_tableau=taille_tableau + 1
                ReDim Preserve liste_feuilles(taille_tableau)
            End If
            listes_feuilles(taille_tableau) = Sheets(i).Name
            On Error GoTo 0
        End If
    Tu n'auras plus qu'à passer ton tableau liste_feuilles dans ton Printout.

    Vu que je t'ai fait ce code, tu es prié de bien l'assimiler et le comprendre. Il utilise la gestion des tableaux dynamiques et la gestion des erreurs (pour ma part je fais toujours comme ça: c'est bien et ça mange pas de pain).

    Je n'ai rien testé: est-ce que ça marche?

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/07/2012, 13h18
  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. Export d une liste de feuilles via une listbox
    Par truespace dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/12/2009, 17h58
  4. [Requête] Tri via une liste déroulante
    Par Burnout dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/01/2006, 18h16
  5. récupération des données via une liste déroulante
    Par rahan_dave dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h27

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