IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

barre de progression


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Par défaut barre de progression
    Qui pourrait m’aider à résoudre mon problème svp

    Voila :
    Je suis amené à lancer des impressions d’étiquettes (Plusieurs milliers parfois) pour des produits et j’ai cette petite macro qui fonctionne très très bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub incrementeditionetiamazon()
    'Macro incrément+édition+boucle (Jusqu'à n° de ligne)
    '(Plusieurs etiquettes par ligne (EX : ETI PRODUIT)
     
     
    Dim x
     
    For x = 1 To Range("Z29")
     
           Range("R19").Value = Range("R19").Value + 1
     
           ActiveWindow.SelectedSheets.PrintOut Copies:=Cells(29, 11).Value
    Next x
     
    End Sub
    Dans cette macro la cellule citée comme R19 correspond à la ligne en court de traitement, alors que la celle nommée 29, 11 (Cellule Z29)
    Correspond au nombre total de ligne du fichier de base de données
    (Cette quantité peut être changée en fonction des besoins)

    Je voudrai mettre dans ce fichier Excel une barre de progression qui me donne en % la progression de ma commande (Edition) à partir de ces deux cellules.
    Je voudrai aussi que cette barre de progression s’affiche dès le lancement de la ci-dessus macro (Automatiquement)

    Franchement si quelqu’un pouvait m’aider, cela serai vraiment géniale

    Merci d’avance

    Christian

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,

    La proc ci-dessous crée deux labels sur la feuille, 1 servant de fond, l'autre servant de barre de progression ensuite, ta boucle d'impression avec l'incrémentation du label servant de barre puis le traitement fini, destruction des labels. Pour voir le rendu, mets en commentaire la ligne pour l'impression et lance la proc depuis la feuille.
    Avant tout, cocher la référence "Microsoft Form 2.0 Object Library" (Outils > Référence...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    Sub incrementeditionetiamazon()
     
        Dim Fe As Worksheet
        Dim Ctrl As OLEObject
        Dim LblProgress As MSForms.Label
        Dim LblFond As MSForms.Label
        Dim LargeurLabel As Integer
        Dim HauteurLabel As Integer
        Dim R As Double
        Dim I As Long
        Dim x As Long
     
        Set Fe = Worksheets("Feuil1")
     
        'supprime les labels si par hazard ils existent
        'gère l'erreur dans le cas contraire
        On Error Resume Next
        Fe.Shapes("LblProgress").Delete
        Fe.Shapes("LblFond").Delete
        On Error GoTo 0
     
        'défini les dimensions
        LargeurLabel = 500
        HauteurLabel = 20
     
        With Fe
     
            'crée le label servant de fond
            Set Ctrl = .OLEObjects.Add(ClassType:="Forms.Label.1", _
                                       Link:=False, _
                                       DisplayAsIcon:=False, _
                                       Left:=Application.UsableWidth / 2 - LargeurLabel / 2, _
                                       Top:=Application.UsableHeight / 2, _
                                       Width:=LargeurLabel, _
                                       Height:=HauteurLabel)
     
                'passe l'objet à la variable afin d'utiliser les propriétés des labels
                Set LblFond = Ctrl.Object
     
                'défini certaines de ces dernières
                With LblFond
                    .Name = "LblFond"
                    .Caption = ""
                    .BorderColor = vbBlue
                    .BorderStyle = fmBorderStyleSingle
                End With
     
            'crée le label servant de barre de progression
            Set Ctrl = .OLEObjects.Add(ClassType:="Forms.Label.1", _
                                       Link:=False, _
                                       DisplayAsIcon:=False, _
                                       Left:=Application.UsableWidth / 2 - LargeurLabel / 2, _
                                       Top:=Application.UsableHeight / 2, _
                                       Width:=0, _
                                       Height:=HauteurLabel)
     
                'idem que plus haut
                Set LblProgress = Ctrl.Object
     
                With LblProgress
                    .Name = "LblProgress"
                    .Caption = ""
                    .BackColor = vbBlue
                End With
     
     
        End With
     
        'rapport
        R = LargeurLabel / Range("Z29")
     
        'boucle d'impression
        For x = 1 To Range("Z29")
     
            Range("R19").Value = Range("R19").Value + 1
            LblProgress.Width = x * R
            DoEvents
     
            ActiveWindow.SelectedSheets.PrintOut Copies:=Cells(29, 11).Value
     
        Next x
     
        'destruction des labels
        On Error Resume Next
        Fe.Shapes("LblProgress").Delete
        Fe.Shapes("LblFond").Delete
        On Error GoTo 0
     
        Set Fe = Nothing
        Set Ctrl = Nothing
        Set LblProgress = Nothing
        Set LblFond = Nothing
     
    End Sub
    Hervé.

  3. #3
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut,pourquoi ne pas placer tout bêtement qqch comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.StatusBar = x & " \ " & Range("Z29")
    dans ta boucle ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut,pourquoi ne pas placer tout bêtement qqch comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.StatusBar = x & " \ " & Range("Z29")
    dans ta boucle ?
    bonsoir,

    Merci beaucoup
    Mais j'ai mis cette ligne entre la derniere ligne de ma macro et le Endsub mais cela ne me donne rien quand je lance ma macro

    Christian

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    une idée comme une autre, tu importes l'USF en piece jointe, et dans ton code :
    le tout à adapter, surtout les limites de la barre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub nimportequoi()
    barimp.Show
    barimp.BARPAT.Min = 1: barimp.BARPAT.Max = 300
    barimp.Repaint
    '..code
    barimp.BARPAT = 20
    '..code
    barimp.BARPAT = 40
    '..code
    barimp.BARPAT = 60
    '..code
    barimp.BARPAT = 80
    '..code
    barimp.BARPAT = 100
    '..code
    barimp.BARPAT = 120
    '..code
    barimp.BARPAT = 140
    '..code
    barimp.BARPAT = 180
    '..code
        barimp.BARPAT = 200
        Unload barimp
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Mais j'ai mis cette ligne entre la derniere ligne de ma macro et le Endsub mais cela ne me donne rien quand je lance ma macro
    Réfléchis un peu tout de même avant de faire n'importe quoi

Discussions similaires

  1. Indy FTP (idFTP) faire une barre de progress de transfert
    Par Harry dans le forum Web & réseau
    Réponses: 4
    Dernier message: 09/07/2004, 13h15
  2. [VB.NET] Pb avec le bouton Annuler d'1 barre de progression
    Par dada1982 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2004, 09h56
  3. Réponses: 12
    Dernier message: 27/05/2004, 00h13
  4. [DEBUTANT] Barre de progression
    Par pupupu dans le forum MFC
    Réponses: 4
    Dernier message: 18/01/2004, 16h47
  5. [web] Barre de Progression ASCII
    Par Red Bull dans le forum Web
    Réponses: 13
    Dernier message: 05/06/2003, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo