Incrémentation pour progressbar

Résolu
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009 - 6 mai 2009 à 12:55
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009 - 6 mai 2009 à 22:57
Bonjour!

J'ai fais une macro qui me permet de mettre à jour une liste à partir d'un dossier en 2 temps
1) pour chaque cellule de la plage, si le contenu n'est pas retrouvé dans les noms de fichier du dossier alors suppression contenu cellule
2) pour chaque fichier du dossier, si le nom n'est pas retrouvé dans la plage, alors copie du nom dans celle-ci

Voilà le code:

Private Sub CommandButton2_Click()

'Met la liste à jour où indique que c'est déjà fait

Dim fs As Object, objShell As Object, strFileName As Object
Dim objFolder As Folder
Dim reference
Dim comptage
Dim source

source = GetSetting("Mes paramètres", "Label1", "Valeur Label1")
Set fs = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace(source)
reference = Range("D7").Value

With Worksheets(1).Range("D8:D500")
For Each cell In Range("D8:D500")
    If Not IsEmpty(cell) Then
    If cell.Font.ColorIndex = 3 Then
        With Application.FileSearch
            .NewSearch
            .LookIn = source
            .SearchSubFolders = False
            .FileName = cell.Value
            .Execute
            If .FoundFiles.Count = 0 Then cell.ClearContents
        End With
    End If
    End If
Next
End With
With Application.FileSearch
    .NewSearch
    .RefreshScopes
    .SearchSubFolders = False
    .FileTypes.Add msoFileTypeAllFiles
    .FileType = msoFileTypeAllFiles
    .LookIn = source
    comptage = .Execute(SortBy:=msoSortByLastModified, SortOrder:=msoSortOrderAscending, AlwaysAccurate:=True)
    If reference = comptage Then
        MsgBox ("Déjà à jour !!!"), vbInformation
        Else: For Each strFileName In objFolder.Items
                With Worksheets(1).Range("D8:D500")
                    Set recherche0 = .Find(strFileName, Lookat:=xlWhole)
                    If recherche0 Is Nothing Then Range("D5").Value = strFileName
                End With
              Next
    End If
End With

Range("D2").Select

End Sub

Note : S'il y a possibilité d'élaguer je suis preneur.

Le problème que je rencontre est le suivant : je souhaite avoir une progressbar qui correspond au temps de déroulement de la macro. Je sais qu'il faut incrémenter mais je n'ai absolument aucune idée de comment le faire.
Pourrais-je avoir un coup de main sur ce coup?

7 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
6 mai 2009 à 20:07
Bonsoir,

on ne compte en général pas le temps écoulé (car lié à la rapidité de ta machine), mais le nombre de traitement effectués.
Tu peux fort bien :
- mettre à 0 la propriété min de ta progressbar
- commencer par déterminer le nombre de fichiers contenus dans le dossier et définir à ce nombre la propriété max de ta progressbar
- faire progresser la propriété value de ta progressbar de 1 à chaque fin de traitement de ta 2èeme étape

Si tu y tiens : tu peux faire quelquechose d'identique pour ton 1er traitement (max = nombre de cellules et tu avances de 1 la propriété Value pour chaque cellule traitée ...)
tout cela est simple.
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
6 mai 2009 à 21:08
Par exemple : à la fin de ta boucle :
For Each cell In Range("D8:D500")
et juste avant le Next de cette boucle, tu as traité une cellule, non ?
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
6 mai 2009 à 22:47
Quel lien avec la cellule traitée ?
Ta boucle for .... next traite toutes les cellules de ta plage, cellule par cellule.
Tu n'as nullement à te préoccuper de quelle cellule il s'agit. Chaque fois que ta boucle arrive au next (qui veut dire suivant), tu passes à la cellule suivante (et tu as donc traité une cellule de plus)
Tu dois donc augmenter  de 1 unité la propriété Value de ta progressbar...
où est le problème ?

et qu'est cette affaire de i = i + 1 dans ta boucle For i.... Next ?

J'ai la malheureuse impression que tu as surtout à apprendre le fonctionnement (simple) d'une boucle for ...
Ton aide en ligne est à consulter (et elle est on ne peut plus claire sur ce point !!!)
bonne étude
3
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
6 mai 2009 à 19:11
SVP
0

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

Posez votre question
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
6 mai 2009 à 20:24
Merci de me répondre jmf0.
En fait, j'avais exactement le même raisonnement en tête, mais je débute en programmation et je ne sais pas comment incrémenter à chaque fin de cellule traitée par exemple.
Avec un exemple expliqué je m'en sortirai, mais il me faudrait juste une base.
0
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
6 mai 2009 à 22:28
J'aurais bien mis le système d'incrémentation à cet endroit mais c'est la procédure que je ne sais pas écrire.
En cherchant, j'ai ressorti des éléments du type :

For i = 1 To 100
i = i + 1
UserForm1.ProgressBar1.Value = UserForm1.ProgressBar1.Value + 1

Seulement, je ne vois vraiment pas comment peut-être fait le lien avec la cellule traitée. Merci de votre aide.
0
sfab41 Messages postés 28 Date d'inscription vendredi 27 mars 2009 Statut Membre Dernière intervention 9 juillet 2009
6 mai 2009 à 22:57
Bon et bien en fait c'était on ne peu plus simple. Désolé d'avoir dérangé avec ce souci puisque je m'étais seulement embrouillé avec les "i" qui n'étaient même pas nécessaire.
Pour le reste, j'ai bien compris le système de boucle mais je ne pensais pas qu'en écrivant simplement "UserForm1.ProgressBar1.Value = UserForm1.ProgressBar1.Value + 1" ça incrémenterait.

Encore merci!!!
0
Rejoignez-nous