OVH Cloud OVH Cloud

Barre de progression syscmd

14 réponses
Avatar
Guy FALESSE
Bonjour à tous,

J'ai parcouru les nombreuses pages parlant de ce sujet, mais je n'ai rien vu
sur mon problème.
On parle toujours du nbre d'enregistrements connus, mais quand on ne connaît
à l'avance ce nombre comment peut-on faire défiler cette barre de
progression, je vous livre ici mune partie de code:

Sub LPListeDirectory(pPath As String, pNomCD As String)
Dim MyPath As String
Dim MyName As String
Dim iNiveau As Integer, Uncompteur As Integer
Dim chMsg As String, NbreFonc As Integer, ValeurRetournée As Variant
chMsg = "Chargement des fichiers"
NbreFonc = 100
ValeurRetournée = SysCmd(acSysCmdInitMeter, chMsg, 100)
Uncompteur = 0
iNiveau = 0
MyPath = IIf(Right(pPath, 1) <> "\", pPath & "\", pPath)
MyName = LPSynchronise(MyPath, 0) ' Extrait la première entrée.
Do While MyName <> ""
If MyName <> "." And MyName <> ".." Then
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory
Then
LPEnregistrePath MyPath & MyName, pNomCD
LPListeDirectory MyPath & MyName, pNomCD
Else
LPEnregistreFile MyPath, MyName
End If
End If
iNiveau = iNiveau + 1
MyName = LPSynchronise(MyPath, iNiveau) ' Extrait l'entrée
suivante.
Uncompteur = Uncompteur + 1
ValeurRetournée = SysCmd(acSysCmdUpdateMeter, Uncompteur)
Loop
'ValeurRetournée = SysCmd(acSysCmdUpdateMeter, UnCompteur) ' ici,
j'ai une erreur:appek de fonction illégale?
Set maBD = Nothing
Set rstRep = Nothing
ValeurRetournée = SysCmd(acSysCmdRemoveMeter)
End Sub


J'ai bien une barre qui s'affiche avec chargement de fichiers, mais elle
reste figée.
Comment pourrait-on bien faire?
D'avance merci à tous.

Guy FALESSE

10 réponses

1 2
Avatar
Anor
Bonjour,

Si tu ne connais pas le nombre de boucles qu'il va y avoir, alors
tu peux réinitialiser la barre dès qu'elle arrive à 100 :

une autre méthode :

Sub cpteur()
Dim No As Integer
Dim Total as Integer
No = 0
NbTotal = 100
SysCmd acSysCmdInitMeter, "Traitement en cours ", NbTotal
Do While ta condition à remplir
SysCmd acSysCmdUpdateMeter, No
No = No + 1
If No > NbTotal Then
SysCmd acSysCmdInitMeter, "Traitement en cours ", NbTotal
No = 0
End If
Loop
SysCmd acSysCmdClearStatus
End Sub

Si ça va trop vite, tu augmentes la valeur de Total pour ralentir la progression.


--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Guy FALESSE wrote:
| Bonjour à tous,
|
| J'ai parcouru les nombreuses pages parlant de ce sujet, mais je n'ai
| rien vu sur mon problème.
| On parle toujours du nbre d'enregistrements connus, mais quand on ne
| connaît à l'avance ce nombre comment peut-on faire défiler cette
| barre de progression, je vous livre ici mune partie de code:
|
| Sub LPListeDirectory(pPath As String, pNomCD As String)
| Dim MyPath As String
| Dim MyName As String
| Dim iNiveau As Integer, Uncompteur As Integer
| Dim chMsg As String, NbreFonc As Integer, ValeurRetournée As Variant
| chMsg = "Chargement des fichiers"
| NbreFonc = 100
| ValeurRetournée = SysCmd(acSysCmdInitMeter, chMsg, 100)
| Uncompteur = 0
| iNiveau = 0
| MyPath = IIf(Right(pPath, 1) <> "", pPath & "", pPath)
| MyName = LPSynchronise(MyPath, 0) ' Extrait la première entrée.
| Do While MyName <> ""
| If MyName <> "." And MyName <> ".." Then
| If (GetAttr(MyPath & MyName) And vbDirectory) | vbDirectory Then
| LPEnregistrePath MyPath & MyName, pNomCD
| LPListeDirectory MyPath & MyName, pNomCD
| Else
| LPEnregistreFile MyPath, MyName
| End If
| End If
| iNiveau = iNiveau + 1
| MyName = LPSynchronise(MyPath, iNiveau) ' Extrait l'entrée
| suivante.
| Uncompteur = Uncompteur + 1
| ValeurRetournée = SysCmd(acSysCmdUpdateMeter, Uncompteur)
| Loop
| 'ValeurRetournée = SysCmd(acSysCmdUpdateMeter, UnCompteur) '
| ici, j'ai une erreur:appek de fonction illégale?
| Set maBD = Nothing
| Set rstRep = Nothing
| ValeurRetournée = SysCmd(acSysCmdRemoveMeter)
| End Sub
|
|
| J'ai bien une barre qui s'affiche avec chargement de fichiers, mais
| elle reste figée.
| Comment pourrait-on bien faire?
| D'avance merci à tous.
|
| Guy FALESSE
Avatar
Guy FALESSE
Salut Anor,

Merci beaucoup, pour ta réponse, je vais tester cela tout à l'heure et te
tiens au courant.
@+

Guy FALESSE


"Anor" <http://memoaccess.free.fr/anor/email.htm> a écrit dans le message de
news:
Bonjour,

Si tu ne connais pas le nombre de boucles qu'il va y avoir, alors
tu peux réinitialiser la barre dès qu'elle arrive à 100 :

une autre méthode :

Sub cpteur()
Dim No As Integer
Dim Total as Integer
No = 0
NbTotal = 100
SysCmd acSysCmdInitMeter, "Traitement en cours ", NbTotal
Do While ta condition à remplir
SysCmd acSysCmdUpdateMeter, No
No = No + 1
If No > NbTotal Then
SysCmd acSysCmdInitMeter, "Traitement en cours ", NbTotal
No = 0
End If
Loop
SysCmd acSysCmdClearStatus
End Sub

Si ça va trop vite, tu augmentes la valeur de Total pour ralentir la
progression.



--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Guy FALESSE wrote:
| Bonjour à tous,
|
| J'ai parcouru les nombreuses pages parlant de ce sujet, mais je n'ai
| rien vu sur mon problème.
| On parle toujours du nbre d'enregistrements connus, mais quand on ne
| connaît à l'avance ce nombre comment peut-on faire défiler cette
| barre de progression, je vous livre ici mune partie de code:
|
| Sub LPListeDirectory(pPath As String, pNomCD As String)
| Dim MyPath As String
| Dim MyName As String
| Dim iNiveau As Integer, Uncompteur As Integer
| Dim chMsg As String, NbreFonc As Integer, ValeurRetournée As Variant
| chMsg = "Chargement des fichiers"
| NbreFonc = 100
| ValeurRetournée = SysCmd(acSysCmdInitMeter, chMsg, 100)
| Uncompteur = 0
| iNiveau = 0
| MyPath = IIf(Right(pPath, 1) <> "", pPath & "", pPath)
| MyName = LPSynchronise(MyPath, 0) ' Extrait la première entrée.
| Do While MyName <> ""
| If MyName <> "." And MyName <> ".." Then
| If (GetAttr(MyPath & MyName) And vbDirectory) > | vbDirectory Then
| LPEnregistrePath MyPath & MyName, pNomCD
| LPListeDirectory MyPath & MyName, pNomCD
| Else
| LPEnregistreFile MyPath, MyName
| End If
| End If
| iNiveau = iNiveau + 1
| MyName = LPSynchronise(MyPath, iNiveau) ' Extrait l'entrée
| suivante.
| Uncompteur = Uncompteur + 1
| ValeurRetournée = SysCmd(acSysCmdUpdateMeter, Uncompteur)
| Loop
| 'ValeurRetournée = SysCmd(acSysCmdUpdateMeter, UnCompteur) '
| ici, j'ai une erreur:appek de fonction illégale?
| Set maBD = Nothing
| Set rstRep = Nothing
| ValeurRetournée = SysCmd(acSysCmdRemoveMeter)
| End Sub
|
|
| J'ai bien une barre qui s'affiche avec chargement de fichiers, mais
| elle reste figée.
| Comment pourrait-on bien faire?
| D'avance merci à tous.
|
| Guy FALESSE




Avatar
Guy FALESSE
Salut Anor,

Voilà, j'ai testé et j'ai une erreur 7952 appel de fonction illégal.
Bien sûr, il y a d'autres fonctions qui entrent en ligne de compte.
Si tu veux, je peux t'envoyer une base allégée pour voir le processus
complet.
D'avance merci

Guy FALESSE

Sub LPListeDirectory(pPath As String, pNomCD As String)
Dim MyPath As String
Dim MyName As String
Dim iNiveau As Integer
Dim No As Integer
Dim Total As Integer
No = 0
NbTotal = 100
SysCmd acSysCmdInitMeter, "Traitement en cours ", NbTotal
'
iNiveau = 0
MyPath = IIf(Right(pPath, 1) <> "", pPath & "", pPath)
MyName = LPSynchronise(MyPath, 0) ' Extrait la première entrée.
Do While MyName <> ""
If MyName <> "." And MyName <> ".." Then
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory
Then
LPEnregistrePath MyPath & MyName, pNomCD
LPListeDirectory MyPath & MyName, pNomCD
Else
LPEnregistreFile MyPath, MyName
End If
End If
iNiveau = iNiveau + 1
MyName = LPSynchronise(MyPath, iNiveau) ' Extrait l'entrée
suivante.
SysCmd acSysCmdUpdateMeter, No
No = No + 1
If No > NbTotal Then
SysCmd acSysCmdInitMeter, "Traitement en cours ", NbTotal
No = 0
End If
' j'ai une erreur qui dit 7952 appel de fonction illégal
Loop
SysCmd acSysCmdClearStatus
Set maBD = Nothing
Set rstRep = Nothing
End Sub
.

"Anor" <http://memoaccess.free.fr/anor/email.htm> a écrit dans le message de
news:
Bonjour,

Si tu ne connais pas le nombre de boucles qu'il va y avoir, alors
tu peux réinitialiser la barre dès qu'elle arrive à 100 :

une autre méthode :

Sub cpteur()
Dim No As Integer
Dim Total as Integer
No = 0
NbTotal = 100
SysCmd acSysCmdInitMeter, "Traitement en cours ", NbTotal
Do While ta condition à remplir
SysCmd acSysCmdUpdateMeter, No
No = No + 1
If No > NbTotal Then
SysCmd acSysCmdInitMeter, "Traitement en cours ", NbTotal
No = 0
End If
Loop
SysCmd acSysCmdClearStatus
End Sub

Si ça va trop vite, tu augmentes la valeur de Total pour ralentir la
progression.



--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Guy FALESSE wrote:
| Bonjour à tous,
|
| J'ai parcouru les nombreuses pages parlant de ce sujet, mais je n'ai
| rien vu sur mon problème.
| On parle toujours du nbre d'enregistrements connus, mais quand on ne
| connaît à l'avance ce nombre comment peut-on faire défiler cette
| barre de progression, je vous livre ici mune partie de code:
|
| Sub LPListeDirectory(pPath As String, pNomCD As String)
| Dim MyPath As String
| Dim MyName As String
| Dim iNiveau As Integer, Uncompteur As Integer
| Dim chMsg As String, NbreFonc As Integer, ValeurRetournée As Variant
| chMsg = "Chargement des fichiers"
| NbreFonc = 100
| ValeurRetournée = SysCmd(acSysCmdInitMeter, chMsg, 100)
| Uncompteur = 0
| iNiveau = 0
| MyPath = IIf(Right(pPath, 1) <> "", pPath & "", pPath)
| MyName = LPSynchronise(MyPath, 0) ' Extrait la première entrée.
| Do While MyName <> ""
| If MyName <> "." And MyName <> ".." Then
| If (GetAttr(MyPath & MyName) And vbDirectory) > | vbDirectory Then
| LPEnregistrePath MyPath & MyName, pNomCD
| LPListeDirectory MyPath & MyName, pNomCD
| Else
| LPEnregistreFile MyPath, MyName
| End If
| End If
| iNiveau = iNiveau + 1
| MyName = LPSynchronise(MyPath, iNiveau) ' Extrait l'entrée
| suivante.
| Uncompteur = Uncompteur + 1
| ValeurRetournée = SysCmd(acSysCmdUpdateMeter, Uncompteur)
| Loop
| 'ValeurRetournée = SysCmd(acSysCmdUpdateMeter, UnCompteur) '
| ici, j'ai une erreur:appek de fonction illégale?
| Set maBD = Nothing
| Set rstRep = Nothing
| ValeurRetournée = SysCmd(acSysCmdRemoveMeter)
| End Sub
|
|
| J'ai bien une barre qui s'affiche avec chargement de fichiers, mais
| elle reste figée.
| Comment pourrait-on bien faire?
| D'avance merci à tous.
|
| Guy FALESSE




Avatar
Anor
Bonjour,


Guy FALESSE wrote:
| Salut Anor,
|
| Voilà, j'ai testé et j'ai une erreur 7952 appel de fonction illégal.
| Bien sûr, il y a d'autres fonctions qui entrent en ligne de compte.
| Si tu veux, je peux t'envoyer une base allégée pour voir le processus
| complet.
| D'avance merci
|
| Guy FALESSE
|

ok tu la zippe, tu cliques sur ce lien
http://memoaccess.free.fr/anor/email.htm
et tu me l'envoies.

j'espère trouver 5 minutes pour regarder ce WE, mais c'est un WE chargé
qui se présente !

--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Avatar
Guy FALESSE
Salut Anor,

C'est parti, merci beaucoup.
@+

Guy FALESSE

"Anor" <http://memoaccess.free.fr/anor/email.htm> a écrit dans le message de
news:
Bonjour,


Guy FALESSE wrote:
| Salut Anor,
|
| Voilà, j'ai testé et j'ai une erreur 7952 appel de fonction illégal.
| Bien sûr, il y a d'autres fonctions qui entrent en ligne de compte.
| Si tu veux, je peux t'envoyer une base allégée pour voir le processus
| complet.
| D'avance merci
|
| Guy FALESSE
|

ok tu la zippe, tu cliques sur ce lien
http://memoaccess.free.fr/anor/email.htm
et tu me l'envoies.

j'espère trouver 5 minutes pour regarder ce WE, mais c'est un WE chargé
qui se présente !

--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------






Avatar
Anor
Salut
Je te réponds ici : je ne comprends pas car mon message ne veut plus partir :

J'avais répondu ceci :

Salut Guy,

J'ai fait le test plusieurs fois sur un dossier de 112 fichiers.
ça marche impec ....
j'ai maintenant 684 entrées dans la table.
et la barre de progression fait 2 passages et demi à chaque fois.


Cela dit, pour avoir 1 seul passage, il suffit de compter le nombre de fichiers présents
dans le répertoire et affecter la valeur à la variable NbTotal, non ?

si tu as une erreur, vérifie tes références, mais chez moi, ça marche nickel....

a+
Arnaud

Voilà
a+
Arnaud


Guy FALESSE wrote:
| Salut Anor,
|
| C'est parti, merci beaucoup.
| @+
|
| Guy FALESSE
|
Avatar
Anor
re (toujours des problèmes de messagerie smtp)

Je n'ai pas trop compris à quoi servait cette erreur, mais tu peux peut-être t'inspirer de ce
code pour gérer l'erreur :

zu 1. du kannst neben der toolboox auf die 3 punkte klicken und dort das
Objekt progressbar in deine Form ziehen.
Oder du kannst auf der Statusleiste ein Progressbar darstellen.

Sub gSysCmd(iMode As String, Optional sOption1 As String, _
Optional sOption2 As String)

'**********************************************
'* iMode Options sOption1 sOption2 *
'**********************************************
'* StatusTxt "Text" -------- *
'* ProgBarStart "Text" "Max Zahl"*
'* ProgBarUpd "Aktuelle Zahl" -------- *
'* ProgBarDel -------- -------- *
'**********************************************

On Error GoTo ErrgSysCmd

Select Case iMode
Case Is = "StatusTxt"
If IsMissing(sOption1) Then
Call sMessage("Fehlerhafter Aufruf in '
gSysCmd - StatusTxt'")
Else
Call SysCmd(acSysCmdSetStatus, sOption1)
End If
Case Is = "ProgBarStart"
If IsMissing(sOption1) Or IsMissing(sOption2) Then
Call sMessage("Fehlerhafter Aufruf in '
gSysCmd - ProgBarStart'")
Else
Call SysCmd(acSysCmdInitMeter, sOption1,
sOption2)
End If
Case Is = "ProgBarUpd"
If IsMissing(sOption1) Then
Call sMessage("Fehlerhafter Aufruf in '
gSysCmd - ProgBarUpd'")
Else
Call SysCmd(acSysCmdUpdateMeter, sOption1)
End If
Case Is = "ProgBarDel"
Call SysCmd(acSysCmdRemoveMeter)
End Select

Exit Sub

ErrgSysCmd:
If Err.Number = 7952 Then
Err.Clear
Call sMessage("Fehlerhafter Aufruf in ' gSysCmd - ProgBarDel'")
End If

End Sub


--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
----- Original Message -----
From: Guy FALESSE
To: 'Anor'
Sent: Friday, May 14, 2004 10:17 PM
Subject: RE: Progress barre


Salut Arnaud,



J'ai toujours cette erreur : 7952 appel de fonction illégal.

Quels seraient les librairies à ajouter, j'ai déjà Visual Basic - Office 11 - dao 3.6 et
scripting runtime.

Enfin, merci d'avoir déjà testé.

@+

Guy FALESSE
Avatar
Anor
Voir également le post ci-dessous à propos de l'erreur 7952 :

http://groups.google.com/groups?hl=fr&lr=&ie=UTF-8&selm:53CF94.C9842510%40citec.com.au.nospam

De :Doug Hutcheson
Objet :Re: error with syscmd


Groupes de discussion :comp.databases.ms-access
Date :2001-01-03 17:17:11 PST

Gerry,
My A97 Help indicates you are using incorrect syntax and an incorrect
manifest constant name.

From Help:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ReturnValue = SysCmd(action[, text][, value])

...
The SysCmd function returns a Null if these actions are successful.
Otherwise, Microsoft Access generates a run-time error.

...
acSysCmdUpdateMeter Updates the progress meter with the specified value.
You must specify the text argument when you use this action.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

From this, I would re-code your statement as:
R = SysCmd(acSysCmdUpdateMeter,"Working...", 6)

Note also that the return value from a correct call is Null, so ensure
your variable R is defined as a type which can take null.

HTH
Doug


Gerry Luco wrote:

Error 7952 (you made an illegal function call.) comes up around 5% of the
time this code is executed (Access 97 SR2 DAO 3.51). I tired repairing and
decompiling/ compiling the database. The same code fails when run from
other parts of the database.

R = SysCmd(SYSCMD_UPDATEMETER, 6)

Any suggestions?

Thanks
Gerry Luco


Avatar
3stone
"Anor"
zu 1. du kannst neben der toolboox auf die 3 punkte klicken und dort das
Objekt progressbar in deine Form ziehen.
Oder du kannst auf der Statusleiste ein Progressbar darstellen.



Voilà machin... heu... chose... zut... comment donc...
ah oui, Anor... qui devient polyglotte ;-))))



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------

