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 :

Mise a jour listbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Ingéniérie financière (orienté VBA Excel donc)
    Inscrit en
    Janvier 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Kazakhstan

    Informations professionnelles :
    Activité : Ingéniérie financière (orienté VBA Excel donc)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 37
    Par défaut Mise a jour listbox
    Bonjour à tous,

    J'ai lu cette discussion.
    Je me permets de relancer la question, car je n'arrive pas à y trouver une réponse ;
    Comme Google me dirige vers ce topic, je poste ma question à la suite ça aidera les prochains qui rencontreront ce soucis ;

    Je dois créer un Excel qui permette à un jeune entrepreuneur de créer rapidement ses devis,
    Le fichier sur lequel je travaille est dispo en pj,

    Les seuls pages qui nous intéressent ici sont
    THEMES
    FORMULAIRE

    Cet entrepreneur voudrait pouvoir sélectionner les thèmes (j'ai fais des CheckBox),
    Si un thème est cliqué, je remplis la ListBox correspondante avec les données de la feuille Thème, de façon dynamqieu

    J'aimerais que si cet entrepreneur ajoute une ligne à une colonne de la feuille THEME, cette donnée apparaisse dans la ListBox adéquate, qu'il puisse la sélectionner et remplir ensuite automatoquiement le devis,

    A partir de là j'ai créé des plages nommées dynamiques, par exemple pour Installation c'est :
    Nom du range("Installation"), rentré en français directement dans la fenêtre de propriété du listBox1 : =DECALER('Thèmes'!A2;0;0;NBVAL('thèmes'!A:A)-1;1)

    Ca permet de ne pas prendre l'en-tête, mais récupérer sinon le nombre de lignes et resize en fonction,

    (Déjà là, sur certains ordi de ma fac ça buggait -_- )

    Donc ensuite, là ou j'ai mon soucis c'est en testant : si l'utilisateur rajoute une donnée dans une colonne, le RowSource n'est pas mis à jour,

    Je cherche donc à faire en sorte qu'un clic sur la CheckBox(i) actualise la source de la ListBox(i) (correspondance, exprès, dans les numéros)
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function ActualiserListe(ByVal i As Byte, ByVal j As Byte)
     
    'affectation de la feuille THEMES
    Set wsT = ThisWorkbook.Worksheets("Themes")
     
    With wsT
        'actualise les données contenues dans la liste ListBox(i)
        'colonne correspondante j
        n = .Cells(2, j).End(xlDown).Row
        Objects("listbox" & i).RowSource = .Cells(2, j).Resize(n, 1).Value
    End With
     
    End Function

    Mon soucis, c'est que je ne suis pas dans un formulaire donc je ne peux pas passer par Me.Controles("ListBox" & i),
    Et ce n'est pas non plus Objects("ListBox" & i).RowSource,

    Bref en fait je cherche à quelle collection d'objects appartiennent les ActiveX pour pouvoir interroger de manière "générique", avec un "i" qui sert à désigner la listbox nomée ListBoxi

    Merci d'avance pour votre aide,

    Fichier en pj,

    Normalement j'ai activé l'accès au code,

    Par ailleurs le code dont je parle est dans la feuille Formulaire,
    Et je n'ai pas réussi à faire une function qui prenne en input un num de checkbox et active la listbox adéquate,
    J'ai du passer à contrecoeur par n procédures CheckBoxi_Clic

    Merci pour votre aide et bon lundi !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Femme Profil pro
    Ingéniérie financière (orienté VBA Excel donc)
    Inscrit en
    Janvier 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Kazakhstan

    Informations professionnelles :
    Activité : Ingéniérie financière (orienté VBA Excel donc)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 37
    Par défaut
    Nb : j'ai écumé les sujets comme celui ci (Excel-Developpez aussi),
    Mais ce genre de lignes de fonctionne pas chez moi allez savoir pourquoi

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    If Feuil1.Shapes("Check Box 1").ControlFormat.Value = xlOn Then

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With wsT
        'actualise les données contenues dans la liste ListBox(i)
        'colonne correspondante j
        n = .Cells(Rows.Count, j).End(xlUp).Row
        Worksheets("Formulaire").OLEObjects("listbox" & i).ListFillRange = .Cells(2, j).Resize(n, 1)
     
    End With

    Ca m'a l'air de prendre une bonne tournure cela dit,
    Ne serais-ce pas quelque chose dans ce style, avec des OLEObjects, qu'il me faudrait interroger ?

    Mais là, soit je mets une cellule et ça ne donne rien en ListFillRange dans la fenêtre propriété de la feuille excel après exécution ...
    Soit quand je mets mon range (Cells(2,j).resize(n,1), avec ou sans "value" ça ne fonctionne pas,

    Je dois ne pas bien comprendre comment marche al propriété ListFillRange.
    J'ai plus l'habitude des UserForms, on a la propriété RowSource et ça marche très bien en appliqaunt à cette ppté une plage de données ?!

  3. #3
    Membre averti
    Femme Profil pro
    Ingéniérie financière (orienté VBA Excel donc)
    Inscrit en
    Janvier 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Kazakhstan

    Informations professionnelles :
    Activité : Ingéniérie financière (orienté VBA Excel donc)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 37
    Par défaut
    Ok, donc ma version actuelle est ainsi :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Function ActualiserListe(ByVal i As Byte, ByVal j As Byte)
     
    'affectation de la feuille THEMES
    Set wsT = ThisWorkbook.Worksheets("Thèmes")
     
    With wsT
        'actualise les données contenues dans la liste ListBox(i)
        'colonne correspondante j
        n = .Cells(Rows.Count, j).End(xlUp).Row - 1
        Set rg = .Cells(2, j).Resize(n, 1): Debug.Print "Adresse du range : " & rg.Address(0, 0)
        Worksheets("Formulaire").OLEObjects("listbox" & i).ListFillRange = rg.Address
     
        'Feuil1.Shapes("Check Box 1").ControlFormat.Value = xlOn Then
    End With
    End Function

    J'ai avancé car la boucle sur les CheckBoxes fonctionne
    En revanche je ne comprends pas
    1- pourquoi il faut affecter à ListFillRange une adresse, et pas des valeurs ? Je me renseigne à propos de l'utilisation de cette propriété, qui semble donc bien différente d'une RowSource.
    2- surtout plus embetant, mon DébugPrint marche bien ... Et les plages contiennent des valeurs, qui n'apparaissent ensuite pas sur la feuille dans ListFillRange = ""

    Comment faire ?
    Merci !!

  4. #4
    Membre averti
    Femme Profil pro
    Ingéniérie financière (orienté VBA Excel donc)
    Inscrit en
    Janvier 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Kazakhstan

    Informations professionnelles :
    Activité : Ingéniérie financière (orienté VBA Excel donc)

    Informations forums :
    Inscription : Janvier 2016
    Messages : 37
    Par défaut
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
        Worksheets("Formulaire").OLEObjects("listbox" & i).ListFillRange = "'Thèmes'!" & rg.Address

    Et là, ca marche !!

    Seulement, c'est un peu compliqué et pas très flexible,
    Comment faire pour récupérer dans Address aussi la feuille adéquate ?

    Merci

Discussions similaires

  1. mise a jour d'une listbox en fonction d'une textbox
    Par goredo dans le forum Windows Forms
    Réponses: 35
    Dernier message: 02/03/2010, 12h32
  2. Mise a jour d une listbox
    Par julientalbourdet dans le forum Tkinter
    Réponses: 2
    Dernier message: 23/07/2009, 17h30
  3. [E-00] - Déclenchement mise à jour ListBox
    Par Calimero06 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/03/2009, 09h56
  4. Réponses: 16
    Dernier message: 23/05/2008, 09h04
  5. [VBA-E] Mise a jour listbox
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/01/2007, 16h23

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