Marre de ma ProgressBar!

cs_Gendarmette Messages postés 104 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 14 janvier 2004 - 18 juin 2003 à 13:37
Delbeke Messages postés 200 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 18 novembre 2005 - 20 juin 2003 à 13:58
Voici mon code en gros:
    n = 0
    For i = 0 To MaxTableauSource1
        For j = 0 To MaxTableauSource2
            If Fichier1(i, 0) = Fichier2(j, 0) Then
                FichierExiste = True
                If Fichier1(i, 1) < Fichier2(j, 1) Then
                    n = n + 1
                    Source2 = "D:\Christine\Rep2" & Fichier2(j, 0)
                    Destination2 = "D:\Christine\Rapport" & Fichier2(j, 0)
                    FileCopy Source2, Destination2
                Else: If Fichier1(i, 1) > Fichier2(j, 1) Then n = n + 1
                    Source1 = "D:\Christine\Rep1" & Fichier1(i, 0)
                    Destination1 = "D:\Christine\Rapport" & Fichier1(i, 0)
                    FileCopy Source1, Destination1
                End If
            End If
            If Fichier1(i, 0) <> Fichier2(j, 0) Then
                FichierExiste = False
            End If
            If FichierExiste = False Then
                Source1 = "D:\Christine\Rep1" & Fichier1(i, 0)
                Destination1 = "D:\Christine\Rapport" & Fichier1(i, 0)
                FileCopy Source1, Destination1
            End If
        Next j
   
    Next i
    FichierExiste = False
    
    For i = 0 To MaxTableauSource2
        For j = 0 To MaxTableauSource1            If Fichier2(i, 0) Fichier1(j, 0) Then FichierExiste True
        Next j
    If Not FichierExiste Then
          Source1 = "D:\Christine\Rep2" & Fichier2(i, 0)
          Destination1 = "D:\Christine\Rapport" & Fichier2(i, 0)
          FileCopy Source1, Destination1
    End If
    Next i


J'ai mis une ProgressBar qui doit avancer en même tps que ce traitement, seulement je ne sais pas comment la configurer.
Est-ce que qqn peut m'aider?
Merci!

>:) Gendarmette >:)

11 réponses

Boboss99 Messages postés 54 Date d'inscription lundi 13 janvier 2003 Statut Membre Dernière intervention 30 juin 2004
18 juin 2003 à 14:16
progressbar c pas bien compliqué
t'as la propriété MIN MAX et VALUE en gros
ex:
p.min = 0
p.max = 100
p.value=0
for i = 0 to 100
  p.value = p.value + i ' la progress bar s'incrémente
next

voila il reste juste a l'adapter a ton prog
bon courage @+ ;o)
0
cs_Gendarmette Messages postés 104 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 14 janvier 2004
18 juin 2003 à 14:45
Justement c bien ça le probleme, j'arrive pas à l'appliquer à mon programme =)

>:) Gendarmette >:)
0
Delbeke Messages postés 200 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 18 novembre 2005
18 juin 2003 à 23:58
Deux choix possibles
Afficher une progregression a chaque fichier copié (+1 )
Afficher une progression de la quantité d'octets copiés
dans les deux cas on ne peut mettre à jourt la barre de progression qu'a la fin du ficle copy

Pour connaitre la valeur à donner à max, il faut simuler un premier passage pour compter soit le nombre de fichiers qui vont être copiés, soit leur taille
Note : la taille peut se calculer avec FileLen(Fichier)
Verifier également que le total ne dépassera pas 32565 qui est la valeur maximum pour MAX. si c'est le cas on reduit en divisant par cent par exemple.

Reste un autre solution à la quelle je viens de penser.
Réécrire un FileCopy .
C'est pas aussi dificile que cà.
auquel cas on pourrait afficher une progression pour chaque fichier.

Si cà vous interresse , je peux plancher la dessus.

Jean-Luc
0
cs_Gendarmette Messages postés 104 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 14 janvier 2004
19 juin 2003 à 09:36
J’avais d’abord pensé à mettre MaxTableauSource1 comme valeur à ProgressBar1.Max. Voici comment MaxTableauSource1 est calculé dans mon code :

    For n = 0 To Ubound1
        If Fichier1(n, 0) = "" Then
            Ubound1 = n - 1
        End If
    Next n
        
    MaxTableauSource1 = Ubound1


