Filtrer des données dans une autre feuille

W

Willy

Guest
Bonsoir à toutes et à tous,
J'étudie la manière de filtrer une liste par macro.
Le script suivant ( venant d'une démo de Thierry ) permet d'effectuer ce filtrage.
Mon problème est que j'essai d'effectuer ce filtrage à partir d'une autre feuille que celle contenant la liste et j'ai une erreur (1004)
j'ai beau tout passer en revue, je ne vois pas ou ca coince !
Le script fonctionne correctement bien sur si il est exécuté dans la feuille source.

Private Sub UserForm_Initialize()
Worksheets("feuil2").AutoFilterMode = False

Dim cell As Range
Dim r As Range
Dim i As Integer
Dim tabT() As String
Dim MaFeuille As Worksheet
Set MaFeuille = Worksheets("feuil2")

If MaFeuille.AutoFilterMode Then
MaFeuille.AutoFilterMode = False
MaFeuille.Range("A1").AutoFilter Field:=3, Criteria1:="OUI"
Else
MaFeuille.Range("A1").AutoFilter Field:=3, Criteria1:="OUI"
End If

Set r = MaFeuille.Range("A2", [A65536].End(xlUp))
Set r = r.SpecialCells(xlCellTypeVisible)
ReDim tabT(0 To r.Count - 1)
For Each cell In r
tabT(i) = cell.Value '''''''''''''
i = i + 1
Next
Me.ListBox1.List = tabT
Me.Label1.Caption = r.Count - 1
End Sub

Merci de votre aide
Bonne soirée au coin du feu ( Brrrrr chez moi il neige )
Willy
 
@

@+Thierry

Guest
=> DEMO UserForm AutoFilter sur Multi-Feuilles sans ActiveSheet

Salut Willy et le Forum

Très bonne question, je l'ai vu hier mais j'étais déjà à moitié au lit... Donc aujourd'hui avec un sandwich d'une main... Je t'ai préparé un truc...

Si-joint : une démo qui fait tout çà....

Pour y arriver, la clef est dans la façon de faire le Set de plage... Je t'ai laissé différentes méthodes...

La méthode si dessus ne fonctionne que sur la feuille active. Dans la démo tu peux lancer le code quand tu veux...

J'ai mis des commentaires explicatifs.

Bonne Démo
@+Thierry
 

Pièces jointes

  • USF_AutoFilter_Fm-OtherPage.zip
    21.4 KB · Affichages: 69
W

Willy

Guest
Re: => DEMO UserForm AutoFilter sur Multi-Feuilles sans ActiveSheet

Re bonjour Thierry,

merci pour ta démo, c'est royal pour gérer le tri de plusieurs listes.

Pour comprendre le fonctionnement de ton script j'ai essayé de réadapter le premier script qui me provoquait une erreur ( 1004 )

En fait j'ai épuré et finalement l'erreur ne parait plus grâce (me semble t'il) à la ligne suivante :
Sheets("Feuil2").Range("A2:" & Sheets("Feuil2").Range("A65536").End(xlUp).Address)

Par contre ce que je ne cerne pas, pourquoi doit t'on indiquer la feuille "feuil2" 2 fois dans cette ligne. j'ai essayé de modifier mais à nouveau une erreur (424) apparait.
Merci encore
Willy
 
@

@+Thierry

Guest
Re: => DEMO UserForm AutoFilter sur Multi-Feuilles sans ActiveSheet

Bonsoir Willy

Comment t'expliquer...
Tu as dû pourtant voir les méthodes que j'ai laissées en commentaires....

La méthode au dessus (on parle de définir un objet "plage" (range) indispensable pour ce genre d'instructions AutoFilter suivie de la création d'une Array Dynamique... (TabT)

Set r = MaFeuille.Range("A2", [A65536].End(xlUp))

Cette méthode est...... (humm disons "falabrac" car quand on utilise [ ] en VBA c'est jamais très bon signe, on cherche la facilité) donc cette méthode précise bien où est le départ de l'objet ("A2") donc dans "MaFeuille" qui elle même précise de quelle feuille on parle par le Set précédent :

Set MaFeuille = Worksheets("feuil2")

Tu suis ?

par contre : [A65536].End(xlUp) ne précise plus rien du tout !

Tu suis ?

Donc si "plus rien du tout" VBA comprend "ActiveSheet"

Voilà........ une fois que tu auras compris ceci, tu lis bien les trois méthodes décrites dans mon code VBA (car ce ne sont pas des Scripts.... VB Script est un autre language cousin éloigné)

Donc si tu lis bien, je précise la feuille pour la cellule de départ et aussi la feuille pour la cellule d'arrivée......... Si tu travaillais un jour en multi-WorkBooks.... Il faudra, en prime expliquer à VBA aussi dans quel classeur il travaille...

VB c'est le language des Objets...... et pour que "ça marche" (expression que je déteste) VBA a "absolutly" besoin qu'on lui explique tout de A à Z "qui est qui" et aussi "où est qui" ... Ceci, dès que l'on sort de la macro sur la Feuille Active... ou sur le Classeur Actif.... ou de de l'Application Active...

C'est un concept....... Un fois que tu l'auras assimilé..... Tu peux "jouer" tel un jongleurs avec tous les objets.... en respectant leur hiérarchie et en définissant leurs emplacements...

Donc quand tu comprendras que tu n'indiques pas "Deux Fois" la même chose dans cette ligne toute bête... Tu auras franchi une première étape.

Et même dans cet exemple que tu as en commentaire dans la démo :
Set r = ThisWorkbook.Sheets("Sheet1").Range("A2:" _
'& ThisWorkbook.Sheets("Sheet1").Range("A65536").End(xlUp).Address)

Rien n'est répété "Deux Fois" contrairement aux apparences ...

Of course l'idéal et de faire comme ceci (comme dans la démo) :

Dim MonBook As Workbook
Dim WS1 As Worksheet
Dim L As Integer

Set MonBook = ThisWorkbook
With MonBook
Set WS1 = .Worksheets("Sheet1")
End With
L = WS1.Range("A65536").End(xlUp).Row
Set r = WS1.Range("A2:A" & L)

ou encore comme çà (plus directe) :
Set r = WS1.Range("A2:" & WS1.Range("A65536").End(xlUp).Address)

Cette dernière méthode m'a été apprise par Ti, qui de tous les participants actifs de ce forum est, sans conteste à mes yeux, le plus efficace en VBA dans la "propreté" de ses codes (et non "Scripts")

Voilà Willy...
Dis moi si tu as suivi

Bonne Soirée

and Welcome to VBA's World [/img]

@+Thierry
 
V

Vériland

Guest
Re: => DEMO UserForm AutoFilter sur Multi-Feuilles sans ActiveSheet

Bonsoir les gens de ce fil et le Forum,

S'cuse Willy...j'fais que passer...j'ai ouvert la porte et j'ai vu une démo Userform parterre...rhôôô...y laissent tout traîner ici...bon je la remets sur l'étagère, j'aime bien l'ordre dans le forum...hi hi hi...t'imagine si on l'avait laissé sur le sol ?...ben la femme de ménage l'aurait avalé tout rond avec son aspirateur...ho la la...heureusement que j'suis là...lol

bon en même temps j'vais y jeter un oeil...alors comment çà marche ce truc...eh ! Raymond !...comment on fait...il est où le bouton ON...ah c'est celui là ?...ok merci...

bon ben voilà, je clic ici et puis ...çà marche bien...houlala...le double clic...encore mieux...mais !!??!!...j'suis dans la liste...avec tous mes ami(e)s...en plus y sont disciplinés...oui / non ils se rangent automatiquement...très bien encore çà...

eh! Raymond...tu sais à qui il est ce truc ?...ah c'est à Thierry, c'est lui qui l'a fait ?...ah oui c'est signé en feuille1...lol...bon ben j'vais en faire une copie et le ramener chez moi...t'en veux une Raymond?...oui une copie...ok j'te grave ça...

...et voilà...lol

A+ Vériland Thierry ;-)
 
@

@+Thierry

Guest
Re: => DEMO UserForm AutoFilter sur Multi-Feuilles sans ActiveSheet

Hé hé hé Vériland

AS-tu remarqué qu'en Sheet3 il y a 3 Aliens.......

@+Thierry

Hi hi hi



Bon allez zou oh dodo !!!

Bonne nuit à tous les Zamis et Zamies et Bonne Soirée aux Zamies et Zamis du Canada !!!
 
W

Willy

Guest
Re: => DEMO UserForm AutoFilter sur Multi-Feuilles sans ActiveSheet

Bonsoir Veriland, Bonsoir Thierry, bonsoir à tous,

Pour Veriland : Tu as toujours des posts sympa, c'est un plaisir de te lire. Pour la démo, je suis passé avant la femme de menage également ( ouf) lol

Pour Thierry :
J'ai bien suivi et très bien compris ( enfin !!)
J'ai du mal à assimiler cette hierarchie et la déclarations des variables.
Le mot script me vient d'un autre langage que je pratique d'ou souvent un mélange des deux.
Je poursuit mon apprentissage
Bonne nuit à tous
Willy
 

Discussions similaires

Statistiques des forums

Discussions
314 645
Messages
2 111 536
Membres
111 184
dernier inscrit
amiko