XL 2010 barre de progression

  • Initiateur de la discussion Initiateur de la discussion obyone
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

obyone

XLDnaute Occasionnel
bonjour,

j'ai créé une macro qui recherche des mises à jour sur une dizaine de tableau et j'aimerai faire une barre de progression qui s'actualise dès de la macro change de tableau.

je vous laisse un petit exemple...

Pourquoi ma barre ne progresse pas?

merci d'avance


Code:
Private Sub Oui_Click()


Dim ST As Worksheet 'declare la variable sS
Dim M As Worksheet 'déclare la variable MAJ (feuille MAJ)
Dim V  As Worksheet 'déclare la variable V

Dim PL As Range 'déclare la variable PL (PLage)
Dim R As Range 'déclare la variable R
Dim TD() As Variant 'déclare la variable TD (Tableau des Différences)
Dim i As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim sup As Integer
Dim tablo, dico



Unload Me 'ferme serveur



'charge la barre de progression
progression = 0
BarreProgression.Show vbModeless
BarreProgression.Caption = "Vérification des mises à jour ..."

progression = progression + 1
BarreProgression.Image_barre.Width = progression * 1.95
DoEvents
BarreProgression.Repaint

   
 
'-----------------------------------remplissage tableau S maj-------------------------------------------


         
With Sheets("S maj")
      
     

        Set ST = Worksheets("S maj") 'définit l'onglet F
        Set M = Worksheets("MAJ") 'définit l'onglet M
        Set PL = ST.Range("A1").CurrentRegion 'définit la plage PL
   
        'compare la colonne 1 avec la 2
        For i = 2 To ST.Range("A1").CurrentRegion.Rows.Count 'boucle sur toutes les lignes I de la plage PL
       
        If ST.Cells(i, 1).Value <> "" Then 'condition 1 : si la cellule ligne I colonne 1 n'est pas vide
        'définit la recherche R (recherche dans la colonne 2 de la plage PL la valeur entière de la cellule ligne I colonne 1)
        Set R = Application.Intersect(PL, ST.Columns(2)).Find(ST.Cells(i, 1), , xlValues, xlWhole)
            If R Is Nothing Then 'condition 2 : si aucune occurrence n'est trouvée
            ReDim Preserve TD(J) 'redimensionne le tableau des différences TD
            TD(J) = ST.Cells(i, 1) 'récupère dans la tableau TD la valeur de la cellule ligne I, colonne 1
            J = J + 1 'incrémente J
            End If 'fin de la condition 2
        End If 'fin de la condition 1
       
        Next i 'prochaine ligne de la boucle

        If J < 1 Then
       
        With Sheets("S maj")
        tablo = Range("MAJS2").Value
        Set dico = CreateObject("scripting.dictionary")
        dico.comparemode = vbTextCompare

        For i = 1 To UBound(tablo): dico(tablo(i, 2)) = "": Next i
        For i = 1 To UBound(tablo)
            If dico.exists(tablo(i, 1)) Then tablo(i, 1) = ""
        Next i
        i = 1
   
        Range("MAJS2") = tablo
       
        End With
       
       Else
      

        'renvoie dans C2 redimensionnées le tableau TD transposé
        M.Range("C3").Resize(UBound(TD) + 1, 1).Value = Application.Transpose(TD)
    
    
     With Sheets("MAJ")
      For i = .Cells(2, 1).End(xlDown).Row To 1 Step -1
        If .Cells(i, 3).Value <> "" And .Cells(i, 2) = "" Then
           .Cells(i, 2).Value = "S"
        End If
      Next i
    End With

    

        With Sheets("S maj")
        tablo = Range("MAJS2").Value
        Set dico = CreateObject("scripting.dictionary")
        dico.comparemode = vbTextCompare

        For i = 1 To UBound(tablo): dico(tablo(i, 2)) = "": Next i
        For i = 1 To UBound(tablo)
            If dico.exists(tablo(i, 1)) Then tablo(i, 1) = ""
        Next i
        i = 1
   
        Range("MAJS2") = tablo
        End With
        End If
      

End With
progression = progression + 1
BarreProgression.Repaint
    '--------------------------------------remplissage tableau V maj---------------------------------------------
   
   
  
