Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload ...)

  • Initiateur de la discussion Initiateur de la discussion Sebast
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sebast

XLDnaute Impliqué
Bonjour au forum,

malgré mes recherches dans de nombreuses sources, je n'arrive pas à comprendre pourquoi un userform reste affiché à l'écran malgré une instruction qui devrait l'en effacer.
J'ai bien compris la différence entre userform1.hide et unload userform1, mais ni l'une ni l'autre de ces instructions "vide" l'écran du userform

Je passe par plusieurs étapes :
1) j'affiche mon userform
2) avec ce userform, je recueille les choix de l'utilisateur (données stockées dans un onglet)
3) je lance un traitement et c'est là que j'aimerais "purger" l'écran et ne plus afficher ce userform

C'est donc par unload userform1 que je commence, avant le début du traitement, mais malheureusement, en vain.

Quelqu'un a-t-il une idée ?

Merci d'avance
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

Salut le forum, Sebast & Hulk,

3) je lance un traitement et c'est là que j'aimerais "purger" l'écran et ne plus afficher ce userform
>> C'est peut-être à la suite et fin de ce traitement, que tu pourrais lui indiquer :
Code:
Unload Me

A+
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

Hello,

Là sans fichier joint, on ne pourra te répondre !

T'as peut-être un "UserForm1.Show" qui traine quelque part...

_______________________________________________________________

Salut Hulk,

voici mon code : tu verras que dès la routine suivant l'affichage du userform, je mets l'instruction unload
Je travaille avec des enchainements de call ... (voir à la fin)
Merci pour ton aide

_______________________________________________________________________________________

Option Explicit
Public Kombination As Variant


Sub Periode_Anfrage()
Sheets("Paramètres").Select
Range("G100").Select
UserForm_Wahl_Tag_Monat_JAhr.Show
End Sub



Sub Arbeitsmappe_hinzufuegen()

Unload UserForm_Wahl_Tag_Monat_JAhr ' dès cette ligne, je désactive le userform !!! mais en vain !!!


Application.ScreenUpdating = False
Dim i As Byte
Sheets("Paramètres").Select
Kombination = Range("G105").Value & Range("H105").Value


For i = 1 To Sheets.Count
If Kombination = Sheets(i).Name Then
Exit Sub
End If
Next i
Sheets.Add after:=Sheets(Worksheets.Count)
Sheets(Worksheets.Count).Name = Kombination
With ActiveWorkbook.Sheets(Kombination).Tab
.Color = 49407
.TintAndShade = 0
End With
End Sub


Sub Konvertieren()

Dim Wb As Workbook
For Each Wb In Workbooks
If Wb.Name = "Chiffres_ELIT.xlsx" Then
Windows("Chiffres_ELIT.xlsx").Close
End If
Next Wb


ChDir _
"C:\Documents and Settings\Propriétaire\Mes documents\DATA\Perso\Informatique\Statistiques"
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\Propriétaire\Mes documents\DATA\Perso\Informatique\Statistiques\Chiffres_ELIT" _
, Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=True _
, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1) _
, Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), _
Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15 _
, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), _
Array(22, 1), Array(23, 1)), TrailingMinusNumbers:=True



Range("W1").Select
ActiveCell.FormulaR1C1 = "Mois"
Range("X1").Select
ActiveCell.FormulaR1C1 = "Année"
Range("Y1").Select
ActiveCell.FormulaR1C1 = "Période"

Application.DisplayAlerts = False



ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\Propriétaire\Mes documents\DATA\Perso\Informatique\Statistiques\Chiffres_ELIT.xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False




Dim LetzteZeile As Long
LetzteZeile = Sheets("Chiffres_ELIT").Range("A" & Rows.Count).End(xlUp).Row
Dim i As Long
Dim Month As Variant
Dim Year As Variant
Dim Periode As Variant

Workbooks("Stat_semaine_light.xlsm").Activate
Sheets("Paramètres").Select
Month = Range("G105").Value
Year = Range("H105").Value

Periode = "du 1er au " & Range("F105").Value

Workbooks("chiffres_ELIT.xlsx").Worksheets("Chiffres_ELIT").Activate
With Sheets("Chiffres_ELIT")
For i = 2 To LetzteZeile
Cells(i, 23) = Month
Cells(i, 24) = Year
Cells(i, 25) = Periode
Next i
End With



ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\Propriétaire\Mes documents\DATA\Perso\Informatique\Statistiques\Chiffres_ELIT.xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False


Application.DisplayAlerts = True


End Sub



