Problème d'affichage de userform Excel

Le
simulacre25 Hors ligne
Bonjour,

Je mets à jour l'une de mes applications et je rencontre un phénomène étrange lors de la navigation entre deux formulaires. Le passage de l'un à l'autre se fait normalement :

Bouton d'accès au formulaire 2 - Ajout_Suppr_Donnees (situé sur le 1 - Accueil)

Accueil.Hide
Ajout_Suppr_Donnees.Show

Lors du retour sans rien faire d'autre du 2 au 1 tout se passe bien :

Ajout_Suppr_Donnees.Hide
Sheets("Accueil").Select
Range("H10").Select
Accueil.Show

Mes deux formulaires sont en modal car sinon je rencontre des problèmes en passant de l'un à l'autre avec disparition du formulaire.

Le problème intervient lorsque je lance une procédure à partir du 2ème formulaire. Celle-ci fonctionne et effectue les modifications souhaitées. Hors lorsque j'utilise le bouton de retour, des événements graphiques incohérents se produisent : trainées laissées par les formulaires lors des déplacements, affichage de formulaires les uns sur les autres bien que les procédures les masquent

L'utilisation d'un troisième bouton masquant mon formulaire 1 pour accéder à une feuille excel cette fois permet de résoudre ces problèmes lors du retour au formulaire 1.

Je ne peux transmettre l'application car elle contient des données confidentielles au sein même du code.

Si vous avez déjà rencontré ce type de problème, je vous remercie par avance de votre aide.

Cordialement.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #23131081
Bonjour,

Dans tes procédures, juste après les lignes de code qui masque le formulaire,
ajoute la ligne de commande
Doevents

comme ceci :
Accueil.Hide
DoEvents
Ajout_Suppr_Donnees.Show

Si dans tes formulaires, tu utilises l'événement "Userform_Activate"
ajoute aussi juste après la ligne de commande affichant le formulaire,
Doevents.

La macro deviendrait :
Accueil.Hide
DoEvents
Ajout_Suppr_Donnees.Show
DoEvents

Cela permettra aux formulaires de s'afficher correctement.

Attention, si tu utilises la ligne de code de ton formulaire
Application.ScreenUpdating = False
Il ne faut pas oublier de passer cette ligne de code à True
au moment opportun sinon, l'affichage devient pénible!





MichD
--------------------------------------------
"simulacre25" a écrit dans le message de groupe de discussion :

Bonjour,

Je mets à jour l'une de mes applications et je rencontre un phénomène étrange
lors de la navigation entre deux formulaires. Le passage de l'un à l'autre se
fait normalement :

Bouton d'accès au formulaire 2 - Ajout_Suppr_Donnees (situé sur le 1 -
Accueil)

Accueil.Hide
Ajout_Suppr_Donnees.Show

Lors du retour sans rien faire d'autre du 2 au 1 tout se passe bien :

Ajout_Suppr_Donnees.Hide
Sheets("Accueil").Select
Range("H10").Select
Accueil.Show

Mes deux formulaires sont en modal car sinon je rencontre des problèmes en
passant de l'un à l'autre avec disparition du formulaire.

Le problème intervient lorsque je lance une procédure à partir du 2ème
formulaire. Celle-ci fonctionne et effectue les modifications souhaitées. Hors
lorsque j'utilise le bouton de retour, des événements graphiques incohérents se
produisent : trainées laissées par les formulaires lors des déplacements,
affichage de formulaires les uns sur les autres bien que les procédures les
masquent...

L'utilisation d'un troisième bouton masquant mon formulaire 1 pour accéder à
une feuille excel cette fois permet de résoudre ces problèmes lors du retour au
formulaire 1.

Je ne peux transmettre l'application car elle contient des données
confidentielles au sein même du code.

Si vous avez déjà rencontré ce type de problème, je vous remercie par avance de
votre aide.

Cordialement.
simulacre25 Hors ligne
Le #23131221
michdenis a écrit le 16/02/2011 à 12h31 :
Bonjour,