With Sheets("V maj")
  

        Set V = Worksheets("V maj") 'définit l'onglet V
        Set M = Worksheets("MAJ") 'définit l'onglet M
        Set PL = V.Range("A1").CurrentRegion 'définit la plage PL

        'compare la colonne 1 avec la 2
        For i = 2 To V.Range("A1").CurrentRegion.Rows.Count 'boucle sur toutes les lignes I de la plage PL

        If V.Cells(i, 1).Value <> "" Then 'condition 1 : si la cellule ligne I colonne 1 n'est pas vide
        'définit la recherche R (recherche dans la colonne 2 de la plage PL la valeur entière de la cellule ligne I colonne 1)
        Set R = Application.Intersect(PL, V.Columns(2)).Find(V.Cells(i, 1), , xlValues, xlWhole)
            If R Is Nothing Then 'condition 2 : si aucune occurrence n'est trouvée
            ReDim Preserve TD(J) 'redimensionne le tableau des différences TD
            TD(J) = V.Cells(i, 1) 'récupère dans la tableau TD la valeur de la cellule ligne I, colonne 1
            J = J + 1 'incrémente J
            End If 'fin de la condition 2
        End If 'fin de la condition 1

        Next i 'prochaine ligne de la boucle

        If J < 1 Then

        With Sheets("V maj")
        tablo = Range("MAJV").Value
        Set dico = CreateObject("scripting.dictionary")
        dico.comparemode = vbTextCompare

        For i = 1 To UBound(tablo): dico(tablo(i, 2)) = "": Next i
        For i = 1 To UBound(tablo)
            If dico.exists(tablo(i, 1)) Then tablo(i, 1) = ""
        Next i
        i = 1

        Range("MAJV") = tablo

        End With

      Else


        'renvoie dans C2 redimensionnées le tableau TD transposé
        M.Range("C3").Resize(UBound(TD) + 1, 1).Value = Application.Transpose(TD)
       
       
    With Sheets("MAJ")
      For i = .Cells(2, 1).End(xlDown).Row To 1 Step -1
        If .Cells(i, 3).Value <> "" And .Cells(i, 2) = "" Then
           .Cells(i, 2).Value = "V"
        End If
      Next i
    End With

       

        With Sheets("V maj")
        tablo = Range("MAJV").Value
        Set dico = CreateObject("scripting.dictionary")
        dico.comparemode = vbTextCompare

        For i = 1 To UBound(tablo): dico(tablo(i, 2)) = "": Next i
        For i = 1 To UBound(tablo)
            If dico.exists(tablo(i, 1)) Then tablo(i, 1) = ""
        Next i
        i = 1
   
        Range("MAJV") = tablo
        End With
       
        End If
       
     
       
End With
progression = progression + 1
BarreProgression.Repaint




End Sub
 

Pièces jointes

Bonjour

Il te manque un fichier pour les tests
à première vue, ton userform étant non modal, je dirais qu'il n'a pas le temps de s'afficher que le code de la macro continue
places un Doevents derrière ton Repaint pour forcer l'affichage, cela suspendra l'exécution de la macro tant qu'il n'est pas effectué

BarreProgression.Repaint
DoEvents

Cordialement
 
bonjour,

j'ai modifié ma macro un "doevents" à chaque repaint
mais le resultat rest le meme?

Code:
Private Sub Oui_Click()


Dim ST As Worksheet 'declare la variable sS
Dim M As Worksheet 'déclare la variable MAJ (feuille MAJ)
Dim V  As Worksheet 'déclare la variable V

Dim PL As Range 'déclare la variable PL (PLage)
Dim R As Range 'déclare la variable R
Dim TD() As Variant 'déclare la variable TD (Tableau des Différences)
Dim i As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim sup As Integer
Dim tablo, dico



Unload Me 'ferme serveur



'charge la barre de progression
progression = 0
BarreProgression.Show vbModeless
BarreProgression.Caption = "Vérification des mises à jour ..."

progression = progression + 1
BarreProgression.Image_barre.Width = progression * 1.95
BarreProgression.Repaint
DoEvents
   
 
'-----------------------------------remplissage tableau S maj-------------------------------------------


         
With Sheets("S maj")
      
     

        Set ST = Worksheets("S maj") 'définit l'onglet F
        Set M = Worksheets("MAJ") 'définit l'onglet M
        Set PL = ST.Range("A1").CurrentRegion 'définit la plage PL
   
        'compare la colonne 1 avec la 2
        For i = 2 To ST.Range("A1").CurrentRegion.Rows.Count 'boucle sur toutes les lignes I de la plage PL
       
        If ST.Cells(i, 1).Value <> "" Then 'condition 1 : si la cellule ligne I colonne 1 n'est pas vide
        'définit la recherche R (recherche dans la colonne 2 de la plage PL la valeur entière de la cellule ligne I colonne 1)
        Set R = Application.Intersect(PL, ST.Columns(2)).Find(ST.Cells(i, 1), , xlValues, xlWhole)
            If R Is Nothing Then 'condition 2 : si aucune occurrence n'est trouvée
            ReDim Preserve TD(J) 'redimensionne le tableau des différences TD
            TD(J) = ST.Cells(i, 1) 'récupère dans la tableau TD la valeur de la cellule ligne I, colonne 1
            J = J + 1 'incrémente J
            End If 'fin de la condition 2
        End If 'fin de la condition 1
       
        Next i 'prochaine ligne de la boucle

        If J < 1 Then
       
        With Sheets("S maj")
        tablo = Range("MAJS2").Value
        Set dico = CreateObject("scripting.dictionary")
        dico.comparemode = vbTextCompare

        For i = 1 To UBound(tablo): dico(tablo(i, 2)) = "": Next i
        For i = 1 To UBound(tablo)
            If dico.exists(tablo(i, 1)) Then tablo(i, 1) = ""
        Next i
        i = 1
   
        Range("MAJS2") = tablo
       
        End With
       
       Else
      

        'renvoie dans C2 redimensionnées le tableau TD transposé
        M.Range("C3").Resize(UBound(TD) + 1, 1).Value = Application.Transpose(TD)
    
    
     With Sheets("MAJ")
      For i = .Cells(2, 1).End(xlDown).Row To 1 Step -1
        If .Cells(i, 3).Value <> "" And .Cells(i, 2) = "" Then
           .Cells(i, 2).Value = "S"
        End If
      Next i
    End With

    

        With Sheets("S maj")
        tablo = Range("MAJS2").Value
        Set dico = CreateObject("scripting.dictionary")
        dico.comparemode = vbTextCompare

        For i = 1 To UBound(tablo): dico(tablo(i, 2)) = "": Next i
        For i = 1 To UBound(tablo)
            If dico.exists(tablo(i, 1)) Then tablo(i, 1) = ""
        Next i
        i = 1
   
        Range("MAJS2") = tablo
        End With
        End If
      

