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 :

[E-03]Problème rafraîchissement ListBox


Sujet :

Macros et VBA Excel

  1. #1
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut [E-03]Problème rafraîchissement ListBox
    bonjour,
    J'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyListBox.ListFillRange="NomDuRange"
    pour mettre des données dans un ListBox.

    L'affichage du ListBox est mauvais, je dois sélectionner un autre onglet puis revenir sur l'onglet du ListBox pour voir l'affichage correct. Là le contenu du ListBox est tout à fait correct.

    Existerait-il une manière de rafraîchir l'affichage du ListBox autrement qu'en sélectionnant un autre onglet puis de sélectionner l'onglet du ListBox ?

    Merci

  2. #2
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    J'ai trouvé une solution moche.

    J'utilise des API windows pour rafraîchir l'écran.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Declare Function ShowWindow Lib "user32" ( _
                     ByVal hwnd As Long, _
                     ByVal nCmdShow As Long) As Long
     
    Declare Function GetActiveWindow Lib "user32" () As Long
    Et dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim lIsOkay As Long
    lIsOkay = ShowWindow(GetActiveWindow(), 9)
    lIsOkay = ShowWindow(GetActiveWindow(), 3)
    qui minimise puis rétablit l'écran actif.
    C'est moche mais ça redessine correctement mon ListBox.

    J'ai essayé avec l'API
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UpdateWindow(GetActiveWindow())
    mais ça ne marche pas.

    Si quelqu'un a une autre idée je suis preneur

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Par défaut
    Bonjour à tous !

    Est ce que tu pourrais envoyer un fichier exemple !

  4. #4
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Voilà un exemple du fonctionnement.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Par défaut
    Re !

    En fait, tu n'as pas besoin de t'embêter avec les API & Co...
    Voici une solution à mettre sur ta feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        shtReservation.lb_ListStockLoans.ListFillRange = "Donnees"
     
    End Sub
    à chaque changement de valeur, ta list est actualisée. Par la suite, tu peux faire un controle sur l'adresse de la cellule qui a été modifiée pour voir si elle appartient à ta plage de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If intersect(target,"Donnees")=true then
    Voila si tu as d'autres problème n'hésite pas !

    Bonne soirée !

  6. #6
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Merci beaucoup.

    J'essaierai ça Lundi au bureau.

    Bon week-end.


  7. #7
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Bonjour,
    le problème persiste dans la feuille d'origine même avec l'événement Worksheet_Change; je ne peux pas la joindre car elle est trop grosse.


  8. #8
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Par défaut
    Bonjour @ll !

    Ah ?
    Mince... pourant ca fonctionnait sur l'exemple...
    Regarde et dis moi ce qu'il en est...

    @++
    Fichiers attachés Fichiers attachés

  9. #9
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Merci,
    en effet la mise à jour se fait bien mais dans mon gros fichier le ListBox n'est pas redessiné correctement.


  10. #10
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 24
    Par défaut
    Re !

    Oki dans ce cas, il faut que tu mettes le code de mise en forme de ta liste box à la suite !

    Et ca devrait tourner !

    Tiens moi au courant !

  11. #11
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Hello,
    ça ne marche pas non plus.

    Je me demande si ça n'est pas lié au bug de la molette que j'ai aussi : Quand on actionne la molette de la souris après sélection d'une ligne du ListBox, Excel plante.

    Je pense que je dois continuer de creuser du côté Windows.


  12. #12
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    je suis aussi confronté à ce problème de raffraichissement de ListBox.
    Je pense que c'est un bogue interne au composant.

    J'ai essayé des truc du genre "Rapetissage/Agrandissement" des dimensions du composant pour l'obliger à se redessiner... ça ne marche pas toujours, et en tout cas, ce n'est pas une solution élégante.
    J'ai aussi essayé de le rendre invisible, puis visible; de le masquer puis de le démasquer par un composant Label placé dessus. Rien n'y fait. Cela fonctionne des fois, et des fois pas !

    Je cherche une solution pour me passer de ce composant...

    En attendant, je suis ce post, si j'ai une solution, je recontacte...

  13. #13
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Merci rtg57

  14. #14
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    apparemment, l'exécution d'un 'ActiveSheet.Calculate' provoque en plus du recalcul de la feuille, un phénomène de raffraichissement graphique des composants sur la page.
    Du coup, la 'ListBox' se met à jour par rapport à sa liste de données.

    A essayer...

    En espérant que cela résolve votre problème...

  15. #15
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Merci.

    Je pense que c'est vraiment un problème au niveau windows.
    J'ai essayé le Activesheet.Calculate; le contenu du ListBox n'est pas correct a priori, mais quand on fait deux fois ALT+TAB pour changer d'écran windows et revenir sur Excel, le contenu du ListBox est bon.


Discussions similaires

  1. [VBA-E] Problème de ListBox
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2007, 10h42
  2. [VB6] Problème rafraîchissement MSFlexGrid
    Par Dwain dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 10/01/2007, 18h11
  3. [c#]Problème chargement ListBox
    Par Filippo dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/01/2007, 18h30
  4. [ACCESS 2000] Problème de listBox
    Par noemieze dans le forum Access
    Réponses: 3
    Dernier message: 27/06/2006, 08h58
  5. [débutant] Problème de listBox
    Par Anthony17 dans le forum Débuter
    Réponses: 6
    Dernier message: 11/05/2006, 10h05

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