Mais lorsque j’exécute le programme, une erreur se produit : valeur de propriété non valide.

>:) Gendarmette >:)
0

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

Posez votre question
Delbeke Messages postés 200 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 18 novembre 2005
19 juin 2003 à 10:47
Il n'est pas permis de modifier la valeur max dans la boucle
for x=0 to max
'max ne peut être changé ici
next

je vous propse de modifier votre code en ceci
Dim NbFiles as Integer
NbFiles=0
For n = 0 To Ubound1
If Fichier1(n, 0) <> "" Then
nbfiles=nbfiles+1
End If
Next n

Jean-Luc

Jean-Luc
0
cs_Gendarmette Messages postés 104 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 14 janvier 2004
19 juin 2003 à 13:26
Je n'y arrive toujours pas.
J'ai une erreur lors de l'incrementation de la ProgressBar et je ne sais pas comment determiner sa valeur maximale.

>:) Gendarmette >:)
0
Delbeke Messages postés 200 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 18 novembre 2005
19 juin 2003 à 13:31
C' est probablement que la valeur du progressbar dépasse la valeur MAX

On peut toujours limiter la casse en faisant

If PgBar.value+1<=PgBar.Max then
PgBar.Value=PgBar.value+1
end if

Jean-Luc
0
cs_Gendarmette Messages postés 104 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 14 janvier 2004
19 juin 2003 à 14:38
J’ai essayé d’intégrer vos morceaux de code mais sans succès.

Voici l’ensemble de mon programme. Si vous en trouvez le temps (et surtout le courage), indiquez moi l’endroit exact des modifications à effectuer.

Ce n’est pas urgent et je comprendrais que vous ayez autre chose à faire !

En tout cas merci pour l’aide que vous m’avez déjà apporté.

Dim Ubound1, Ubound2 As Integer
    
    For n = 0 To Ubound1
        If Fichier1(n, 0) = "" Then
            Ubound1 = n - 1
        End If
    Next n
        
    For n = 0 To Ubound2
        If Fichier2(n, 0) = "" Then
            Ubound2 = n - 1
        End If
    Next n
    
    MaxTableauSource1 = Ubound1
    MaxTableauSource2 = Ubound2

***LA PROGRESSBAR COMMENCE ICI***    

    n = 0
    For i = 0 To MaxTableauSource1
        For j = 0 To MaxTableauSource2
            If Fichier1(i, 0) = Fichier2(j, 0) Then
                FichierExiste = True
                If Fichier1(i, 1) < Fichier2(j, 1) Then
                    n = n + 1
                    Source2 = "D:\Christine\Rep2" & Fichier2(j, 0)
                    Destination2 = "D:\Christine\Rapport" & Fichier2(j, 0)
                    FileCopy Source2, Destination2
                Else
                    n = n + 1
                    Source1 = "D:\Christine\Rep1" & Fichier1(i, 0)
                    Destination1 = "D:\Christine\Rapport" & Fichier1(i, 0)
                    FileCopy Source1, Destination1
                End If
            End If
            If Fichier1(i, 0) <> Fichier2(j, 0) Then
                FichierExiste = False
            End If
            If FichierExiste = False Then
                Source1 = "D:\Christine\Rep1" & Fichier1(i, 0)
                Destination1 = "D:\Christine\Rapport" & Fichier1(i, 0)
                FileCopy Source1, Destination1
            End If
        Next j
    Next i
    FichierExiste = False
    
    For i = 0 To MaxTableauSource2
        For j = 0 To MaxTableauSource1            If Fichier2(i, 0) Fichier1(j, 0) Then FichierExiste True
        Next j
        If Not FichierExiste Then
            Source1 = "D:\Christine\Rep2" & Fichier2(i, 0)
            Destination1 = "D:\Christine\Rapport" & Fichier2(i, 0)
            FileCopy Source1, Destination1
        End If
    Next I

