Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question d'esthétique !!

49 réponses
Avatar
DT
Bonjour

J'ouvre différents UserForm tour à tour mais j'aimerais que la Feuil4 soit
toujours en "fond" derrière les UserForm. J'ai donc mis des Feuil4.Activate
un peu partout dans mes codes mais rien n'y fait, un breve instant, je vois
la feuille qui est en traitement.
En prenant comme modèle le code ci dessous, je comprend bien qu'il active la
Feuil4 mais qu'a un certain moment il selectionne la Feuil2. Y a t'il pas
une solution pour figer la feuille de fond Feuil4 ?

Merci de votre aide
David


Private Sub UserForm_Initialize()
Feuil4.Activate

Feuil2.Select
If Feuil2.AutoFilterMode = True Then
Selection.AutoFilter
Range([A1], [J65000].End(xlUp)).AutoFilter
Else
Trier
IniObjet
End If

Feuil4.Activate
End Sub

10 réponses

1 2 3 4 5
Avatar
DT
Merci beaucoup

Après correction, en enlevant le point à "With .LstResultat" et en mettant
A2 à cette ligne .Range("A1:J" & DerLig).Name = "Plage1" cela fonctionne
mais je vois pas trop de différence de chargement.

De plus, mes filtres derrière ne fonctionne plus.



Voici mon projet, enfin si tu à le temps. Chose que je doute étant donner le
nombre de réponse que tu apporte à tous le monde !
http://www.cijoint.fr/cjlink.php?file=cj201001/cijD4UIqGb.xls
Avatar
michdenis
| mais je vois pas trop de différence de chargement.

*** si tu ne charges que quelques lignes, tu ne vois
pas de différences, si tu en as 10,000 lignes * 10 colonnes,
ça devient plus évident !

*** Et pour le chargement, je t'ai donné 2 méthodes
A ) En utilisant la propriété "RowSource"
B ) En utilisant la propriété "List"
Il n a en pas d'autre bien que l'on puisse y apporter des variantes.

*** Je ne vais pas ouvrir ton fichier. C'est TON projet.
Ici, nous sommes des bénévoles qui tentent d'aider
ponctuellement un demandeur. Il faut savoir aussi dire non.

*** Tu peux poser autant de questions que tu le désires...
Mais elles doivent être précises.... un point donné.

Ceci étant, rien n'empêche quelqu'un d'autre d'y regarder de plus près.
Avatar
DT
Message bien reçu et entendu pour les paragraphe 1-3-4 !

Paragraphe 2
Avec la deuxième méthode proposée que j'ai insérée dans un nouveaux module,
je ne comprend pas l'histoire des "Me".

si tu le places dans une feuille module si tu es dans un formulaire, tu
devras utiliser With Workheets("NomFeuille") pour définir la plage à 2
endroits et réserver Me pour désigner les objets du formulaire seulement





Ma ListBox nomée "LstResultat" est bien dans un formulaire nomée
"UsfResultHistorique" et les données son dans "Feuil2"


Sub Chargement()

Dim DerLig As Long
With Me
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Me.Range("A2:J" & DerLig).Value
End With
End With

End Sub
Avatar
michdenis
Paragraphe 2
| Avec la deuxième méthode proposée que j'ai insérée
dans un nouveau module,
| je ne comprend pas l'histoire des "Me".

L'expression "Me" désigne le module où le code est inscrit.
Il est valide seulement dans les modules de classe. C'est-à-dire
dans tous les modules sauf le module standard.

