Mise à jour d'une Color Bar

informatixo

XLDnaute Occasionnel
Et bien à mon tour je réclame un peu d'aide sur une histoire un petit peu bizarre (lol).

J'ai un classeur excel avec 2 feuilles.

La première contient plusieurs colonnes et 1912 lignes, c'est en gros ma base de données.

La seconde me permet d'établir une liste des doublons de la première feuille concernant la colonne "Code article" et la colonne "Désignation".

J'ai donc une procédure qui vérifie les éventuels doublons.

Pour que se soit plus ergonomique, j'ai créé un UserForm avec une barre de progression (c'est un composant supplémentaire qui s'appelle ColorBar, ce n'est pas la traditionnelle ProgressBar bleu mais le principe reste le même) pour que l'utilisateur puisse voir l'état d'avancement et ne crois pas que l'application est plantée.

Lors de l'exécution de ma macro, je mets à jour la barre de progression et en même temps le texte de l'UserForm.

Exemple : quand je suis à 20 %, le Caption de l'UserForm possède "Vérification des doublons (20%)" et la barre de progression affiche 20% et la barre de couleur est avancée à hauteur de 20 %.

Bon jusque là tout est normal !

Mais arrivée à 50 % je rentre dans le traitement d'une boucle For qui parcours les 1912 lignes et là ça coince !

En fait, à chaque tour de boucle, je mets à jour le Caption de l'UserForm comme cité ci-dessus et la valeur de ma ColorBar.

Le problème c'est que la ColorBar ne s'actualise pas visuellement à chaque tour de boucle mais à la fin.

Ce qui a pour conséquence de me créer un décalage !

En fait dès que je dépasse les 50 %, le caption de ma UserForm fonctionne normalement en m'affichant progressivement toutes les valeurs de 50 à 100 % mais la ColorBar reste à 50 % (texte + barre de couleur de la ColorBar) et à la fin elle passe directement à 100 %.

Le plus marrant dans l'histoire c'est que la valeur du Caption de l'UserForm c'est en fait la valeur de la ColorBar. Donc celà me pousse à me dire que cette fameuse barre de progression est bien actualisée en terme de valeur mais visuellement son texte et sa barre de couleur reste à 50 %.

La seule solution que j'ai trouvé c'est de mettre une temporisation d'un millième de secondes et là les 2 (caption de l'UserForm + ColorBar) sont actualisés de manière synchrone.

Mais ça fait un peu bricolo tout ça ! (lol)

Si quelqu'un avait une idée sur ce sujet, ce serait sympathique de m'en faire part.
 

informatixo

XLDnaute Occasionnel
Re : Mise à jour d'une Color Bar

Bonjour Pascal76,

Je te remercie de me donner un coup de main.

Pour répondre à ta question, oui j'ai essayé de mettre NomDeMonUserForm.Repaint mais sans succès car le test est très rapide et j'ai l'impression qu'il n'a pas le temps de mettre à jour mon composant.

Je pense que je vais être obligé de garder mes temporisations car avec ça fonctionne, qu'en penses-tu ?

Il ne doit pas s'en jouer de beaucoup car ma temporisation de la boucle for est d'un milliardième de seconde par boucle !

Mais apparement ça suffit pour laisser le temps au composant de se mettre à jour.

Merci beaucoup
 

myDearFriend!

XLDnaute Barbatruc
Re : Mise à jour d'une Color Bar

Bonsoir informatixo, Pascal76,

Tu peux éventuellement essayer en insérant la fonction DoEvents à l'intérieur de ta boucle :
Code:
[SIZE=2]   [COLOR=silver] For i = 1 To 50000
        ...
        ...[/COLOR]
        [B]DoEvents[/B]
    [COLOR=silver]Next i[/COLOR][/SIZE]
Cordialement,
 

informatixo

XLDnaute Occasionnel
Re : Mise à jour d'une Color Bar

Re et bonsoir à toi myDearFriend!

Moi non plus Pascal76 je n'aime pas trop les temporisations mais bon !

Voilà le code de la fin de ma boucle For :

Code:
 ...

frmVerification.bclVerificationProgression.SetFocus
frmVerification.bclVerificationProgression.Value = 50 + Round(((int_compteur / (int_nombre_lignes - 1)) * 50), 0)
debut = Timer
Do While Timer - debut < 0.000000001
DoEvents
Loop
Next int_compteur
En fait, myDearFriend! c'est que je fais dans ma temporisation comme tu peux le voir, cependant j'apprécie l'aide que tu esayes de m'apporter.

Au début de la procédure il y a :

Dim debut As Single
debut = Timer

sur ton avant dernier post j'ai essayé ce code :

Code:
...

frmVerification.bclVerificationProgression.SetFocus
frmVerification.bclVerificationProgression.Value = 50 + Round(((int_compteur / (int_nombre_lignes - 1)) * 50), 0)
[COLOR=Red]frmVerification.Repaint[/COLOR]
Next int_compteur
Mais il ne fonctionne pas car il ne laisse pas le temps à la barre de progression d'afficher visuellement les modifications (on reste à 50 % quelques temps puis directement à 100 %).

Voilà pour la suite du feuilleton (lol)

Merci à vous 2 et à plus
 

myDearFriend!

XLDnaute Barbatruc
Re : Mise à jour d'une Color Bar

Re,

Tant pis, effectivement...

Cela dit, si je t'ai proposé d'essayer avec DoEvents, c'était justement pour éviter une temporisation... alors si tu l'inclus dans une tempo, je ne vois pas trop l'intérêt de l'essai là... Et si tu essayais sans la temporisation ? Qu'en penses-tu ?

Cordialement,
 

informatixo

XLDnaute Occasionnel
Re : Mise à jour d'une Color Bar

Tu veux dire rien qu'avec un DoEvents seul je suppose? car un DoEvents dans une boucle For reviens à faire une temporisation.

Je viens de tester le DoEvents seul et c'est plus long qu'avec :

Code:
Do While Timer - debut < 0.000000001
DoEvents
Loop
Pourquoi je n'en sais rien puisque c'est censé être la même chose (en effet, en un milliardième de seconde il a le temps que de faire le DoEvents une fois je suppose) mais le résultat est là.

En revanche si j'essaye le :

Code:
For i = 1 to 5000
DoEvents
Next i
C'est plus long, ce qui est normal puisque DoEvents est exécuté plusieurs fois.

C'est vraiment bizarre le Repaint devrait fonctionner mais non ...

Alors là je reste de marbre !

En tout cas merci beaucoup à vous 2 et à plus pour de nouvelles aventures de ce même feuilleton (lol)
 

JYLL

Nous a quitté
Repose en paix
Re : Mise à jour d'une Color Bar

Bonsoir à tous,

Dans mes archives j'ai trouvé ce classeur, peut être pourra t'il vous aider pour trouver la solution à votre problème.

Amicalement

Jean-Yves
 

Pièces jointes

  • ProgressBarControl.zip
    27 KB · Affichages: 42
  • ProgressBarControl.zip
    27 KB · Affichages: 40
  • ProgressBarControl.zip
    27 KB · Affichages: 39

Statistiques des forums

Discussions
298 015
Messages
1 965 153
Membres
200 864
dernier inscrit
b.sami