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 :

Problème sur une ListBox (ActiveX) dépendante - .ListFillRange [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    École des Mines
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : École des Mines
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut Problème sur une ListBox (ActiveX) dépendante - .ListFillRange
    Bonjour à tous,


    Me voila coincé lors de la réalisation d'une petite application servant à remplir une base de données.

    J'ai inséré 3 listbox (contrôles ActiveX). Je souhaite les rendre dépendantes l'une par rapport à l'autre (équivaut à la fonction indirect).

    Pour la deuxième listbox, par de problème, elle dépend bien du choix effectué dans la première, et si on clique sur un choix qui ne correspond à aucune liste encore enregistrée, alors la ListBox2 se vide automatiquement .

    Pour la ListBox3, cela fonctionne uniquement si je clique directement sur la bonne valeur du premier coup. Si je veux modifier ma sélection dans la ListBox2, la ListBox3 ne prend pas en compte cette modification .

    Voici les codes que j'ai inscrit :

    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
    Private Sub ListBox1_Click() 'atelier
    atelierconcerne = ListBox1.Value
    With ListBox2
    .ListFillRange = atelierconcerne
    End With
    End Sub
     
    Private Sub ListBox2_Click() 'machine
    machineconcernee = ListBox2.Value
    With ListBox3
    .ListFillRange = machineconcernee
    End With
    End Sub
     
    Private Sub ListBox3_Click()
     
    End Sub
    Ces codes visent à modifier la liste liée à la ListBox.

    Merci par avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Bizarre. Est-ce que tu peux mettre un classeur exemple - sans données confidentielles - en pièce jointe ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour faire ce que vous décrivez, j'utilise des matrices contenant les valeurs que vous pointez avec vos ListFillRange.

    Dans votre cas,vous auriez par exemple une matrice pour les ateliers, une autre pour les machines concernées contenant les informations communes aux 3 ListBox, ou 3 matrices si 2 n'est pas possible.

    Dès lors que les matrices sont chargées, j'utilise les méthodes .AddItem ou .RemoveItem avec des boucles pour insérer ou enlever les enregistrements en croisant les deux matrices en fonction du choix sur ListBox1. Le principe serait le même entre ListBox3 et ListBox2.

    A chaque changement dans ListBox1, les enregistrements dans les deux dernières ListBox sont détruites avec .Clear puis recalculés. Le principe serait le même entre ListBox3 et ListBox2.

    Sans doute aurez-vous une réponse plus en rapport avec votre méthode par ListFillRange.

    Bon courage.

    Cordialement.

  4. #4
    Membre du Club
    Homme Profil pro
    École des Mines
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : École des Mines
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut test
    Bonjour,

    Merci pour vos réponses rapides.
    Eric lorsque vous parlez de matrice vous parlez de plage nommée ?
    Je n'arrive pas a utiliser la fonction clear alors j'ai mis listfillrange=""

    voici le code :

    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
    Private Sub ListBox1_Click() 'nom
    With ListBox2
    .Height = 420
    End With
    End Sub
     
    Private Sub ListBox2_Click() 'atelier
    With ListBox2
    .Height = 420
    End With
    With ListBox3
    ListBox3.ListFillRange = ""
    atelierconcerne = ListBox2.Value
    .ListFillRange = atelierconcerne
    .Height = 420
    End With
    End Sub
     
    Private Sub ListBox3_Click() 'machine
    With ListBox3
    .Height = 420
    End With
    With ListBox4
    ListBox4.ListFillRange = ""
    machineconcernee = ListBox4.Value
    .ListFillRange = machineconcernee
    .Height = 420
    End With
    End Sub
     
    Private Sub ListBox4_Click() 'panne
     
    End Sub
    J'ai ici une première liste pour les noms. la troisième dépend bien de la deuxième, mais pour la quatrième mon code ne fonctionne pas, pourtant c'est le même .

    Second problème, à l'ouverture du classeur -> erreur d'exécution 404 -> débogage...

    Daniel voici le fichier (format 2003) qui me sert à créer la base de mon projet (les données ont été volontairement changées).

    Merci à vous.

    Cordialement.
    Moux71
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Le classeur fonctionne correctement, à l'exception du plantage quand on fait un choix sur Listbox3, ce qui est normal. Sinon, à chaque fois que je change le choix de Listbox2, ListBox3 se met à jour.

    Second problème, à l'ouverture du classeur -> erreur d'exécution 404 -> débogage...
    Je ne constate pas de plantage au démarrage; dans quelle macro ? quelle ligne ?

  6. #6
    Membre du Club
    Homme Profil pro
    École des Mines
    Inscrit en
    Mai 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : École des Mines
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 7
    Par défaut
    Bonsoir,

    Pourquoi le plantage lors de la sélection sur ListBox3 est-il normal alors que j'ai utilisé les mêmes codes que pour la 2 ? C'est ce qui me trotte...


    A l'ouverture c'est Private Sub ListBox1_Click() qui plante. A la ligne ".Height =...".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ListBox1_Click() 'nom
    With ListBox2
    .Height = 420
    End With
    End Sub
    Merci par avance.

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Pourquoi le plantage lors de la sélection sur ListBox3 est-il normal alors que j'ai utilisé les mêmes codes que pour la 2 ? C'est ce qui me trotte...
    L'erreur se produit ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    machineconcernee = ListBox4.Value
    alors que ListBox4 n'est pas initialisée; je pense qu'il faudrait plutôt mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    machineconcernee = ListBox3.Value
    A l'ouverture c'est Private Sub ListBox1_Click() qui plante. A la ligne ".Height =...".
    Oui, mais apparemment, il n'y a pas de raison que ça plante. Est-ce que tu as testé avec le classeur que tu as posté ?

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

Discussions similaires

  1. MVVM - Problème pour Autoscroll sur une ListBox avec du databinding
    Par caramel dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 18/11/2011, 14h29
  2. Débutant SQL, problème sur une jointure censée exclure ??
    Par derfatypik dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/06/2005, 15h55
  3. Problème sur une expression régulière
    Par Verbal-Quint dans le forum Langage
    Réponses: 6
    Dernier message: 12/11/2004, 10h54
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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