[VB6 -> VBA]barre de progression pour plusieurs onglets en vba

alade23 Messages postés 4 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 juillet 2013 - 21 juil. 2013 à 01:06
jordane45 Messages postés 37547 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 juin 2023 - 22 juil. 2013 à 15:53
Bonjour,

Je viens de mettre en place une barre de progression pour l'affichage des données en vba; mon souci est que dès que le le deuxième onglet de excel se rempli, la barre ne progresse plus.
voici mon bout de code:
For ICollec = 1 To eCollectionFichier.Count
If comp = eCollectionFichier.Count Or comp / eCollectionFichier.Count > pcti + 0.01 Then
pcti = comp / eCollectionFichier.Count
Call progression("Patientez", pcti, top_depart)'appel de la barre de progression
End If

au bout de 32000 lignes,les données sont affichées dans les onglets suivants et c'est à ce niveau que la barre ne progresse plus:
voici mon bout de code:

If comp = 32000 Then

Call Feuillesuiv(nb)

comp = 1
nb = nb + 1
End If
comment faire en sorte que la barre continue à progresser dès que les onglets suivants se remplissent.

merci pour votre aide.

8 réponses

jordane45 Messages postés 37547 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 juin 2023 341
21 juil. 2013 à 01:56
Bonjour,

1 - Vous n'êtes pas dans la bonne section du FORUM
en vba

Là, vous avez posté dans : Visual Basic 6 > Système > Exécution


2 - Merci d'utiliser les balises de CODE lorsque vous postez du code !!!
Dim Exemple as string
Exemple ="J'ai mis mon code dans une balise !"
Msgbox(Exemple)



