Barre de progression sous VBAExcel 2007: g un petit soucis !

vbaxlbil

XLDnaute Nouveau
Bonjour
Je souhaite faire une barre de progression pour mon programme qui ressemble à ça
Private Sub CommandButton1_Click()

Dim compteur As Integer
Dim pourcentage As Single
Dim colonne As Integer
Dim ligne As Long
compteur = 1
AAA = 3
ZZZ = 12
For colonne = 1 To AAA
For ligne = 2 To ZZZ
Sheets("Heat").Range("A" & ligne).Value = ligne * 1
Sheets("Heat").Range("B" & ligne).Value = ligne * 2
Sheets("Heat").Range("C" & ligne).Value = ligne * 3
compteur = compteur + 1
Next ligne
pourcentage = compteur / (AAA * ZZZ)
Call UpdateProgress(pourcentage)
Next colonne
End Sub

donc g fait un boutton de commande et je l'ai programmé de la manière dont vous venez de voir, les lignes commençant par (Sheets("Heat").Range("A" & ligne).Value) sont égales à mes équations, alors comment je vais faire pour introduire la barre de progression.
Merci
 

JCGL

XLDnaute Barbatruc
Re : Barre de progression sous VBAExcel 2007: g un petit soucis !

Bonjour à tous,
Bienvenue sur XLD,

Merci de rester sur le Forum pour poser tes questions.

Un fichier en *.xls serait le bienvenue aussi.

A+ à tous
 

Lone-wolf

XLDnaute Barbatruc
Re : Barre de progression sous VBAExcel 2007: g un petit soucis !

Bonsoir vbaxlbil,

J'ai quelque peu modifier ton code, j'ai texté, fonctionnel;

dis-moi si ça joue.

Si de 12 lignes tu passe à 100 divise 100 par la longueur du label; ensuite tu redivise les lignes par le total obtenu.

Code:
Private Sub UserForm_Activate()
Dim compteur As Integer
Dim pourcentage As Single
Dim i As Integer
Dim ligne As Long
i = 1
j = 3
x = 12
For colonne = 1 To j
For ligne = 2 To x
i = i + 1
Sheets("Heat").Range("A" & ligne).Value = ligne * 1
Sheets("Heat").Range("B" & ligne).Value = ligne * 2
Sheets("Heat").Range("C" & ligne).Value = ligne * 3

t = Timer + 0.5: Do Until Timer > t: DoEvents: Loop
Me.LabelProgress.Visible = True
Me.LabelProgress.Width = i / 0.054                       
Next                                                                   
Exit For                                                               
'pourcentage = compteur / (j * x)
Next
End Sub

Private Sub UserForm_Initialize()
Me.LabelProgress.Visible = False
End Sub

A+ :cool:
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Barre de progression sous VBAExcel 2007: g un petit soucis !

Bonsoir vbaxlbil,


voici le fichier joint modifié; j'éspère qu'il te conviendra.



A+ :cool:
 

Pièces jointes

  • Classeur1.zip
    17.4 KB · Affichages: 73
  • Classeur1.zip
    17.4 KB · Affichages: 68
  • Classeur1.zip
    17.4 KB · Affichages: 69

Arpette

XLDnaute Impliqué
Re : Barre de progression sous VBAExcel 2007: g un petit soucis !

Bonsoir Lone-wolf, comment adapter à mon code ce très beau progressBar et est-ce possible.
@+
Code:
Sub Suivi_des_PO()

Dim i%
Dim h
Dim k
Dim m
Dim o
Dim q
Dim j As Range
Dim l As Range
Dim c As Range
Dim r As Range
Dim d As Range
Dim e As Range
Dim f As Range
Dim g As Range
Dim p As Range
Dim n As Range
Dim bx As Long
Dim Départ As String
Dim Somme&
Dim Somme1&
Dim Somme2&
Dim Zone As Range
Dim Zone1 As Range
Application.ScreenUpdating = False

