Faire patienter l'utilisateur avec un webbrowser VBA
Bonjour le forum
J'ai un souci avec mon application. En effet, j'ai un userform à afficher sur lequel se trouve un webbrowser servant à faire patienter l'utilisateur. Dans la feuille démarrage je clique sur le bouton démarrer puis l'userform s'affiche après avoir saisir le nombre 1 on clique sur le bouton afficher ou masquer case à la suite un message Patientez s'affiche. Devant ce message le webbrowser se positionne avec trois ronds qui doivent défiler pendant que la macro VBA s'exécute en arrière plan.
Mon souhait est que le défilement du webbrowser continu mais il se bloque. Serait-il possible de faire le défilement en continu pendant que la macro tourne?
Je joins mon fichier. Merci pour votre aide
Bonsoir,
juste pour répondre à votre demande sans parler du fait que ce n'est pas forcément utile, ou bien qu'il existe d'autre méthodes...
Le code de la SUB de masquage affichage modifiée :
Private Sub CommandButton1_Click()
Label1.Left = 42
Label1.Top = 36
WebBrowser1.Left = 76
WebBrowser1.Top = 39
CommandButton1.Top = 1000
'===================== COMPTE A REBOUR ======================================
CASE_COMPTE_A_REBOUR.Caption = 1
Dim COMPTE_A_REBOUR As Integer
With UserForm1
For COMPTE_A_REBOUR = CASE_COMPTE_A_REBOUR.Caption To 0 Step -1
Application.Wait Now + TimeValue("00:00:01")
CASE_COMPTE_A_REBOUR.Caption = COMPTE_A_REBOUR
UserForm1.Repaint
Next
End With
'============================================================================
If CASE_COMPTE_A_REBOUR.Caption = 0 Then
If Sheets("Valeur").Range("A2") = "afficher case" Then
'ON MASQUE LES LIGNES
Dim MASQUER_LIGNE As Range
For Each MASQUER_LIGNE In Sheets("Valeur").Range("C3:C2927")
If MASQUER_LIGNE = "" Then 'SI UNE CASE DE NOM ET PRENOMS EST VIDE ALORS ...
MASQUER_LIGNE.EntireRow.Hidden = False 'ON MASQUE LES CASE DE NOM ET PRENOMS QUI SONT VIDES
DoEvents
End If
Next
'ON MASQUE LES COLONNES
Dim MASQUER_COLONNE As Range
For Each MASQUER_COLONNE In Sheets("Valeur").Range("D2:J2")
If MASQUER_COLONNE = "" Then 'SI UNE CASE EST VIDE ALORS ...
MASQUER_COLONNE.EntireColumn.Hidden = False 'ON MASQUE LES CASES QUI SONT VIDES
DoEvents
End If
Next
Sheets("Valeur").Range("A2") = "masquer case"
CommandButton1.Caption = Sheets("Valeur").Range("A2")
Unload Me
Exit Sub
ElseIf Sheets("Valeur").Range("A2") = "masquer case" Then
'ON MASQUE LES LIGNES
Dim MASQUER_LIGNE2 As Range
For Each MASQUER_LIGNE2 In Sheets("Valeur").Range("C3:C2927")
If MASQUER_LIGNE2 = "" Then 'SI UNE CASE DE NOM ET PRENOMS EST VIDE ALORS ...
MASQUER_LIGNE2.EntireRow.Hidden = True 'ON MASQUE LES CASE DE NOM ET PRENOMS QUI SONT VIDES
DoEvents
End If
Next
'ON MASQUE LES COLONNES
Dim MASQUER_COLONNE2 As Range
For Each MASQUER_COLONNE2 In Sheets("Valeur").Range("D2:J2")
If MASQUER_COLONNE2 = "" Then 'SI UNE CASE EST VIDE ALORS ...
MASQUER_COLONNE2.EntireColumn.Hidden = True 'ON MASQUE LES CASES QUI SONT VIDES
DoEvents
End If
Next
Sheets("Valeur").Range("A2") = "afficher case"
CommandButton1.Caption = Sheets("Valeur").Range("A2")
Unload Me
End If
End If
End SubLe principe : ajout de DoEvents dans les boucles afin de mettre à jour l'application mais cela ralenti énormément le code alors que le clic sur le bouton sans cosmétique l'action est rapide.
Une des solutions vu que l'accès feuille ralenti la procédure serait de mettre la plage en mémoire dans un tableau, puis scanner ce tableau en mettant en mémoire les numéro de ligne à masquer, ensuite utiliser en une seule fois ces numéros pour masquer les lignes en une seule fois.
Sinon il y a ceci.
@ bientôt
LouReeD
Waaaahou vous êtes vraiment des experts merci énormément ça marche
Bonjour,
merci pour vos remerciements et votre retour !
Mais comme dit, le code optimisé n'aurait pas besoin de cosmétique de ce genre, me semble-t-il.
@ bientôt
LouReeD