Avatar
Guy FALESSE
Salut Anor et ...3Stone (:))

J'avais reçu ton message (le premier), les autres pas, finalement, j'avais
mis On Error Resume Next et ça fonctionnait au poil, bien sûr, à chaque
répertoire, il recommençait à afficher une nouvelle barre, pas grave !
Ceci dit, je vais regarder la solution de Microsoft, parce la machin en
allemand, faut se le farcir.
Où as-tu été péché ça :) Chapeau, il fallait le faire.
@+ et encore merci

Guy FALESSE


"Anor" <http://memoaccess.free.fr/anor/email.htm> a écrit dans le message de
news:
Bonjour,


Guy FALESSE wrote:
| Salut Anor,
|
| Voilà, j'ai testé et j'ai une erreur 7952 appel de fonction illégal.
| Bien sûr, il y a d'autres fonctions qui entrent en ligne de compte.
| Si tu veux, je peux t'envoyer une base allégée pour voir le processus
| complet.
| D'avance merci
|
| Guy FALESSE
|

ok tu la zippe, tu cliques sur ce lien
http://memoaccess.free.fr/anor/email.htm
et tu me l'envoies.

j'espère trouver 5 minutes pour regarder ce WE, mais c'est un WE chargé
qui se présente !

--
à+
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Access Memorandum : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------






1 2