bx = MsgBox("As-tu vérifié les lignes de production", vbYesNo)
If (bx = 6) Then
    Else
    Exit Sub
End If
With Worksheets("5-9-12")
    'Supprime les colonnes de A,B,D,E,F,G,H,M,S,U,V,W
    .Range("A:B,D:D,J:K,M:M,S:S,U:W").Delete

    'Supprime toutes les lignes dont les cellules de C ne commence pas par M
    If Not AutoFilterMode Then AutoFilterMode = True
        .[C1].AutoFilter 3, "<>M*"
        Set c = .Range("_FilterDataBase")
         c.Offset(1, 0).Resize(c.Rows.Count - 1).SpecialCells(12).Delete Shift:=xlUp
        .ShowAllData
        'Insertion de colonne
        .Columns("D").Insert
        .Columns("H").Insert
        .Columns("I:T").Insert
        .Cells(1, 2) = "Fournisseur"
        .Cells(1, 4) = "PO-LG"
        .Cells(1, 6) = "Qté Cmdée"
        .Cells(1, 8) = "Qtés RCT-PO"
        .Cells(1, 9) = "Qté RCT-C3D"
        .Cells(1, 10) = "Qté En Transit"
        .Cells(1, 11) = "Qté ASN"
        .Cells(1, 12) = "Date RCT-PO"
        .Cells(1, 13) = "Détail RCT-C3D"
        .Cells(1, 14) = "Date RCT-C3D"
        .Cells(1, 15) = "Détail du Transit"
        .Cells(1, 16) = "Date Prévue-C3D"
        .Cells(1, 17) = "Product Line"
        .Cells(1, 18) = "CDC FY"
        .Cells(1, 19) = "CDC Periode"
        .Cells(1, 20) = "DC Arrival Date"
       
    
        'Concatène C et "-" et S
        
        Set Zone = .Range("C2:C" & .Range("C65536").End(xlUp).Row)
        Zone.Offset(0, 1).FormulaR1C1 = "=RC3&""-""&text(RC25,""000"")" 'Formule en colonne D
        Zone.Offset(0, 1) = Zone.Offset(0, 1).Value 'On n'en garde que les valeurs
        Zone.Offset(0, 250).FormulaR1C1 = "=IF(OR(RC27=""x"",RC27=""X"",RC27=""C""),""c"",RC27)"
        Zone.Offset(0, 24) = Zone.Offset(0, 250).Value
        Zone.Offset(0, 250).FormulaR1C1 = "=IF(AND(RC6=RC7,RC27=""c""),0,RC6)"
        Zone.Offset(0, 251).FormulaR1C1 = "=IF(AND(RC6=RC7,RC27=""c""),0,RC7)"
        Zone.Offset(0, 250) = Zone.Offset(0, 250).Value
        Zone.Offset(0, 251) = Zone.Offset(0, 251).Value
        Zone.Offset(0, 252) = Zone.Offset(0, 252).Value
        Zone.Offset(0, 3) = Zone.Offset(0, 250).Value
        Zone.Offset(0, 4) = Zone.Offset(0, 251).Value
        'Regroupe les fournisseurs Seetat Delta Galil
        Zone.Offset(0, 252).FormulaR1C1 = "=IF(LEFT(RC2,6)=""SEETAT"",""SEETAT"",RC2)"
        Zone.Offset(0, -1) = Zone.Offset(0, 252).Value
        Zone.Offset(0, 253).FormulaR1C1 = "=IF(LEFT(RC2,11)=""DELTA GALIL"",""DELTA GALIL"",RC2)"
        Zone.Offset(0, -1) = Zone.Offset(0, 253).Value
        Zone.Offset(0, 250).ClearContents
        Zone.Offset(0, 251).ClearContents
        Zone.Offset(0, 252).ClearContents
        Zone.Offset(0, 253).ClearContents
End With

