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
Re
Avec beaucoup de changement et des "With" un peu partout !! cela fonctionne
très bien maintenant sauf à un endroit de mon code pourtant tout simple.

J'ai
Feuil2.Select
Selection.AutoFilter

donc je met

With Feuil2.AutoFilter
End With

C'est bien ça ?

Si oui ma listBox fait des trucs un peu bizarre et aléatoirement et encore
non défini après un filtre.

Cordialement
David
Avatar
Daniel.C
Bonjour.
Je ne constate pas le problème ;-(((
Daniel

et la valeur "True" est réinitialisée automatiquement en fin de macro.



Bonjour Daniel,

Ton énoncé est vrai sur toutes les versions antérieures à 2007.
Mais avec Excel 2007, il faut remettre à true. C'est du moins
l'observation que je fais dans mon environnement.
Application.ScreenUpdating = True

Pour observer le phénomène, je te suggère de tester la
proposition que j'ai faite à la question en tenant compte
de la tienne :
Re: Comment classer automatiquement les onglets d'un fichier XLS
(dernière aujourd'hui)
Tu places les procédures dans un module standard et
celle-ci dans le ThisWorkbook du classeur.
Maintenant, insère une nouvelle feuille !
'----------------------------------
Private Sub Workbook_NewSheet(ByVal Sh As Object)
TriFeuilles
End Sub
'----------------------------------

Qu'obtiens-tu comme résultat si tu ne passes pas l'affichage à true ?

Merci pour ta participation.


Avatar
michdenis
| Feuil2.Select
| Selection.AutoFilter

| donc je met

| With Feuil2.AutoFilter
| End With

| C'est bien ça ?

Tu ne filtres pas une feuille mais une plage de cellules
ou tu enlèves les boutons d'un filtre déjà présents sur
une plage de cellule.

Essaie comme ceci :
'------------------------------
With Feuil2
with .Range("_FilterDataBase")
.Autofilter
end with
End with
'------------------------------

N.B. _FilterDataBase est le nom d'une plage nommée qu'Excel
donne lorsqu'il exécute un filtre sur une plage. Cette plage
nommée est mise à jour après l'exécution seulement.
Avatar
michdenis
| Je ne constate pas le problème ;-(((

Et bien, je dois être le seul... parce que l'affichage
de l'écran ne se met pas à jour de lui-même !

Tu as un remède docteur ?

;-))
Avatar
DT
Merci les explication toujours très clair. Le code cela fonctionne hyper
bien.

Par contre, je me suis appercu, avec F8, que le temps de chargement été long
à causse de ce bout de code :

Y a t'il moyen de réduire le temps d'inscrition de la ListBox ?
Pour l'instant, la plage de cellules filtrée fait 80 lignes. J'image le
temps quand j'en aurai 3000 ! Merci

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
Avatar
michdenis
Tu peux utiliser ceci :

Évidemment, tu adaptes le nom de la feuille, de la plage visée
par ta procédure.
Si ton listbox est dans une feuille, tu utilises ceci:
.ListFillRange = "Plage1"

Si ton listbox est dans un formulaire :
.RowSource = "Plage1"

Évidemment, ce code est soit dans le code module de
ladite feuille ou du formulaire.
'------------------------------------------
Sub test()
Dim DerLig As Long
With Me
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
.Range("A1:J" & DerLig).Name = "Plage1"
With .LstResultat
.ColumnCount = 10
.BoundColumn = 1
.ColumnWidths = "15;15;15;15;15;15;15;15;15;15;"
.ListFillRange = "Plage1"
End With
End With

End Sub
'------------------------------------------

"DT" a écrit dans le message de groupe de discussion :
OdYD4#
Merci les explication toujours très clair. Le code cela fonctionne hyper
bien.

Par contre, je me suis appercu, avec F8, que le temps de chargement été long
à causse de ce bout de code :

Y a t'il moyen de réduire le temps d'inscrition de la ListBox ?
Pour l'instant, la plage de cellules filtrée fait 80 lignes. J'image le
temps quand j'en aurai 3000 ! Merci

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
Avatar
michdenis
Il y a aussi cette alternative :

Ce code est OK, 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.

'------------------------------------
Sub test()

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
.ColumnWidths = "15;15;15;15;15;15;15;15;15;15;"
.List = Me.Range("A1:J" & DerLig).Value
End With
End With

End Sub
'------------------------------------



"michdenis" a écrit dans le message de groupe de discussion :

Tu peux utiliser ceci :

Évidemment, tu adaptes le nom de la feuille, de la plage visée
par ta procédure.
Si ton listbox est dans une feuille, tu utilises ceci:
.ListFillRange = "Plage1"

Si ton listbox est dans un formulaire :
.RowSource = "Plage1"

Évidemment, ce code est soit dans le code module de
ladite feuille ou du formulaire.
'------------------------------------------
Sub test()
Dim DerLig As Long
With Me
DerLig = .Range("A:J").Find(What:="*", _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
.Range("A1:J" & DerLig).Name = "Plage1"
With .LstResultat
.ColumnCount = 10
.BoundColumn = 1
.ColumnWidths = "15;15;15;15;15;15;15;15;15;15;"
.ListFillRange = "Plage1"
End With
End With

End Sub
'------------------------------------------

"DT" a écrit dans le message de groupe de discussion :
OdYD4#
Merci les explication toujours très clair. Le code cela fonctionne hyper
bien.

Par contre, je me suis appercu, avec F8, que le temps de chargement été long
à causse de ce bout de code :

Y a t'il moyen de réduire le temps d'inscrition de la ListBox ?
Pour l'instant, la plage de cellules filtrée fait 80 lignes. J'image le
temps quand j'en aurai 3000 ! Merci

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
Avatar
DT
Merci beaucoup de ton aide.

Essai demain car un peux tard !!

Cordialement

David
Avatar
DT
Bonjour

J'ai mis ce code à la place du mien dans mon formulaire

Je vois pas quoi mettre à la place de "Plage1"

Merci de ton aide

David


Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", LookIn:=xlValues,
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
.Range("A1:J" & DerLig).Name = "Plage1"
With .LstResultat
.ColumnCount = 10
.BoundColumn = 1
'.ColumnWidths = "15;15;15;15;15;15;15;15;15;15;"
.RowSource = "Plage1"
End With
End With
Avatar
michdenis
| Je vois pas quoi mettre à la place de "Plage1"

.Range("A1:J" & DerLig).Name = "Plage1"

Cette ligne de code crée une plage nommée
ayant comme NOM : "Plage1".
Tu peux utiliser la chaîne de caractères de ton choix.
Le nom doit débuter par une lettre ou le caractère "_"
Il ne peut pas contenir un espace et il doit être d'une
longueur maximale de 255 caractères. On peut dire
que tu as le choix !



Dim DerLig As Long
With Feuil2
DerLig = .Range("A:J").Find(What:="*", LookIn:=xlValues,
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
.Range("A1:J" & DerLig).Name = "Plage1"
With .LstResultat
.ColumnCount = 10
.BoundColumn = 1
'.ColumnWidths = "15;15;15;15;15;15;15;15;15;15;"
.RowSource = "Plage1"
End With
End With
1 2 3 4 5