End With
progression = progression + 1
BarreProgression.Repaint
DoEvents
    '--------------------------------------remplissage tableau V maj---------------------------------------------
   
   
  
With Sheets("V maj")
  

        Set V = Worksheets("V maj") 'définit l'onglet V
        Set M = Worksheets("MAJ") 'définit l'onglet M
        Set PL = V.Range("A1").CurrentRegion 'définit la plage PL

        'compare la colonne 1 avec la 2
        For i = 2 To V.Range("A1").CurrentRegion.Rows.Count 'boucle sur toutes les lignes I de la plage PL

        If V.Cells(i, 1).Value <> "" Then 'condition 1 : si la cellule ligne I colonne 1 n'est pas vide
        'définit la recherche R (recherche dans la colonne 2 de la plage PL la valeur entière de la cellule ligne I colonne 1)
        Set R = Application.Intersect(PL, V.Columns(2)).Find(V.Cells(i, 1), , xlValues, xlWhole)
            If R Is Nothing Then 'condition 2 : si aucune occurrence n'est trouvée
            ReDim Preserve TD(J) 'redimensionne le tableau des différences TD
            TD(J) = V.Cells(i, 1) 'récupère dans la tableau TD la valeur de la cellule ligne I, colonne 1
            J = J + 1 'incrémente J
            End If 'fin de la condition 2
        End If 'fin de la condition 1

        Next i 'prochaine ligne de la boucle

        If J < 1 Then

        With Sheets("V maj")
        tablo = Range("MAJV").Value
        Set dico = CreateObject("scripting.dictionary")
        dico.comparemode = vbTextCompare

        For i = 1 To UBound(tablo): dico(tablo(i, 2)) = "": Next i
        For i = 1 To UBound(tablo)
            If dico.exists(tablo(i, 1)) Then tablo(i, 1) = ""
        Next i
        i = 1

        Range("MAJV") = tablo

        End With

      Else


        'renvoie dans C2 redimensionnées le tableau TD transposé
        M.Range("C3").Resize(UBound(TD) + 1, 1).Value = Application.Transpose(TD)
       
       
    With Sheets("MAJ")
      For i = .Cells(2, 1).End(xlDown).Row To 1 Step -1
        If .Cells(i, 3).Value <> "" And .Cells(i, 2) = "" Then
           .Cells(i, 2).Value = "V"
        End If
      Next i
    End With

       

        With Sheets("V maj")
        tablo = Range("MAJV").Value
        Set dico = CreateObject("scripting.dictionary")
        dico.comparemode = vbTextCompare

        For i = 1 To UBound(tablo): dico(tablo(i, 2)) = "": Next i
        For i = 1 To UBound(tablo)
            If dico.exists(tablo(i, 1)) Then tablo(i, 1) = ""
        Next i
        i = 1
   
        Range("MAJV") = tablo
        End With
       
        End If
       
     
       
End With
progression = progression + 1
BarreProgression.Repaint
DoEvents



End Sub

cordialement
 

Pièces jointes

Bonjour
en fait, ton incrémentation de 1 est trop faible pour voir un changement et de toute façon, tu ne retaillais pas ta barre de progression, j'ai augmenté l'incrémentation à 20 et remis des définitions de taille pour la barre.
Voila ton code modifié, ton code s'exécutant trop rapidement, j'ai mis des attentes de 2 secondes pour que tu vois bien la barre progresser mais tu pourras les supprimer dans ton code final, garde par contre les doevents
 

Pièces jointes

le plus simple est d'agrandir ta barre au maximum, de noter la valeur de widht, de diviser cette valeur par le nombre d'incrémentations. Quand le nombre d'incrémentations est variable ou non connu, tu fais un petit code avant pour tester combien tu en auras et tu fais la même opération.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
569
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
481
Réponses
40
Affichages
2 K
Retour