XL 2019 MsgBox temporaire

gg13

XLDnaute Occasionnel
Bonjour,
J'utilise une listbox dans un Userform qui se met à jour après un calcul assez long.
Ce calcul est lancé par un bouton.
Est-il possible d'afficher un message d'attente qui se referme tout seul à la fin du calcul.
Merci
GG13
 

gg13

XLDnaute Occasionnel
Mettez la propriété ShowModal du UserForm à False.
Mettez Me.Hide avant et Me.Show après.
Show modal est déjà à False..

Si je place Me.Hide avant
- mon USF principal se ferme
- la barre apparait sur une feuille mais reste à 0
- le calcul se fait
- la barre ne se ferme pas et reste à l'écran sur une feuille
- fin sur la feuille et pas sur le USF

Me.Hide
For ii = 1 To 100 ' barre progression
Call UserForm_BarreProgression.BarreProgression("Module_test", 100, ii)

' calcul ............................................


Me.Show
Next ii '
 

TooFatBoy

XLDnaute Barbatruc
Encore un prb," impossible d'afficher une feuille non modale si une feuille modale est affichée."
Est-ce à dire que tu essayes d'afficher le UserForm de la barre de progression par-dessus un autre UserForm ?

Dans ce cas, peut-être que ladite barre de progression pourrait être intégrée à ce UserForm ?

Ou peut-être devrais-tu commencer par un simple message du genre "Travail en cours" quitte à faire évoluer plus tard vers une jolie barre de progression si ça en vaut vraiment la peine.
 

gg13

XLDnaute Occasionnel
"Est-ce à dire que tu essayes d'afficher le UserForm de la barre de progression par-dessus un autre UserForm"
Oui

commencer par un simple message
C'était ma question du début.
Rappel:
"J'utilise une listbox dans un Userform qui se met à jour après un calcul assez long.
Ce calcul est lancé par un bouton.
Est-il possible d'afficher un message d'attente qui se referme tout seul à la fin du calcul."

ladite barre de progression pourrait être intégrée à ce UserForm
Je l'ai déjà fait c'était je crois sur Excel 97 avec la fonction Pct.
C'était compliqué la nouvelle fonction est plus simple.

gg13
 

TooFatBoy

XLDnaute Barbatruc
ladite barre de progression pourrait être intégrée à ce UserForm
Je l'ai déjà fait c'était je crois sur Excel 97 avec la fonction Pct.
C'était compliqué la nouvelle fonction est plus simple.
Je crois que tu ne m'as pas compris. 😉
Je parlais juste d'intégrer la barre de progression dans ton UserForm à toi. Rien d'autre.



commencer par un simple message
C'était ma question du début.
Rappel:
"J'utilise une listbox dans un Userform qui se met à jour après un calcul assez long.
Ce calcul est lancé par un bouton.
Est-il possible d'afficher un message d'attente qui se referme tout seul à la fin du calcul."
Pour moi, "un message d'attente qui se referme tout seul" ça veut dire une MsgBox ou un UserForm (le UserForm étant plus simple pour cela).

Mais je crois que dans ton cas c'est peut-être partir dans une mauvaise direction.
Un simple Label dans ton UserForm serait probablement mieux pour commencer.
 
Dernière édition:

gg13

XLDnaute Occasionnel
Voilà mon code, je pense ne pas intégrer les lignes au bon endroit.
J'en ai testé plusieurs....


Me.Hide
For ii = 1 To 100 ' barre progression
Call UserForm_BarreProgression.BarreProgression("Module_test", 100, ii) ' barre progression

For x = 1 To 10000
For Each Target In [AA2,AB2,AC2]
Target(2).Resize(Rows.Count - Target.Row).ClearContents 'RAZ
nlig = Int(Val(Target(0, 1))) 'new
If nlig > 1 Then
With Target(2, 0).Resize(nlig)
tablo = .Value 'mémorise
.Formula = "=RAND()"
.Columns(2) = tablo
.Resize(, 2).Sort .Cells, Header:=xlNo 'tri
.Value = tablo 'restitution
End With
End If
Next
If Range("AH2").Value = Range("Z1").Value Then
Range("AI2").Value = x
Exit Sub
End If

Next x

Next ii ' barre de progresion
Me.Show
 

TooFatBoy

XLDnaute Barbatruc
Avec la balise code=vb, et un peu d'indentation, le code est plus facile à lire. ;)

VB:
Me.Hide

For ii = 1 To 100 ' barre progression

    Call UserForm_BarreProgression.BarreProgression("Module_test", 100, ii) ' barre progression

    For x = 1 To 10000

        For Each Target In [AA2,AB2,AC2]
            Target(2).Resize(Rows.Count - Target.Row).ClearContents 'RAZ
            nlig = Int(Val(Target(0, 1))) 'new
            If nlig > 1 Then
                With Target(2, 0).Resize(nlig)
                    tablo = .Value 'mémorise
                    .Formula = "=RAND()"
                    .Columns(2) = tablo
                    .Resize(, 2).Sort .Cells, Header:=xlNo 'tri
                    .Value = tablo 'restitution
                End With
            End If
        Next

        If Range("AH2").Value = Range("Z1").Value Then
            Range("AI2").Value = x
            Exit Sub
        End If

    Next x

Next ii ' barre de progresion

Me.Show

Et là on voit bien que ta boucle For ii n'et pas au bon endroit : tu fais faire 100 fois le travail originel. :(
 

TooFatBoy

XLDnaute Barbatruc
J'avoue que je ne comprends rien du tout à tout ça, mais au hasard, est-ce que ceci fonctionnerait moins mal ??? :

VB:
For x = 1 To 10000

    if (x mod 100) = 50 then Call UserForm_BarreProgression.BarreProgression("Module_test", 100, x) ' barre progression

    For Each Target In [AA2,AB2,AC2]
        Target(2).Resize(Rows.Count - Target.Row).ClearContents 'RAZ
        nlig = Int(Val(Target(0, 1))) 'new
        If nlig > 1 Then
            With Target(2, 0).Resize(nlig)
                tablo = .Value 'mémorise
                .Formula = "=RAND()"
                .Columns(2) = tablo
                .Resize(, 2).Sort .Cells, Header:=xlNo 'tri
                .Value = tablo 'restitution
            End With
        End If
    Next

    If Range("AH2").Value = Range("Z1").Value Then
        Range("AI2").Value = x
        Exit Sub
    End If

Next x


T'es sûr de ne pas vouloir un simple Label ? Crois-moi, ce serait un peu plus simple.
Et au moins tu pourrais faire tout seul la maintenance de ton code, ce qui serait (à mon avis) un gros avantage pour toi.
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
99