Sub Transferieren()
Windows("Chiffres_ELIT.xlsx").Activate

Cells.Select
Selection.Copy

Windows("Stat_semaine_light.xlsm").Activate

Worksheets(Kombination).Activate


Range("a1").Activate
ActiveSheet.Paste
Application.CutCopyMode = False

Windows("Chiffres_ELIT.xlsx").Close


End Sub


Sub Sortieren_mit_dynamischer_Zone()
Sheets("BASE").Activate
Dim numlign As Long
numlign = ActiveSheet.UsedRange.Rows.Count
Range("A2:Y" & numlign).Name = "Flaeche_zum_Sortieren"
Application.Goto reference:="Flaeche_zum_Sortieren"
ActiveWorkbook.Worksheets("BASE").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BASE").Sort.SortFields.Add Key:=Range("X2:X" & numlign) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("BASE").Sort.SortFields.Add Key:=Range("W2:W" & numlign) _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("BASE").Sort
.SetRange Range("A1:Y" & numlign)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub


Sub Zeilen_entfernen_und_Daten_einfuegen()
Dim LetzteZeile As Long
Dim i As Long
Dim Month As String
Dim Year As Long
Sheets("Paramètres").Activate
Month = Range("G105").Value
Year = Range("H105").Value
Sheets("BASE").Activate
For i = ActiveSheet.UsedRange.Rows.Count To 2 Step -1
If Cells(i, 23) = Month And Cells(i, 24) = Year Then Rows(i).Delete
Next i


Sheets("Paramètres").Activate
Dim Concaténation As String
Concaténation = Range("G105").Value & Range("H105").Value
Worksheets(Concaténation).Activate
Range("Y2").Select
Dim ZeilenNummer As Long
ZeilenNummer = ActiveSheet.UsedRange.Rows.Count
Range("A2:Y" & ZeilenNummer).Name = "Selektierte_Flaeche"
Application.Goto reference:="Selektierte_Flaeche"


Selection.Copy
Sheets("BASE").Select
Rows("2:2").Select
Selection.Insert Shift:=xlDown




End Sub




Sub Stats()
Call Periode_Anfrage
Call Arbeitsmappe_hinzufuegen
Call Konvertieren
Call Transferieren
Call Sortieren_mit_dynamischer_Zone
Call Zeilen_entfernen_und_Daten_einfuegen
Call Purge
End Sub





Sub Purge()


Dim i As Long
Dim client_fictif As Range
Dim Cellule As Range
Dim ReponseMsgBox As Byte
Dim Base As Range

Set Base = Sheets("Base").Range("E2:E" & Sheets("Base").Range("E" & Rows.Count).End(xlUp).Row)
Set client_fictif = Sheets("Paramètres").Range("F2:F" & Sheets("Paramètres").Range("F" & Rows.Count).End(xlUp).Row)
For Each Cellule In client_fictif
If Application.WorksheetFunction.CountIf(Base, Cellule.Value) > 0 Then
ReponseMsgBox = MsgBox("voulez-vous vraiment supprimer " & Cellule.Value & " ?", vbOKCancel, "Question")
If ReponseMsgBox = vbOK Then
With Sheets("Base")
For i = .UsedRange.Rows.Count To 2 Step -1
If .Cells(i, 5) = Cellule.Value Then .Rows(i).Delete
Next i
End With
End If
End If
Next
End Sub
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

Bonjour
Ayant rencontré le même Pb il y a qq semaines tu ajoutes ce code à la fin du bloc de code de ton USF
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = CloseMode = 0
HE.Hide
Unload HE
end sub

HE était le nom de mon USF
J'avais 3 USF dans mon appli , je passe de l'un a l'autre sans souci maintenant
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

bonjour,

que ce soit: UserForm_Deactivate() UserForm_QueryClose() UserForm_Terminate()
unload me est inutile ! il s'effectue de fait ! exemple quand vous cliquez sur la croix
ou si dans un Sub vous mettez « unload me »

si dans un Sub vous mettez « unload me » la fermeture ne s'effectue pas à cette ligne de code !
le code continue à s'exécuter il faut rajouter exit sub ou function juste après !(j’ai déjà eu des surprises !)

et c’est là qu’interviennent...
UserForm_Deactivate() UserForm_QueryClose() UserForm_Terminate()

ces routines servent à controler la sortie de l'userform et d’y mettre des codes avant de quitter l’userf
UserForm_Terminate() est le der des der après UserForm_QueryClose()

ne pas confondre Me.Hide et Unload Me ! avec Hide il est toujours présent !
 
