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 :

lier une listbox à des check box


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Par défaut lier une listbox à des check box
    Bonjour,

    Je suis sur un gros projet en vba. Pour celui ci j'utilise les feuilles comme base de donnée c'est à dire que l'utilisateur ne verra que les form et jamais les feuilles du classeurs.

    Pour ceci j'ai besoin de gérer des listbox mais je vous avoue avoir beaucoup de mal a réaliser ce que je veux faire. Au préalable et avant de poster cette nouvelle discutions j'ai fouiller partout sur le net pour trouver des réponses y compris sur le tuto de développez.net. Grace à ces tuto j'ai pu comprendre un peu certains trucs mais je bloque des que ça devient un peu plus technique.

    En gros j'ai un tableau dans la feuille 1 range("A1:F10000") celui ci comporte donc 6 colonnes.
    Dans un userform j'ai une liste box avec à coté plusieurs checkbox qui serviront de filtre automatique pour la colonne "B"

    Donc pour le moment de ce que j'ai pu comprendre voila ce que j'ai pu faire

    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
    Private Sub UserForm_Initialize()
     
    ListBox1.ColumnHeads = True
     
    ListBox1.List() = Sheets("cotes").Range("A1:F20").Value
     
     
    Private Sub CheckBox1_Click()
    Call summarize
    End Sub
    Private Sub CheckBox2_Click()
    Call summarize
    End Sub
     
    Sub summarize()
     
    Dim cell As Range
     
    If CheckBox1.Value = True And CheckBox2.Value = False Then
    Sheets("cotes").Range("$A$1:$F$10000").AutoFilter Field:=2, Criteria1:=Sheets("base de donnée temporaire").Range("O2").Value
    End If
    Next
     
     
    If CheckBox1.Value = False And CheckBox2.Value = False Then
    Sheets("cotes").Range("$A$1:$F$10000").AutoFilter Field:=2
    End If
     
    If CheckBox2.Value = True And CheckBox1.Value = False Then
    Sheets("cotes").Range("$A$1:$F$10000").AutoFilter Field:=2, Criteria1:=Sheets("base de donnée temporaire").Range("O3").Value
    End If
     
    If CheckBox2.Value = True And CheckBox1.Value = True Then
    Sheets("cotes").Range("$A$1:$F$10000").AutoFilter Field:=2, Criteria1:=Sheets("base de donnée temporaire").Range("O2").Value, _
    Operator:=xlOr, Criteria2:=Sheets("base de donnée temporaire").Range("O3").Value
    End If
     
    End Sub
    Voila jusque la rien d’extraordinaire je récupère les en tètes dans ma listbox et j'utilise la méthode add item pour récupérer les données de ma feuille dans la listbox à l'initialisation de mon userform
    Ensuite je joue avec les filtres et l’enregistreur de macro pour pondre un truc qui marche.

    Donc mon problème (au delà de l'aspect esthétique du code et de la futur prise de tète lorsque je devrais prendre en compte 10 checkbox) se situe dans l'affichage de ma listbox.
    En effet j'aimerais que lorsque je click sur la checkbox1 par exemple les données filtrer dans ma feuille 1 s'affiche aussi dans ma listbox. Je n'y arrive pas. Je ne suis pourtant pas à mon premier projet en VBA mais j'avoue avoir toujours réussi à éviter l'utilisation des listbox car je ne suis vraiment vraiment pas à l'aise avec. Il est temps pour moi de franchir une nouvelle étape de mon apprentissage et j'ai toujours beaucoup appris en postant sur ce forum et à l'aide de vos conseils.

    En vous remerciant d'avance pour quelques conseils.

    Cordialement

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Comme c'est écrit dans la Bible : "pardonnez-leurs, car ils ne savent pas ce qu'ils font".

    Je crois fermement à ce que j'ai mis dans ma signature.

    1) Tu dois reproduire avec des macros Excel, des choses que tu obtiendrais beaucoup plus facilement avec des requêtes SQL dans un VRAI SGBD.
    2) Excel a constamment besoin de tout son classeur en mémoire vive pour fonctionner et surtout ne pas planter ton application.
    3) C'est sans compter que les macros peuvent avoir besoin de beaucoup de mémoire vive pour travailler. C'est encore pire avec des tableaux et des mises en formes élaborées.
    4) Plus on s'approche de la limite de la mémoire vive disponible, plus Excel devient lent et plus on frise la catastrophe.
    5) Les protections par mots de passe pour les feuilles et les macros d'Excel ne peuvent pas résister à un individu moindrement décidé de passer outre.

    Mais bon... Il y a peut-être quelques téméraires qui vont quand même sauter dans la piscine...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Tu commence par UserForm_Initialize; ensuite tu imbriqués de sub; mais tu ne t'arrêtes pas là, tu place un Next sens for!

    J'ai bien peur qu'un on error resume Next ne suffise pas pour te sauver la vie!

    Il y a d'autres instruction qui étaient digne d'être tirées au sort, non?

    Un sub ce termine inévitablement par un end sub sens jamais rencontre un autre sub entre le début et la fin!

    For...next; if...then...else...end if

    Recadre ton code avant attendre de l'aide.
    Dernière modification par Invité ; 15/12/2015 à 23h35.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut
    Bonjour,
    J'attire particulièrement ton attention ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub UserForm_Initialize()
     
    ListBox1.ColumnHeads = True
     
    ListBox1.List() = Sheets("cotes").Range("A1:F20").Value
     
     
    Private Sub CheckBox1_Click()
    Call summarize
    End Sub
    Private Sub CheckBox2_Click()
    Call summarize
    End Sub

Discussions similaires

  1. Avoir des check box pour les parametres d'une requete
    Par smalldragoon dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 14/10/2014, 22h16
  2. Lier une liste à des données externes
    Par 2nis dans le forum SharePoint
    Réponses: 3
    Dernier message: 01/06/2008, 20h53
  3. [VBA Excel] - création d'une listbox des jours ouvrés
    Par ancel17 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/04/2008, 16h42
  4. Listbox avec Check Box
    Par jeff91 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/04/2007, 15h32
  5. [WinForms]Rediriger le flux de la console vers une listbox ou text box
    Par NicolasJolet dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 27/03/2007, 03h09

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