Afficher un userform pendant recalcul sommeprod ?

terence75017

XLDnaute Nouveau
Bonjour, enfin Re !


juste une question, est-il possible d'afficher un userform pendant le recalcule d'une info (avec la formule sommeprod entre autre...)

Car je compte créer un message du style "veuillez patienter" pendant que ma formule recalcul les données.


Encore une fois merci d'avance pour votre réponse !

a++:):):)
 

skoobi

XLDnaute Barbatruc
Re : Afficher un userform pendant recalcul sommeprod ?

Bonjour à tous,

j'ai essayé avec une feuille qui met longtemps à se recaculer et au mieux j'ai un clignotement de la boîte de dialogue, même si le recalcul prend plusieurs secondes...
pas plus de résultats avec l'évènement Calculate... En fait elle semble tarder à s'afficher ce qui n'est pas trés compréhensible...

Apparemment, la macro évenementielle ne s'execute qu'après le calcul et pas en même temps.
De même, si application.calculate se trouve dans la macro, la macro ne continue pas tant que le calcul n'est pas fini, à confirmer...
J'ai aussi le phénomène de clignotement :(
 

skoobi

XLDnaute Barbatruc
Re : Afficher un userform pendant recalcul sommeprod ?

Re,

basé sur ce que j'ai dis précédemment, ce code doit marcher (en tout cas chez-moi oui):

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$36" Then
  Application.Calculation = xlCalculationManual
  UserForm1.Show 0
  Application.Calculate
  UserForm1.Hide
  Application.Calculation = xlCalculationAutomatic
End If
End Sub

Pourquoi ce compliquer la vie?:rolleyes:
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Afficher un userform pendant recalcul sommeprod ?

Bonjour à tous,

Nickel Skoobi, ça fonctionne parfaitement. j'ai juste rajouté un DoEvents après Userform1.Show 0 pour qu'il redessine la boîte de dialogue.

j'ai juste l'impression qu'il calcule deux fois (moi j'ai fait des tests avec des fonction ALEA alors je vois bien la différence) mais je vois pas comment contourner ça...
 

tototiti2008

XLDnaute Barbatruc
Re : Afficher un userform pendant recalcul sommeprod ?

Bon, finalement une possibilité pour que le calcul n'ai lieu qu'une fois :

on met la Propriété EnableCalculation de la Feuille à False

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    UserForm1.Show 0
    DoEvents
    ActiveSheet.EnableCalculation = True
    ActiveSheet.EnableCalculation = False
    UserForm1.Hide
End If
End Sub

Bon, le gros problème est que la feuille ne se recalcule pas en temps normal, seulement si on modifie les cellules prévues dans Worksheet_Change...
 

skoobi

XLDnaute Barbatruc
Re : Afficher un userform pendant recalcul sommeprod ?

Bonjour à tous,

Nickel Skoobi, ça fonctionne parfaitement. j'ai juste rajouté un DoEvents après Userform1.Show 0 pour qu'il redessine la boîte de dialogue.

j'ai juste l'impression qu'il calcule deux fois (moi j'ai fait des tests avec des fonction ALEA alors je vois bien la différence) mais je vois pas comment contourner ça...

Re bonjour,

pour cela il faut éviter que l'évenement devienne récursive comme ceci (ne pas oublié de la rendre à nouveau active à la fin du code) et là sa devrait le faire;)


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
[COLOR=blue][B]Application.EnableEvents = False[/B][/COLOR]
If Target.Address = "$A$36" Then
  Application.Calculation = xlCalculationManual
  UserForm1.Show 0
  DoEvents
  Application.Calculate
  UserForm1.Hide
  Application.Calculation = xlCalculationAutomatic
End If
[B][COLOR=blue]Application.EnableEvents = True[/COLOR][/B]
End Sub
 
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : Afficher un userform pendant recalcul sommeprod ?

Encore moi.....,

Je pensais que la macro événementielle s'exécute avant le calcul, que nini,
ce dernier se produit en premier d'où 2 calculs, rrrrrr :mad:.
Donc, pour que ça marche il faut passer le calcul excel en manuel (dans l'option) puis exécuter ceci:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
[COLOR=Black]Application.EnableEvents = False[/COLOR]
If Target.Address = "$A$36" Then
  UserForm1.Show 0
  DoEvents
  Application.Calculate
  UserForm1.Hide
End If
[COLOR=Black]Application.EnableEvents = True[/COLOR]
End Sub
Remettre éventuellement l'option en auto à la fermeture du fichier avec l'évènement Private Sub Workbook_BeforeClose(Cancel As Boolean) ET
l'option en manuel à l'ouverture du fichier avec l'évènement Private Sub Workbook_Open()

Code:
Private Sub Workbook_Open()
Application.Calculation = xlCalculationManual
End Sub

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Calculation = xlCalculationAutomatic
End Sub


Voili voilou.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 508
Messages
2 089 138
Membres
104 047
dernier inscrit
bravetta