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