Mise en place d'une barre de progression

babacool

XLDnaute Nouveau
Bonjour à tous,

Je sollicite votre aide sur la manière de mettre en place une barre de progression liée au code ci-après (je balaye les feuilles d'un classeur et supprimes les lignes pour lesquelles la cellule "Cxx" renvoie une erreur). J'ai trouvé des modèles de progressbar dans le forum mais ne comprend pas bien la manière de mettre en place le % de progression lié à la boucle suppression de lignes.

Merci par avance pour votre aide et vos idées.

Sub Suppr_Lignes()
Dim cel As Range
Dim lig As Long
Dim ws As Worksheet

For Each ws In Worksheets
If ws.Name <> "Ventes janvier" Then
If ws.Name <> "Ventes février" Then


ws.Activate
lig = 1
début:
For Each cel In Range("C" & lig & ":C" & Range("A1500").End(xlUp).Row)

If IsError(cel) Then

lig = cel.Row
cel.EntireRow.Delete
GoTo début
End If
Next cel
End If
End If
Next ws

End Sub
 
G

Guest

Guest
Re : Mise en place d'une barre de progression

Bonjour BabaCool,

Je me suis permis de changer un peu ton code pour éviter les 'Goto' qui sont toujours une mauvaise façon de faire.

Pour ce qui est du progresseBar, il faudrait voir comment il est constitué et sans un fichier exemple c'est difficile. Mais tu as un fil ici Aujourd'hui même qui en traite.



Code:
Sub Suppr_Lignes()
    Dim cel As Range
    Dim lig As Long, derLig As Long, cpt As Long
    Dim ws As Worksheet
    For Each ws In Worksheets
        If ws.Name <> "Ventes janvier" Or ws.Name <> "Ventes février" Then
            ws.Activate
            
            'Retenir le numéro de la dernière ligne
            derLig = Range("A1500").End(xlUp).Row
            
            'Partir de la dernière ligne pour remonter la plage
            For lig = derLig To 1 Step -1
            
                'Si la cellule Cxx contient une erreur supprimer la ligne
                If IsError(Range("C" & lig)) Then Range("C" & lig).EntireRow.Delete
                
            Next
        End If
    Next ws
    
End Sub

A bientôt
 

excalibur

XLDnaute Impliqué
Re : Mise en place d'une barre de progression

bonjour babacool Hasco le forum
les progressbars c est bien mais tu vas ralentir encore ton code il vaut mieux optimiser ton code en ecrivant ta macro differament. tu boucle sur combien de feuilles ???
 

babacool

XLDnaute Nouveau
Re : Mise en place d'une barre de progression

Bonsoir tout le monde,

Merci pour vos éclairages.

Hasco, merci d'avoir "nettoyer" un peu mon code (je suis un programmeur du dimanche, donc un peu à l'arrache).

Ma boucle de suppression des cellules porte sur 35 feuilles environ (à aujourd'hui) : la durée est de 1 mn 30 environ. Je n'ai pas réussi à faire mieux.
Désolé de ne pas poster un exemple (pb de confidentialité).

Steph.777, je prends connaissance de ton code. Merci

@+
 

babacool

XLDnaute Nouveau
Re : Mise en place d'une barre de progression

Rebonjour tout le monde,

J'ai trouver des exemples de progressbar sur différents forums et je les ai adaptés à mon cas. Rappel : je cherche à supprimer les lignes présentant une erreur dans la plage G à L sur toutes les feuilles (j'ai simplifié le fichier exemple, en réalité j'ai une 30aine de feuilles dans mon classseur).
La progressbar s'affiche et défile normalement mais la fin coince et j'ai un message d'erreur : Erreur d’exécution ‘5’ Argument ou appel de procédure incorrect. L'erreur concerne ce bout de code : .LabelProgress.BackColor = RGB(0, PctColor / 3, PctColor)

Je n'arrive pas à déterminer le nombre max de lignes à supprimer. J'ai mis 8000au hasard. Je pense que le problème vient de là.

Quelqu'un aurait-il une idée ?

Merci d'avance à tous pour vos idées.
 

Pièces jointes

  • Fichier exemple 2.zip
    46.6 KB · Affichages: 60

mécano41

XLDnaute Accro
Re : Mise en place d'une barre de progression

Bonjour,

Comme tu ne connais pas, a priori, le nombre de lignes à supprimer, il te faut utiliser le nombre total de lignes que tu vas contrôler de façon à baser le pourcentage d'avancement là dessus.

Si tu veux le faire pour l'ensemble des feuilles, il faut que tu donnes le nombre de lignes balayées pour l'ensemble des feuilles.

Je joins, à toutes fins utiles, un exemple de barre mis dans une boucle de 0 à 1500 (1500=valeur de Y)

Pour simuler le temps des opérations, j'ai mis une temporisation qu'il faudra enlever.

Ne mets pas un Nb. d'incréments trop grand par rapport au Y car chaque mise à jour prend du temps...

N'intègre la routine de la barre que lorsque tu seras sûr que ta routine de contrôle fonctionne parfaitement...

Cordialement
 

Pièces jointes

  • barre1.xls
    31 KB · Affichages: 98
  • barre1.xls
    31 KB · Affichages: 97
  • barre1.xls
    31 KB · Affichages: 99

Discussions similaires

Réponses
7
Affichages
371
Réponses
2
Affichages
196

Statistiques des forums

Discussions
312 752
Messages
2 091 666
Membres
105 039
dernier inscrit
rouibi