3 - dans votre boucle FOR (celle qui met à jour votre ProgressBar, vous appellez un sub
Call Feuillesuiv(nb) 


Or, dans ce sub, je pense que vous ne mettez pas à jour la progressBar....
Il faut donc faire en sorte que DANS cette SUB vous mettiez également à jour la barre de progression...




Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
alade23 Messages postés 4 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 juillet 2013
21 juil. 2013 à 03:19
Merci pour la remarque,je ne sais pas justement comment mettre à jour ma progressbar.si tu as une idée je suis preneur.
0
jordane45 Messages postés 37547 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 juin 2023 341
21 juil. 2013 à 03:55
Je viens de relire votre code..;
If comp =  32000 Then
  Call Feuillesuiv(nb)
  comp = 1
  nb = nb + 1
End If 


En gros, arrivé à la ligne 3200, vous appelez la sub Feuillesuiv()
Cette sub (dont nous ne savons rien) effectue des opérations puis lorsqu'elle a terminée vous revenez dans votre boucle.
A ce moment la vous remettez COMP à 1 (ce qui doit remettre la barre de progression au début je suppose) puis poursuivez votre code... ce qui en soit ne devrait pas poser de problème.

Je pense que vous devriez mettre un point d'arrêt dans votre bloque IF comp=3200 puis poursuivre l'execution de la macro en mode pas à pas pour essayer de voir les valeurs de vos différentes variables ( comp, pcti, eCollectionFichier.Count ).
Cela vous permettra peut-être de comprendre pourquoi ça ne fonctionne pas.

Au cas où, pour que l'on puisse comprendre, il faudrait aussi nous dire à quoi corresponde les variables de votre sub "progression"
Je pense que le premier paramètre c'est le Titre ou le texte à afficher, le second le pourcentage ( que vous ne multipliez pas par 100 ? ) et le troisième je ne sais pas...

DOnc, si vous ne multiplez pas par 100 votre Pourcentage, le souci vient de là :
Faites l'essai suivant (dans un userform, metter une progressbar et une textbox
puis lancez le code :
Sub test_progressBar()
 Load UserForm1
  UserForm1.Show
 For i  = 1 To 5000
  pourcentage = i / 5000 
  UserForm1.ProgressBar1.Value = pourcentage
 UserForm1.TextBox1 = pourcentage
 Next
End Sub

refaite ensuite le meme test mais en remplaçant la ligne:
pourcentage = i / 5000 

par
pourcentage = i / 5000  * 100 




Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
21 juil. 2013 à 12:59
Bonjour,

juste pour signaler que récemment pour une procédure prenant 48 secondes pour s'exécuter,
rien qu'en supprimant la barre de progression le traitement a été réduit de 30 secondes !
Puis en optimisant le code, j'en ai gagné 16 de plus ...

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 37547 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 juin 2023 341
21 juil. 2013 à 21:02
MarcPL;

en optimisant le code, j'en ai gagné 16 de plus

Heureusement, Sinon où est l'intérêt d'optimiser le code....

rien qu'en supprimant la barre de progression le traitement a été réduit de 30 secondes

C'est....Logique....
Lorsque l'on enlève des étapes dans le code, on gagne forcément du temps.
Le tout est de savoir si vous souhaitiez/pouviez retirer la progressBar.
Parfois, perdre quelques secondes sur un traitement n'est pas gênant, Une progressBar permet de faire patienter l'utilisateur tout en lui indiquant où en est le programme.

A alade23 de décider s'il souhaite accélérer son code en enlevant la progressBar ou non.
En attendant, j'espère avoir répondu à sa question concernant son fonctionnement.



Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
22 juil. 2013 à 08:13
Bonjour,
Ma manière personnelle d'intervenir.
Regarder ce que ferait ceci :
change_tiroir = 7
 For i = 0 To 1000
   MsgBox "tiroir " & (i \ change_tiroir) + 1 & " ===>> " & i Mod change_tiroir + 1
 Next

analyser, comprendre et s'en servir.
(et si pas compris ===>> tant pis mais je n'irai pas plus loin).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
alade23 Messages postés 4 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 22 juillet 2013
22 juil. 2013 à 15:28
Bonjour,
la sub Feuillesuiv() ne contient que les infos sur les intitulés des données à afficher dans les onglets suivants. Voici un bout de code si ça peut t'éclairer.

Sub Feuillesuiv(nb As Integer)

ErrorHandler:
Sheets.Add.name = "Suite" & nb

Set RgDeb = Range("A1")

'Intitulés des champs
RgDeb.Offset(0, COL_FICH_NOM) = "Nom"
RgDeb.Offset(0, COL_FICH_CHEMIN) = "Chemin"
RgDeb.Offset(0, COL_FICH_PROPRIETAIRE) = "Propriétaire"
RgDeb.Offset(0, COL
.............................................................

les variables de la sub progression sont celles dont tu parlais dans ton message; voici un bout du code:

Sub progression(texte_à_afficher As String, pct As Single, Optional t_départ As Single = 0)

Dim pc1 As Single
pc1 = MiniMaxi(pct) 'met le pourcentage entre 0 et 100%
If pc1 >= 1 Then
'100% on rend la barre classique
Application.StatusBar = False
Else
'Gestion de l'affichage du temps
Application.S

le souci ne vient pas de la multiplication par 100;
petite précision ma barre de progression affiche 10 carrés vides au départ;au fur et à mesure que les données s'affichent les carrés se remplissent.au bout de 32000 données c'est a dire le premier onglet la barre se bloque sur 4 carrés pleins; pour résumer.
merci
0
jordane45 Messages postés 37547 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 9 juin 2023 341
22 juil. 2013 à 15:53
Bonjour,

TU N'AS TOUJOURS PAS UTILISE LES BALISES DE CODE !!!!

Enfin bon,
Pour que l'on comprenne bien,
- Votre barre de progression Affiche la progression du traitement de votre boucle FOR.
- A chaque fois que le Nombre de ligne = 3200, le compteur doit repartir à Zéro et vous passez à une nouvelle feuille (Là le compteur doit reprendre).

Que vaut : eCollectionFichier.Count ?
Est-ce une valeur qui est calculée uniquement avant le lancement de la boucle (en tenant compte du nombre de feuilles/lignes à traiter ) ?

Avez-vous essayé de mettre un point d'arrêt dans votre macro pour voir la valeur de vos différentes variables (en mode pas à pas) ?

A quoi sert votre IF ?
If comp = eCollectionFichier.Count Or comp / eCollectionFichier.Count > pcti + 0.01 Then 



Avez-vous essayé sans ce IF ?

Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0