With Sheets("5-17")
    'Insertion d'une colonne
    .Columns(6).Insert
    .Cells(1, 6) = "PO-LG"
    .Cells(1, 12) = "Transit"
    'Transforme les cellules texte en nombre.
    On Error Resume Next
    Set Plage = .Range("K2:K" & Range("K2").End(xlDown).Row).SpecialCells(xlCellTypeConstants, xlTextValues)
        For Each c In Plage
            c = Replace(c, ",", ".")
        Next
    Plage.NumberFormat = "0"
    
    'Supprime toutes les lignes dont les cellules de E ne commence pas par M
   If Not AutoFilterMode Then AutoFilterMode = True
        .[E1].AutoFilter 5, "<>M*"
        Set d = .Range("_FilterDataBase")
        d.Offset(1, 0).Resize(d.Rows.Count - 1).SpecialCells(12).Delete Shift:=xlUp
        .ShowAllData
        'Concatène E et "-" et H
        Set Zone = .Range("E2:E" & .Range("E65536").End(xlUp).Row)
        Zone.Offset(0, 1).FormulaR1C1 = "=RC5&""-""&text(RC8,""000"")" 'Formule en colonne F
        Zone.Offset(0, 1) = Zone.Offset(0, 1).Value 'On n'en garde que les valeurs
        'On calcule le transit.
        'Si X = ? ou L <> 0 Remplace par Transit
        Set Zone = .Range("X2:X" & Range("X65536").End(xlUp).Row)
        Zone.Offset(0, 220).FormulaR1C1 = "=IF(OR(RC24=""?"",RC12<>0),""Transit"",RC24)"
        Zone = Zone.Offset(0, 220).Value
        Zone.Offset(0, 220).ClearContents
        'Si la date d'arrivée du transit est dépasssée de plus de 30 jours,
        'on considère le transit réceptionné C3D
        Set Zone = .Range("K2:K" & .Range("K65536").End(xlUp).Row).Offset(0, 1)
        Zone.FormulaR1C1 = "=IF(AND(RC23<>0,TODAY()- RC41 > 30),0,RC11)"
        Zone = Zone.Value
End With

'Affectation de la variable c à la colonne D de la feuille "5-9-12"
Set c = Worksheets("5-9-12").Range("D" & Worksheets("5-9-12").Range("D65536").End(xlUp).Row)
Do While c.Row > 1
'Remise à 0 des compteurs somme à chaque boucle
Somme& = 0
Somme1& = 0
Somme2& = 0
  With Worksheets("5-17").Range("F2:F" & Worksheets("5-17").Range("F65536").End(xlUp).Row)
    Set d = .Find(c)
        If Not d Is Nothing Then
            Départ = d.Address
            Do
                c(2, 1).EntireRow.Insert
                c(2, 0) = "N° ASN"
                
                'n° d'ASN
                c(2, 1) = d(1, 26)
                If c(2, 0) = "N° ASN" Then
                   c(2, 3) = 0
                   c(2, 4) = 0
                   c(2, 5) = 0
                   c(2, 6) = 0
                   c(2, 7) = 0
                   Else
                End If
                'qt dans l'ASN
                c(2, 8) = d(1, 6)
                'Qté ouverte
                If c(1, 24) = "c" Then
                c(1, 3) = c(1, 3) - c(1, 4)
                c(1, 4) = 0
                    Else
                End If
                'Qté en transit
                c(2, 12) = d(1, 7)
                'Qté réceptionnée C3D
                If c(1, 3) > c(1, 4) And c(2, 10) = "" And c(2, 12) = "" Then
                    c(1, 6) = c(1, 3) - c(1, 4)
                    Else
                    If c(2, 12) <> 0 Then
                        c(2, 10) = 0
                        Else
                    c(2, 10) = c(2, 8)
                    End If
                End If
                'Répète le fournisseur
                c(2, -1) = c(1, -1)
                'Répète le modèle
                c(2, -2) = c(1, -2)
                'Répète date contractuelle
                c(2, 21) = c(1, 21)
                'Répète date d'échéance
                c(2, 23) = c(1, 23)
                'date rct-po
                c(2, 9) = d(1, 5)
                'date rct-c3d
                c(2, 11) = d(1, 19)
                'date prévue c3d
                c(2, 13) = d(1, 36)
                'Somme des RCT-PO
                Somme& = d(1, 6) + Somme&
                'Somme des réceptions C3D
                Somme1& = c(2, 10) + Somme1&
                'Somme des quantités en transit
                Somme2& = c(2, 12) + Somme2&
                
                Set d = .FindNext(d)
            Loop While Not d Is Nothing And d.Address <> Départ
        End If
  End With
   