Si tu utilises le mot Me dans un module feuille "Feuil1", l'emploi du mot
me est synonyme de Feuil1 (non pas le nom de l'onglet, mais la propriété
Name de l'objet "Feuil1" visible dans la fenêtre de l'éditeur de code.

Si tu utilises le mot Me dans un formulaire Me désigne ce formulaire.
Au lieu d'écrire Userform1, tu peux utiliser Me.

P.S - Le code doit être inscrit dans le module que désigne l'expression Me.

'------------------------------------------
Sub Chargement()

Dim DerLig As Long
With Me 'Si le code est inscrit ailleurs que dans le module feuille
'où l'action se déroule, tu dois utiliser le nom Feuil2 ou
'Worksheets("Feuil2")
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
'Il faut aussi remplacer ici Me aussi par le nom de la feuille.
.List = Me.Range("A2:J" & DerLig).Value
End With
End With

End Sub
'------------------------------------------
Avatar
DT
Re

Donc j'ai créé un module (insertion/Module) et mis ce code dedans mais ca
bloque à la ligne ".Clear"

Merci de ton aide et commentaires

Sub Chargement()

Dim DerLig As Long
With Worksheets("HISTOCARBU")
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Worksheets("HISTOCARBU").Range("A2:J" & DerLig).Value
End With
End With

End Sub
Avatar
michdenis
Je t'ai fait un exemple basé sur le code que je t'ai donné.

Tu as un listbox dans une feuille de calcul et un listbox
dans un formulaire utilisant un code similaire. Il ne te
reste plus qu'à l'adapter à ton application.

http://cjoint.com/?bFuv4C0G0q



"DT" a écrit dans le message de groupe de discussion :
#
Re

Donc j'ai créé un module (insertion/Module) et mis ce code dedans mais ca
bloque à la ligne ".Clear"

Merci de ton aide et commentaires

Sub Chargement()

Dim DerLig As Long
With Worksheets("HISTOCARBU")
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Worksheets("HISTOCARBU").Range("A2:J" & DerLig).Value
End With
End With

End Sub
Avatar
DT
Merci beaucoup. J'ai essayer avec beaucoup plus de lignes dans la feuille et
cela charge vraiment plus vite.
Je commence à comprendre un peu. Un modèle concret aide vraiment beaucoup.

Par contre les procédure de filtre ne fonctionne plus alors qu'ils
fonctionnaient avec mon ancien code. Les deux codes ont la même fonction
pourtant. Je comprend pas pourquoi.

J'ai l'impression que c'est un problème avec les ChargementListe "debut" et
"fin"

Tu peux, si j'ose encore demander, me mettre sur la piste ? Merci beaucoup

Dim Rg As Range

Private Sub UserForm_Initialize()
Application.ScreenUpdating = True
Feuil4.Activate
With Feuil2
If .AutoFilterMode = True Then
.Range(.[A1], .[J65000].End(xlUp)).AutoFilter
Else
CmbNouvelle_Click
Trier
ChargementListe "debut"
End If
End With
CmbNouvelle_Click
End Sub


Private Sub ChargementListe(param)
Dim l As Integer
Dim Plage As String

l = Feuil2.Range("A65536").End(xlUp).Row
Plage = Feuil2.Range("A2:J" & l).Address

Set plage1 = Feuil2.[_filterdatabase].Offset(1)
On Error Resume Next
If param = "debut" Then
Set plage1 = Feuil2.Range("A2:A" & l)
Else
Set plage1 = plage1.Resize(plage1.Rows.Count - 1,
1).SpecialCells(xlCellTypeVisible)
End If
If Err.Number <> 0 Then
Err.Clear
If param = "fin" Then
MsgBox "Aucun enregistrement sélectionné"
CmbNouvelle_Click
Range("A1:J1").Select
Selection.AutoFilter
Range("A1").Select
Exit Sub
End If
End If
On Error GoTo 0
Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With
End Sub


Private Sub CmdFiltrer_Click()
UserForm_Initialize
With Feuil2
If AutoFilterMode = True Then
Selection.AutoFilter
Range([A1], [J65000].End(xlUp)).AutoFilter Field:=1
End If
End With

FiltreDate
FiltreCombos
End Sub


Private Sub FiltreDate()
Dim l As Integer
Dim Plage As Range
Dim DD As Single
Dim DF As Single
DD = CDate(TxtDateDebut)
DF = CDate(TxtDateFin)
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
Plage.AutoFilter Field:=1, Criteria1:=">=" & DD, Operator:=xlAnd,
Criteria2:="<=" & DF 'Date

ChargementListe "fin"
End Sub


Private Sub FiltreCombos()
Dim l As Integer
Dim Plage As Range
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
If Me.Combo1.Value <> "" Then
Plage.AutoFilter Field:=3, Criteria1:=Combo1 'Alias
End If
If Me.Combo2.Value <> "" Then
Plage.AutoFilter Field:, Criteria1:=Combo2 'Paiement
End If
If Me.Combo3.Value <> "" Then
Plage.AutoFilter Field:=9, Criteria1:=Combo3 'Carte
End If
If Me.Combo4.Value <> "" Then
Plage.AutoFilter Field:=4, Criteria1:=Combo4 'Type
End If
If Me.Combo5.Value <> "" Then
Plage.AutoFilter Field:=2, Criteria1:=Combo5 'Immatriculation
End If

ChargementListe "fin"
End Sub


Private Sub CmbNouvelle_Click()
With Feuil2
With .Range("_FilterDataBase")
.AutoFilter
End With
End With

ChargementListe "debut"
End Sub
Avatar
Daniel.C
Peux-tu me donner la séquence des manips pour provoquer le
dysfonctionnement ?
Daniel

Merci beaucoup. J'ai essayer avec beaucoup plus de lignes dans la feuille et
cela charge vraiment plus vite.
Je commence à comprendre un peu. Un modèle concret aide vraiment beaucoup.

Par contre les procédure de filtre ne fonctionne plus alors qu'ils
fonctionnaient avec mon ancien code. Les deux codes ont la même fonction
pourtant. Je comprend pas pourquoi.

J'ai l'impression que c'est un problème avec les ChargementListe "debut" et
"fin"

Tu peux, si j'ose encore demander, me mettre sur la piste ? Merci beaucoup

Dim Rg As Range

Private Sub UserForm_Initialize()
Application.ScreenUpdating = True
Feuil4.Activate
With Feuil2
If .AutoFilterMode = True Then
.Range(.[A1], .[J65000].End(xlUp)).AutoFilter
Else
CmbNouvelle_Click
Trier
ChargementListe "debut"
End If
End With
CmbNouvelle_Click
End Sub


Private Sub ChargementListe(param)
Dim l As Integer
Dim Plage As String

l = Feuil2.Range("A65536").End(xlUp).Row
Plage = Feuil2.Range("A2:J" & l).Address

Set plage1 = Feuil2.[_filterdatabase].Offset(1)
On Error Resume Next
If param = "debut" Then
Set plage1 = Feuil2.Range("A2:A" & l)
Else
Set plage1 = plage1.Resize(plage1.Rows.Count - 1,
1).SpecialCells(xlCellTypeVisible)
End If
If Err.Number <> 0 Then
Err.Clear
If param = "fin" Then
MsgBox "Aucun enregistrement sélectionné"
CmbNouvelle_Click
Range("A1:J1").Select
Selection.AutoFilter
Range("A1").Select
Exit Sub
End If
End If
On Error GoTo 0
Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With
End Sub


Private Sub CmdFiltrer_Click()
UserForm_Initialize
With Feuil2
If AutoFilterMode = True Then
Selection.AutoFilter
Range([A1], [J65000].End(xlUp)).AutoFilter Field:=1
End If
End With

FiltreDate
FiltreCombos
End Sub


Private Sub FiltreDate()
Dim l As Integer
Dim Plage As Range
Dim DD As Single
Dim DF As Single
DD = CDate(TxtDateDebut)
DF = CDate(TxtDateFin)
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
Plage.AutoFilter Field:=1, Criteria1:=">=" & DD, Operator:=xlAnd,
Criteria2:="<=" & DF 'Date

ChargementListe "fin"
End Sub


Private Sub FiltreCombos()
Dim l As Integer
Dim Plage As Range
l = Feuil2.Range("A65536").End(xlUp).Row
Set Plage = Feuil2.Range("A1:J" & l)
If Me.Combo1.Value <> "" Then
Plage.AutoFilter Field:=3, Criteria1:=Combo1 'Alias
End If
If Me.Combo2.Value <> "" Then
Plage.AutoFilter Field:, Criteria1:=Combo2 'Paiement
End If
If Me.Combo3.Value <> "" Then
Plage.AutoFilter Field:=9, Criteria1:=Combo3 'Carte
End If
If Me.Combo4.Value <> "" Then
Plage.AutoFilter Field:=4, Criteria1:=Combo4 'Type
End If
If Me.Combo5.Value <> "" Then
Plage.AutoFilter Field:=2, Criteria1:=Combo5 'Immatriculation
End If

ChargementListe "fin"
End Sub


Private Sub CmbNouvelle_Click()
With Feuil2
With .Range("_FilterDataBase")
.AutoFilter
End With
End With

ChargementListe "debut"
End Sub


Avatar
DT
Re Daniel !

Tu ouvre l'userForm "Historique", Selection dans un combo et clic sur
Filtrer.



'==== 1ère solution : Chargement long mais les filtres fonctionne
With Me.LstResultat
.Clear
For Each c In plage1
.AddItem c.Value
.List(.ListCount - 1, 1) = c.Offset(, 1)
.List(.ListCount - 1, 2) = c.Offset(, 2)
.List(.ListCount - 1, 3) = c.Offset(, 3)
.List(.ListCount - 1, 4) = c.Offset(, 4)
.List(.ListCount - 1, 5) = c.Offset(, 5)
.List(.ListCount - 1, 6) = c.Offset(, 6)
.List(.ListCount - 1, 7) = c.Offset(, 7)
.List(.ListCount - 1, 8) = c.Offset(, 8)
.List(.ListCount - 1, 9) = c.Offset(, 9)
Next
End With

'==== 2ème solution : Chargement plus rapide mais les filtres ne fonctionne
pas

Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With
Avatar
Daniel.C
Bonjour David.
Curieusement, je n'ai pas d'erreur. Je filtre sur une plage de dates et
sur l'alias. Chance ? Peux-tu me donner les valeurs que tu entres dans
le filtre et qui provoquent une erreur ?
Daniel

Re Daniel !

Tu ouvre l'userForm "Historique", Selection dans un combo et clic sur
Filtrer.



'==== 1ère solution : Chargement long mais les filtres fonctionne
With Me.LstResultat
.Clear
For Each c In plage1
.AddItem c.Value
.List(.ListCount - 1, 1) = c.Offset(, 1)
.List(.ListCount - 1, 2) = c.Offset(, 2)
.List(.ListCount - 1, 3) = c.Offset(, 3)
.List(.ListCount - 1, 4) = c.Offset(, 4)
.List(.ListCount - 1, 5) = c.Offset(, 5)
.List(.ListCount - 1, 6) = c.Offset(, 6)
.List(.ListCount - 1, 7) = c.Offset(, 7)
.List(.ListCount - 1, 8) = c.Offset(, 8)
.List(.ListCount - 1, 9) = c.Offset(, 9)
Next
End With

'==== 2ème solution : Chargement plus rapide mais les filtres ne fonctionne
pas

Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
With Me.LstResultat
.Clear
.ColumnCount = 10
.BoundColumn = 1
.List = Feuil2.Range("A2:J" & DerLig).Value
End With
End With


1 2 3 4 5