Dans tes procédures, juste après les lignes de code qui masque le
formulaire,
ajoute la ligne de commande
Doevents

comme ceci :
Accueil.Hide
DoEvents
Ajout_Suppr_Donnees.Show

Si dans tes formulaires, tu utilises l'événement
"Userform_Activate"
ajoute aussi juste après la ligne de commande affichant le formulaire,
Doevents.

La macro deviendrait :
Accueil.Hide
DoEvents
Ajout_Suppr_Donnees.Show
DoEvents

Cela permettra aux formulaires de s'afficher correctement.

Attention, si tu utilises la ligne de code de ton formulaire
Application.ScreenUpdating = False
Il ne faut pas oublier de passer cette ligne de code à True
au moment opportun sinon, l'affichage devient pénible!





MichD
--------------------------------------------
"simulacre25" a écrit dans le message de groupe de discussion
:

Bonjour,

Je mets à jour l'une de mes applications et je rencontre un
phénomène étrange
lors de la navigation entre deux formulaires. Le passage de l'un à
l'autre se
fait normalement :

Bouton d'accès au formulaire 2 - Ajout_Suppr_Donnees (situé sur
le 1 -
Accueil)

Accueil.Hide
Ajout_Suppr_Donnees.Show

Lors du retour sans rien faire d'autre du 2 au 1 tout se passe bien :

Ajout_Suppr_Donnees.Hide
Sheets("Accueil").Select
Range("H10").Select
Accueil.Show

Mes deux formulaires sont en modal car sinon je rencontre des problèmes
en
passant de l'un à l'autre avec disparition du formulaire.

Le problème intervient lorsque je lance une procédure à
partir du 2ème
formulaire. Celle-ci fonctionne et effectue les modifications
souhaitées. Hors
lorsque j'utilise le bouton de retour, des événements graphiques
incohérents se
produisent : trainées laissées par les formulaires lors des
déplacements,
affichage de formulaires les uns sur les autres bien que les procédures
les
masquent...

L'utilisation d'un troisième bouton masquant mon formulaire 1 pour
accéder à
une feuille excel cette fois permet de résoudre ces problèmes
lors du retour au
formulaire 1.

Je ne peux transmettre l'application car elle contient des données
confidentielles au sein même du code.

Si vous avez déjà rencontré ce type de problème, je
vous remercie par avance de
votre aide.

Cordialement.


Merci pour cette première réponse. Après test cela ne fonctionne pas mais j'avance.

En fait l'anomalie se produit dès lancement de ma procédure sur le formulaire 2 (ou son annulation en cours de route):

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Ajout_Suppr_Donnees.Hide
DoEvents
Choix_Annee.Show
DoEvents

Dim MonAnnee As Integer
MonAnnee = Sheets("Param").Range("B2").Value

Sheets("Phase 3 - Clés").Select

Range("AA2").Select
ActiveCell.FormulaR1C1 = "=COUNTA(C[-24])"

Dim MaFin As Integer
MaFin = Range("AA2").Value

Dim a As Integer

For a = 2 To MaFin

If Cells(a, 3).Value = MonAnnee Then
Message = MsgBox("Des données sont déjà présentes pour l'année " & MonAnnee & ", abandon de la procédure.", vbOKOnly)
If vbOK = 1 Then
Sheets("Accueil").Select
Range("H10").Select
Ajout_Suppr_Donnees.Show
DoEvents
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
End If
End If

Next a

On Error GoTo PasdeFichier
Dim MonChemin As String
MonChemin = ActiveWorkbook.Path
MonAnnee = Workbooks("Mon appli.xls").Sheets("Param").Range("B2").Value

ChDir MonChemin
Workbooks.Open Filename:= _
MonChemin & "1 - " & MonAnnee & " - mesdonnées.xls"
Range("A2").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Windows("XL OGUR.xls").Activate
Sheets("Mafeuiile").Select
Range("AA2").Select
ActiveCell.FormulaR1C1 = "=COUNTA(C[-26])+1"