'Fait le total de tout (qt dans l'ASN = RCT-PO, Qté réceptionnée C3D, Qté en transit)
c(1, 5) = Somme&
c(1, 6) = Somme1&
c(1, 7) = Somme2&
Set c = c(0, 1)

Loop
    
    Set Zone = Range("C2:C" & Range("C65536").End(xlUp).Row)
    Zone.Offset(0, 250).FormulaR1C1 = "=IF(AND(RC8 = 0,RC27=""c""),RC6-RC7,RC9)"
    Zone.Offset(0, 6) = Zone.Offset(0, 250).Value
    Zone.Offset(0, 250).ClearContents
    
Set e = Worksheets("5-9-12").Range("A" & Worksheets("5-9-12").Range("A65536").End(xlUp).Row)
Set f = Worksheets("Product_Line").Range("A" & Worksheets("Product_Line").Range("A65536").End(xlUp).Row)
Do While e.Row > 1
    With Worksheets("Product_Line").Range("A2:A" & Worksheets("Product_Line").Range("A65536").End(xlUp).Row)
        Set f = .Find(e)
        If Not f Is Nothing Then
            Départ = f.Address
            Do
                e(1, 17) = f(1, 2)
            Set f = .FindNext(f)
            Loop While Not f Is Nothing And f.Address <> Départ
        End If
    End With
Set e = e(0, 1)
Loop

With Worksheets("5-9-12")
    .Range("L:L,N:N,P:P").NumberFormat = "dd/mm/yyyy"
    .Columns("A:AC").Columns.AutoFit
    .Columns("A:AC").HorizontalAlignment = xlCenter
End With

With Worksheets("Calendar")
    .Range("B:B").NumberFormat = "dd/mm/yyyy"
End With
'Toute cette partie consiste a ne pas avoir de vide pour le TCD
With Worksheets("5-9-12")
    'g = Echéance Contractuelle
    Set g = .Range("X" & .Range("X65536").End(xlUp).Row)
    'g1 = Date échéance
    Set g1 = .Range("Z" & .Range("Z65536").End(xlUp).Row)
End With
  
With Sheets("Calendar")
    Set Plage = .Range("B2:E" & .Range("B65536").End(xlUp).Row)
End With

 ' VLookup retourne une erreur si ne trouve pas la donnée

On Error Resume Next
    Do While g.Row > 1
        If g <> "" Then
            'Cherche FY en fonction date contractuelle
            h = WorksheetFunction.VLookup(g, Plage, 3, True)
            'Cherche Période en fonction date contractuelle
            k = WorksheetFunction.VLookup(g, Plage, 4, True)
            'Cherche Période en fonction date échéance
            k1 = WorksheetFunction.VLookup(g1, Plage, 4, True)
            If Err.Number = 0 Then
                g(1, -5) = h
                g(1, -4) = k
                g1(1, -5) = k1
            End If
            Err.Clear
        End If
    Set g = g(0, 1) ' Recule d'une ligne
    Set g1 = g1(0, 1) ' Recule d'une ligne
    Loop

Application.ScreenUpdating = True
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Re : Barre de progression sous VBAExcel 2007: g un petit soucis !

Bonjour Arpette,


vu que ton code, pour moi, est assez complexe; je fais appel aux grands maîtres XLDiens pour aider Arpette dans sa démarche.

Merci infiniment.


A+ :cool:
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87