***ET SE TERMINE LA***
    
    For n = 0 To 100
        Flex.AddItem Fichier3(n, 0) & vbTab & Fichier3(n, 1)
    Next
    
    Dim sRepertoire As String
    sRepertoire = "D:\Christine\Rapport"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set Repertoire = fso.GetFolder(sRepertoire)

    Flex.Row = 0
    Flex.Col = 0
    Flex.Text = "Nom du fichier"
    Flex.Row = 0
    Flex.Col = 1
    Flex.Text = "Dernière modification"
    Flex.ColWidth(0) = 2100
    Flex.ColWidth(1) = 1700
    
    For Each Fichier In Repertoire.Files
        Debug.Print Fichier.Name & " " & Fichier.DateLastModified
        Flex.TextMatrix(Flex.Rows - 1, 0) = Fichier.Name
        Flex.TextMatrix(Flex.Rows - 1, 1) = Fichier.DateLastModified
        Flex.Rows = Flex.Rows + 1
        Fichier.Copy "D:\Christine\Rep1"
        Fichier.Copy "D:\Christine\Rep2"
    Next
    
End Sub

>:) Gendarmette >:)
0
Delbeke Messages postés 200 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 18 novembre 2005
19 juin 2003 à 16:06
Essayez le code suivant

Dim Ubound1 As Integer
Dim Ubound2 As Integer
Dim I As Integer
Dim J As Integer
Dim Source1 As String
Dim Source2 As String
Dim Destination1 As String
Dim Destination2 As String
Dim FichierExiste As Boolean
Dim N As Single
Dim Inc As Single

Ubound1 = UBound(Fichier1, 1) 'chiffre maxi dans le premier indice
Ubound2 = UBound(Fichier2, 1)
'Nb d'elements dans le tableau = ubound1*ubound2
'***LA PROGRESSBAR COMMENCE ICI***
If Ubound1 * Ubound2 > 32500 Then
sbPgBar.Max = (Ubound1 * Ubound2) \ 10
Inc = 0.1
Else
sbPgBar.Max = Ubound1 * Ubound2
Inc = 1
End If
sbPgBar.Value = 0
For I = 0 To Ubound1
For J = 0 To Ubound2
'petite simplification ici
If Fichier1(I, 0) = Fichier2(J, 0) Then
'fichier exite
If Fichier1(I, 1) < Fichier2(J, 1) Then
Source2 = "D:\Christine\Rep2" & Fichier2(J, 0)
Destination2 = "D:\Christine\Rapport" & Fichier2(J, 0)
FileCopy Source2, Destination2
Else
Source1 = "D:\Christine\Rep1" & Fichier1(I, 0)
Destination1 = "D:\Christine\Rapport" & Fichier1(I, 0)
FileCopy Source1, Destination1
End If
Else
'fichier n'existe pas
Source1 = "D:\Christine\Rep1" & Fichier1(I, 0)
Destination1 = "D:\Christine\Rapport" & Fichier1(I, 0)
FileCopy Source1, Destination1
End If
N = N + Inc
sbPgBar.Value = Int(N)
Next J
Next I
'deuxiéme passage , on repart avec un status bar à zéro
sbPgBar.Max = Ubound1
sbPgBar.Value = 0
FichierExiste = False
For I = 0 To Ubound2
For J = 0 To Ubound1
If Fichier2(I, 0) = Fichier1(J, 0) Then
FichierExiste = True
End If
Next J
If Not FichierExiste Then
Source1 = "D:\Christine\Rep2" & Fichier2(I, 0)
Destination1 = "D:\Christine\Rapport" & Fichier2(I, 0)
FileCopy Source1, Destination1
End If
sbPgBar.Value = sbPgBar.Value + 1
Next I
'***ET SE TERMINE LA***

Jean-Luc
0
cs_Gendarmette Messages postés 104 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 14 janvier 2004
20 juin 2003 à 13:20
La ProgressBar fonctionne!
Cependant j'ai maintenant un autre problème.
La valeur maximale de i est en fait le nombre de fichiers contenus dans le premier répertoire, de même pour j avec le second répertoire.
Etant donné qu'il y a + de fichiers dans Rep1 que dans Rep2, une comparaison s'effectue entre 1 fichier de Rep 1 et aucun fichier de Rep 2, ce qui provoque l'erreur.

>:) Gendarmette >:)
0
Delbeke Messages postés 200 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 18 novembre 2005
20 juin 2003 à 13:58
Vous avez la logique de l'utilisation du progress bar, je vais pas faire tout le boulot :)
Jean-Luc
0
Rejoignez-nous