Dim Maligne As Integer
Maligne = Range("AA2").Value

Range("A" & Maligne).Select
ActiveSheet.Paste

Windows("01 - " & MonAnnee & " - mesdonnées.xls").Activate
ActiveWorkbook.Close

Message = MsgBox("Données de l'exercice " & MonAnnee & " ajoutées", vbOKOnly, "Ajout des données")

Sheets("Accueil").Select
Range("H10").Select
Ajout_Suppr_Donnees.Show
DoEvents

Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub

PasdeFichier:
Message = MsgBox("Le fichier demandé n'existe pas pour l'année concernée, la procédure d'ajout est abandonnée.", vbOKOnly)
Sheets("Accueil").Select
Range("H10").Select
Ajout_Suppr_Donnees.Show
DoEvents
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
End Sub

L'annulation en cours de route peut intervenir avec un bouton Annuler sur le formulaire Choix_Annee avec le code suivant :

Private Sub Annul_annee_Click()
Choix_Annee.Hide
DoEvents
Ajout_Suppr_Donnees.Show
DoEvents
End
End Sub

A voir en fonction de ces nouveaux éléments si cela peut orienter vers une solution.

J'ai aussi essayé d'intégrer le code issu du 3ème bouton de mon premier message, à savoir accès à la feuille concernée qui résolvait le problème puis seulement après affichage du formulaire d'accueil, mais l'astuce ne fonctionne pas.

Merci.
michdenis
Le #23131421
Cette ligne de code :

Application.ScreenUpdating = False

devrait s'appliquer lorsque l'on ne veut pas que le rafraîchissement de l'écran
s'effectue. Cela augmente la rapidité d'une macro qui doit inscrire beaucoup
d'informations dans une feuille et cela empêche aussi de voir tous les déplacements
qu'une macro peut susciter.

Cependant, si tu utilises cette ligne de code pour masquer un formulaire dans le
but d'en afficher un nouveau, il ne faut pas te surprendre du "bazar" que tu crées.

Inverse l'ordre des commandes :


Ajout_Suppr_Donnees.Hide
Choix_Annee.Show
DoEvents

Application.ScreenUpdating = False
Application.DisplayAlerts = False

'Le reste de ton code.

'Ne pas oublier de remettre la valeur à true à la fin de la procédure.
Application.ScreenUpdating = True

MichD
--------------------------------------------
simulacre25 Hors ligne
Le #23131531
michdenis a écrit le 16/02/2011 à 15h04 :
Cette ligne de code :

Application.ScreenUpdating = False

devrait s'appliquer lorsque l'on ne veut pas que le rafraîchissement de
l'écran
s'effectue. Cela augmente la rapidité d'une macro qui doit inscrire
beaucoup
d'informations dans une feuille et cela empêche aussi de voir tous les
déplacements
qu'une macro peut susciter.

Cependant, si tu utilises cette ligne de code pour masquer un formulaire dans
le
but d'en afficher un nouveau, il ne faut pas te surprendre du "bazar"
que tu crées.

Inverse l'ordre des commandes :


Ajout_Suppr_Donnees.Hide
Choix_Annee.Show
DoEvents

Application.ScreenUpdating = False
Application.DisplayAlerts = False

'Le reste de ton code.

'Ne pas oublier de remettre la valeur à true à la fin de la
procédure.
Application.ScreenUpdating = True

MichD
--------------------------------------------


Merci beaucoup. Cela fonctionne parfaitement désormais.

En sortie de procédure, je place aussi les screenupdating à true avant d'afficher les formulaires.

Merci pour cette explication claire car j'ai toujours pour habitude de placer les application.screenupdating en tout début ou fin de procédure.

J'avoue n'avoir jamais réfléchi à l'impact sur la gestion des formulaires.

Merci pour votre aide précieuse. Que cela puisse en inspirer d'autres.
Publicité
Poster une réponse
Anonyme