Dernière édition:
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

Merci Roland_M, Merci Hervé62,

j'ai essayé d'appliquer la solution de Hervé62 mais sans résultat
Roland_M : je sais que Hide et Unload n'ont pas les mêmes effets; je n'ai pas compris à quel endroit mettre UserForm_Deactivate()

Par ailleurs, à la consultation du forum, je constate que je ne suis pas le seul dans mon cas mais surtout étonné que dans les tutos, on passe rapidement sur la question (on y affirme que unload UF suffit ...)

Merci
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

bonjour tous 🙂🙂🙂🙂🙂

essai avec end a la place de Unload UserForm_Wahl_Tag_Monat_JAhr

attention
Code:
end
si plusieurs users ouvert les ferme tous!!
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

Bonjour laetitia90,

merci pour ta contribution. Malheureusement, ça a pour effet certes de désafficher le userform mais ça arrête carrément tout le déroulement de la routine.
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

Bonjour à tous,

A tout hasard, essaye peut être de réactiver l'affichage écran avant le "unload" :
Code:
Application.ScreenUpdating = True

bon après midi
@+
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

Re
Ayant très souvent utilisé les USF , je me suis aussi souvent arraché les cheveux ..... jamais un cas identique de Pb
Parfois ca quitte au 2eme Clic , parfois le précedent ne se raffiche pas ....etc
Il y a aussi le MODAL qui met son grain de sel !!!! : A verifier dans son appli
Mais avec une appli d'il ya 1 mois et l'utilisation de la sub QUeryClose + tout le reste bien "propre" ca marche nickel , jonglant avec 3 USF
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

re

ton problème vient du fait que les codes qui sont dans un module, très certainement,
doivent être dans le code de l'userform !
tout est là !
car unload me doit se situer dans le code userf pour le quitter !
toi tu te situe dans un module !

EDIT:
tu demandes ou se situe UserForm_Deactivate()
et bien c'est que tu n'as pas de code userf...
Private Sub UserForm_Initialize()
Private Sub UserForm_Activate()
Private Sub UserForm_Deactivate()
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Private Sub UserForm_Terminate()
tout ceci est dans le code de l'userform !
 
Dernière édition:
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

Merci à toutes et à tous,

laetitia90 : dans le code du UF, il y a un classique bouquet de routines pour valider une saisie de données etc.

pierrot93 : super, ça marche ! mais je reste sceptique car je ne comprends pas trop, d'autant que je mets bien la configuration sur True en fin de routine, donc pourquoi ça n'en tient pas compte ?

herve62 : j'ai bien lu l'incidence du modal/pas modal mais je n'en suis pas encore là pour comprendre exactement la portée de cette manip

Roland_M : oui, l'instruction unload ... est dans le module et pas dans le code du UF. En effet, je positionne l'instruction là où je veux qu'elle intervienne. Je ne comprends pas s'il faut la mettre ailleurs.

Encore merci pour vos contributions









re

ton problème vient du fait que les codes qui sont dans un module, très certainement,
doivent être dans le code de l'userform !
tout est là !
car unload me doit se situer dans le code userf pour le quitter !
toi tu te situe dans un module !

EDIT:
tu demandes ou se situe UserForm_Deactivate()
et bien c'est que tu n'as pas de code userf...
Private Sub UserForm_Initialize()
Private Sub UserForm_Activate()
Private Sub UserForm_Deactivate()
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Private Sub UserForm_Terminate()
tout ceci est dans le code de l'userform !
 
Re : Affichage intempestif d'un userform (ou plutôt "non désaffichage" malgré unload

re

ne pas perdre de vue que les codes après .Show ne seront exécuté qu'après la fermeture de l'userf !

quand tu mets Unload comme là dans Sub Arbeitsmappe_hinzufuegen()
Unload UserForm_Wahl_Tag_Monat_JAhr ' dès cette ligne, je désactive le userform !!! mais en vain !!!

ton code retourne après ceci: UserForm_Wahl_Tag_Monat_JAhr.Show '<<<<<<
qui est dans Sub Periode_Anfrage() et fin du sub !

-----------------------------------------------------
donc tu démarres ici !?

Sub Periode_Anfrage()
Sheets("Paramètres").Select
Range("G100").Select
UserForm_Wahl_Tag_Monat_JAhr.Show '<<<<<<
'
'ton code revient obligatoirement ici à la fermeture !'
'tu dois mettre Unload Me dans ton userform
'
'et ensuite ici la suite d'appel ... exemple:
Arbeitsmappe_hinzufuegen
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour