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

9 réponses

1 2 3 4 5
Avatar
Daniel.C
Tu dois conserver le code de michdenis pour le chargement initial. Le
tout est de savoir quel est le nombre moyen de lignes filtrées. A
partir de là, tu choisis entre :
1. la méthode lente
2. le changement de type de filtre (tu conserves le code rapide).
Bon café.
Daniel

Bon bin la c'est le coup derrière la tête !!!

En faisant l'essai avec 1100 enregistrement (moins d'un an), le grand gagnant
est michdenis avec 3 secondes avant ouverture du formulaire contre 28
secondes pour toi ! mais les filtres ne fonctionnent plus et le but initial
été bien celui ci au début du projet.

Être si prés de la fin du projet et changer beaucoup de chose en posant
encore de multiples questions ! Temps passé 15 jours environ ! (non perdu,
car on apprend)

Le choix est difficile ....

Je vais digérer tous cela devant une bonne tasse de café !!!

Merci pour tout à vous deux.

Je reviens si la corde à cédée !!!

David


Avatar
DT
Pour le chargement, ok mais comment je vais faire pour filtrer ?

Peut être avec un nouveau bouton genre "Effectuer une recherche" et la
initialisation des combos et tout le tralala ...!

L'idée te semble bonne ?

Impossible de déterminer le nombre moyens de lignes filtrées.
Avatar
michdenis
Bonjour,

Une proposition :

A )
Tu ajoutes une feuille vierge à ton projet qui va servir
seulement à recevoir le résultat du filtre. Afin que cette
feuille ne soit pas accessible via l'interface de calcul,
en vba, tu lui affectes la mention suivante :
MonFiltre -> Nom de la feuille
Worksheets("MonFiltre").Visible = xlveryhidden

B ) Plus bas, tu as un code pour effectuer un filtre automatique
qu'il te faudra adapter

C ) Par la suite, tu peux utiliser le code que je t'ai donné pour
charger le contrôle "ListBox", tu n'auras qu'à modifier le
nom de la feuille...!

Voilà.

'-------------------------------------------
Sub FiltrerDesDates()
Dim MaPlage As Range, Sh As Worksheet, Dest As Range
Dim DateDébut As Long, DateFin As Long

'Tes dates peuvent aussi être défini de cette façon :
' DateDébut = CLng(CDate("12 septembre 2002"))
' DateFin = CLng(DateValue("15 septembre 2002"))

'où seront copiées tes données
Set Dest = Worksheets("MonFiltre").Range("A1")

'Feuille où s'exécute le filtre
Set Sh = Worksheets("Feuil1")

'Pris pour acquis que ces cellules sont au format date.
'Détermine les critères pour le champ date
DateDébut = Sh.Range("c9")
DateFin = Sh.Range("c10")

'détermine la plage où sera effectué le filtre
Set MaPlage = Sh.Range("B5").CurrentRegion

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

'Applique le fitre
MaPlage.AutoFilter Field:=2, Criteria1:=">" & DateDébut, _
Operator:=xlAnd, Criteria2:=">" & DateFin

'S'assure qu'il n'y a plus de données sur la plage de destination
Dest.CurrentRegion.ClearContents
Sh.Range("_FilterDatabase").SpecialCells(xlCellTypeVisible).Copy Dest

'pour ne pas copier la ligne d'entête
'Copy du résultat du filtre vers la feuille de destination
'Sh.Range("_FilterDatabase").Resize(Sh.Range("_FilterDatabase") _
.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Copy Dest

'Enlève les boutons du filtre automatique sur la plage source
MaPlage.AutoFilter

'Libère la mémoire occupée par les objets utilisés pour le job.
Set MaPlage = Nothing: Set Sh = Nothing: Set Dest = Nothing
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic

End Sub
'-------------------------------------------
Avatar
Daniel.C
Non. Le filtre fonctionne. Seulement, le résultat n'est pas affiché
dans le listbox.
La réponse de michdenis correspond à ma solution n°2.
Daniel

Pour le chargement, ok mais comment je vais faire pour filtrer ?

Peut être avec un nouveau bouton genre "Effectuer une recherche" et la
initialisation des combos et tout le tralala ...!

L'idée te semble bonne ?

Impossible de déterminer le nombre moyens de lignes filtrées.


Avatar
DT
Bonsoir à vous 2

3 heures que je suis dessus. Rien à y faire malgré les explications.
Pourtant je pense comprendre le plan à construire mais je sais pas ou mettre
tous les codes. Tous se mélange dans la tête !

1) Chargement du ListBox
2) Filtrage de la feuille source "HISTOCARBU"
3) Envoi du résultat filtré vers la nouvelle feuille "RESULTAT"
4) Désactivation du filtre de "HISTOCARBU"
3) Effacement de la ListBox afin de recevoir le résultat de la feuille
"RESULTAT"
4) Envoi des valeurs filtrées de "RESULTAT" vers la ListBox

De plus, j'ai l'impression qu'il y aura encore d'autres problème après, en
particulier avec la modication et suppression d'enregistrement. Etant donner
que je vais charger dans la ListBox le résultat d'un filtre provenant d'une
feuille qui n'est pas la feuille source.

