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 :

Mon ListView ne se remet pas à jour en temps réel


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 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut Mon ListView ne se remet pas à jour en temps réel
    Bonjour le forum,


    Voici le contexte de ma problématique:

    - J'ai un formulaire dans lequel se trouve unListView.
    - Ce ListView contient la liste des agents du service.
    - L'utilisateur coche les CheckBoxs des agents qu'il souhaite évaluer.

    Jusqu'ici aucun problème. Cependant, maintenant j'aimerais que:

    - Lorsqu'il clique sur le bouton "Evaluer ces agents", le ListView se vide et se re-rempli avec uniquement les agents qu'il a coché.
    - De là, une boucle se fait sur chacun des agents cochés afin de créer les fiches d'évaluations.
    - Chaque fois qu'un fiche d'évaluation est crée, la fonction appelée pour crée cette fiche, renvoi "Vrai"

    J'aimerais utiliser cette info (La fiche à bien été crée) pour cocher et mettre en vert, en temps réel donc, la ligne correspondant à mon agent dans le listView ...
    Donc si je vous ai perdu, je résume:

    J'essaie de créer une macro qui, visuellement, informe l'utilisateur de l'avancement de la création des fiches d'évaluations... Comme une "To do list', si il y a 5 fiches à créer, chaque fois qu'une est faite, la ligne associée est validée.

    Le truc, c'est que ça fonctionne, mais pas en temps réel ... Quand le code tourne, le ListView est vide. Et quand la macro est finie, le ListView affiche toutes les lignes (les bonnes), cochée et misent en vert.

    Donc comment faire pour que, dès que j'appuie sur le bouton, le ListView se re-remplisse avec ce qui a été coché et que au fur et à mesur de l'avancement, les lignes se cochent et se mettent en vert ?

    Mon code: 1) Vide l'ancien ListView. 2) Le réalimente avec ce qui avait été séléectionné

    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
    '#################### Vide les différents éléments du formulaire.
     
    ListViewAgents.ListItems.Clear 'Vide le ListView de son contenu
     
    '########## Réalimente le formulaire avec uniquement les agents que l'on souhaite évaluer #####
     
    With ListViewAgents
     
                With .ColumnHeaders
                'Supprime les anciens entêtes
                .Clear
                'Ajoute 1 colonne en spécifiant le nom de l'entête
                'et la largeur des colonnes
                .Add , , "Agents", (ListViewAgents.Width)
                End With
     
                OffSet = Tbl.ListColumns("A évaluer").Range.Column - Tbl.ListColumns("Nom").Range.Column
     
            For Each Cell In Tbl.ListColumns("Nom").DataBodyRange
     
                Ligne = Cell.Row - Tbl.DataBodyRange.Row + 1
                What = Cell.Text
                NomComplet = Tbl.ListColumns("Prénom").DataBodyRange.Cells(Ligne, 1) _
                            & " " & Cell.Text
                Set Cell = Tbl.ListColumns("Nom").DataBodyRange.Cells(Ligne, 1).OffSet(0, OffSet)
     
                    If Cell Then
     
                        .ListItems.Add , What, NomComplet
                        .ListItems(What).Checked = False
     
                    End If
            Next Cell
        .View = lvwReport
    End With
    Mon code: Boucle sur les lignes du ListView et appel la fonction de création de fiche de suivi "CreerToutesLesFichesDeSuivi" à chaque itération.

    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
    For Each Cell In Tbl.ListColumns("A évaluer").DataBodyRange
        If Cell Then
     
            Ligne = Cell.Row - Tbl.DataBodyRange.Row + 1
    '##### ATTENTION: Ces deux variables sont publiques, leur utilisation porte sur tout
            Nom = Tbl.ListColumns("Nom").DataBodyRange.Cells(Ligne, 1)
            Prenom = Tbl.ListColumns("Prénom").DataBodyRange.Cells(Ligne, 1)
     
    'Permet de mettre en forme
     
            With ListViewAgents
                If CreerToutesLesFichesDeSuivi Then 'Appel de la fonction de création de fiche d'évaluation
     
            '#### Mise en forme pour informer visuellement l'utilisateur de l'avancement des créations ####
     
                    .ListItems(Nom).Checked = True
                    .ListItems(Nom).ForeColor = RGB(64, 160, 32)
     
                End If
     
            End With
        End If
    Next Cell
    Donc une dernière fois, tous fonctionne, mais pas en temps réel... Quand le code tourne, le ListView est vide. Et quand c'est fini, le ListView est plein avec exactement ce que je souhaite.

    Merci d'avance pour l'aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut DoEvents ?
    Bonjour C.Piette,

    Je ne sais pas si cela peut aider mais j'utilise fréquemment la fonction DoEvents pour ce genre de situations voire Repaint.

    Je ne peux pas essayer à cet instant mais je pense que cela peut résoudre votre problème.

    Me.Repaint va rafraîchir visuellement le formulaire
    DoEvents va laisser la main à l'utilisateur pendant l'exécution du code et va souvent faire apparaître les informations non rafraîchies.

    Cordialement ,

    Quentin

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 156
    Par défaut Re
    Bonjour à toi,


    J'ai essayé Me.Repaint et ça a fonctionné du tonner de dieux du premier coup


    Merci à toi !

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

Discussions similaires

  1. Mon AtomicBoolean ne se met pas à jour
    Par Anduriel dans le forum Android
    Réponses: 0
    Dernier message: 20/05/2012, 18h32
  2. [JavaScript] [FAQ] Mon xhr ne se met pas à jour (problème du cache) sur IE
    Par FremyCompany dans le forum Contribuez
    Réponses: 3
    Dernier message: 07/01/2009, 10h56
  3. .LDB ne se remet pas à jour après déconnection user
    Par electrosat03 dans le forum VBA Access
    Réponses: 12
    Dernier message: 12/06/2008, 17h46
  4. Mise à jour en temps réel de la base de données
    Par Clotilde dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/06/2004, 22h09
  5. [CR 8.5] Objet ole lié (BMP) ne se remet pas à jour .
    Par rodrigue50 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 12/02/2004, 10h43

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