Mais les paroles de Daniel.C du 28/01/2010 à 12:01 résonne encore dans mes
oreilles et m'encourage !!!
Il faut déjà faire fonctionner ce qu'il y a devant.







Malgrès mes dires du 27/01/2010 à 00:30
Je me demande s'il faudrait pas faire autrement ......ou un filtre
éloboré donnant un résultat sur une autre feuille !!!







Et la motivation de Maitre michdenis à essayer de faire comprendre à nous,
profane de V.B.A.
C'est TON projet. Ici, nous sommes des bénévoles qui tentent d'aider
ponctuellement un demandeur. Il faut savoir aussi dire non.








Humour

Bonne soirée
David
Avatar
Daniel.C
Bonjour.
Essaie ce classeur :
http://cjoint.com/?cclX7yTjiN
Si ça fonctionne, j'ajouterais les commentaires.
Daniel

Bonsoir à vous 2

3 heures que je suis dessus. Rien à y faire malgré les explications.
Pourtant je pense comprendre le plan à construire mais je sais pas ou mettre
tous les codes. Tous se mélange dans la tête !

1) Chargement du ListBox
2) Filtrage de la feuille source "HISTOCARBU"
3) Envoi du résultat filtré vers la nouvelle feuille "RESULTAT"
4) Désactivation du filtre de "HISTOCARBU"
3) Effacement de la ListBox afin de recevoir le résultat de la feuille
"RESULTAT"
4) Envoi des valeurs filtrées de "RESULTAT" vers la ListBox

De plus, j'ai l'impression qu'il y aura encore d'autres problème après, en
particulier avec la modication et suppression d'enregistrement. Etant donner
que je vais charger dans la ListBox le résultat d'un filtre provenant d'une
feuille qui n'est pas la feuille source.

Mais les paroles de Daniel.C du 28/01/2010 à 12:01 résonne encore dans mes
oreilles et m'encourage !!!
Il faut déjà faire fonctionner ce qu'il y a devant.







Malgrès mes dires du 27/01/2010 à 00:30
Je me demande s'il faudrait pas faire autrement ......ou un filtre éloboré
donnant un résultat sur une autre feuille !!!







Et la motivation de Maitre michdenis à essayer de faire comprendre à nous,
profane de V.B.A.
C'est TON projet. Ici, nous sommes des bénévoles qui tentent d'aider
ponctuellement un demandeur. Il faut savoir aussi dire non.








Humour

Bonne soirée
David


Avatar
DT
Bonjour Daniel

Tout fonctionne merveilleusement bien (chargement avec 1000 lignes, modif,
supp, filtrage, etc...)

Je garde sur le "coude" celui-ci dans l'attente du même avec les
explications.

Étant donné que michdenis m'a également envoyé un fichier "exemple" qui est
"les bases" pour un débutant en VBA ! (chargement, filtre, modif, supp.)
Après effacement de presque tout mes codes, j'étais donc en train de refaire
toutes mes procédures et franchement, je m'en sort pas trop mal. Faut dire
que j'y vais pas à pas ! Je comprend mieux chaque étapes et même j'en
supprime car trop souvent des boucles sont faites pour rien.

J'arrivais donc à l'étape du chargement après filtrage d'ou l'intérêt
certainement des (ChargementListe "debut" et "fin") qui faut que je
comprenne absolument.

MERCI beaucoup du temps passé sur MON projet. (sans oublié michdenis !!!)

Vous êtes EXCELLENT dans le dévouement que vous faites pour nous tous.

Cordialement

David
Avatar
Daniel.C
Le principe :
Le résultat du filtre (Plage1) est copié dans une nouvelle feuille vide
(Temp) qu'il faudra mieux cacher. Le résultat de la copie est une plage
de lignes contiguës et on utilise la copie dans List (méthode
"michdenis") pour charger le listbox. Tout se passe dans
ListeChargement. Les instructions ajoutées ou modifiées sont précédées
d'un commentaire précédée de "***" :
http://cjoint.com/?ccoAkOC3qf
Daniel

Bonjour Daniel

Tout fonctionne merveilleusement bien (chargement avec 1000 lignes, modif,
supp, filtrage, etc...)

Je garde sur le "coude" celui-ci dans l'attente du même avec les
explications.

Étant donné que michdenis m'a également envoyé un fichier "exemple" qui est
"les bases" pour un débutant en VBA ! (chargement, filtre, modif, supp.)
Après effacement de presque tout mes codes, j'étais donc en train de refaire
toutes mes procédures et franchement, je m'en sort pas trop mal. Faut dire
que j'y vais pas à pas ! Je comprend mieux chaque étapes et même j'en
supprime car trop souvent des boucles sont faites pour rien.

J'arrivais donc à l'étape du chargement après filtrage d'ou l'intérêt
certainement des (ChargementListe "debut" et "fin") qui faut que je comprenne
absolument.

MERCI beaucoup du temps passé sur MON projet. (sans oublié michdenis !!!)

Vous êtes EXCELLENT dans le dévouement que vous faites pour nous tous.

Cordialement

David


Avatar
DT
Très bien.

Merci beaucoup

Cordialement

David
1 2 3 4 5