Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Dupliquer une feuille contenant un tableau anonyme trié par vba

zayab

XLDnaute Junior
Bonjour

Je fais un classeur proposant une saisie de différentes classes d'événement dans un tableau1. Dans une feuille, je saisis un événement et l'archive dans un tableau2 de la même feuille. Ce tableau2 est alimenté à chaque saisie d'événement.
Ce tableau peut être indépendamment modifié en partie et doit donc être trié à chaque enregistrement. d'événement

Après avoir Terminé la feuille type BIP(1) j'ai besoin de la dupliquer un grand nombre de fois (ayant beaucoup de classes d'événements différents) incluant avec elle la MACRO de tri liée au tableau2 de la feuille.
Une fois dupliquée avec toutes les macros (BIP(2) puis BIP(3) BIP(4) …) chaque feuille dupliquée intègre le même code avec toute le même nom : tableau2 à trier, celui de la première feuille BIP(1). Je voudrais que la macro de chaque feuille BIP(n) puisse trier le tableau de sa propre feuille BIP(n) pas celui de BIP(1)

J'envoie le fichier joint ce qui reste plus parlant.

Dim Sht As Worksheet
Set Sht = ActiveSheet
Sht.ListObjects("Tableau43").Sort.SortFields. _
Clear

Sht.ListObjects("Tableau43").Sort.SortFields. _
Add(Range("Tableau43[ou]"), xlSortOnCellColor, xlDescending, , xlSortNormal). _
SortOnValue.Color = RGB(192, 0, 0)

With Sht.ListObjects("Tableau43").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

Merci infiniment pour toute aide ça fait qqes jours que je patauge.
 

Pièces jointes

  • test.xlsm
    38.8 KB · Affichages: 5
Solution
Bonsoir.
Dans un module d'objet Worksheet, désignez cet objet par Me.
Et le 1er (et souvent seul) ListObject par Me.ListObjects(1).
Affectez le une seule fois par un Set à une variable au début d'une procédure :
VB:
Dim LOt As ListObject
Set LOt = Me.ListObjects(1)

Dranreb

XLDnaute Barbatruc
Bonsoir.
Dans un module d'objet Worksheet, désignez cet objet par Me.
Et le 1er (et souvent seul) ListObject par Me.ListObjects(1).
Affectez le une seule fois par un Set à une variable au début d'une procédure :
VB:
Dim LOt As ListObject
Set LOt = Me.ListObjects(1)
 

zayab

XLDnaute Junior
Haaa Merci Dranreb,

Ca marche ! En partie mais ca marche !

Alors dans mon code j'ai tâtonné pour finalement comprendre qu'il fallait que je modifie un peu pour adapter (inutile d'activer la feuille !!?? adieu Sht):
de ça _ Sht.ListObjects("Tableau43").Sort.SortFields.Clear
en ça_ LOt.Sort.SortFields.Clear

Mais je ne comprend pas comment le Tableau43 est différencié du Tableau54 (tous deux sur la même feuille) avec seulement ListObjects(1)?????

Et je bloque encore avec le tri:
Add(Range("Tableau43[ou]"), xlSortOnCellColor, xlDescending, , xlSortNormal). _
SortOnValue.Color = RGB(192, 0, 0)
Je peux utiliser LOt ? Mais comment?
 

Dranreb

XLDnaute Barbatruc
Faire attention, alors, s'il y a plusieurs tableaux dans la feuille, ce que je n'avais pas vu, à ce que l'index, dans la collection ListObjects du Worksheet, du ListObject qui représente le tableau souhaité soit bien 1 ou sinon au moins le même dans les Worksheet de toutes les feuilles concernées, si vous voulez pouvoir utiliser le même code partout.
Dans ce genre de cas, personnellement, je préfère écrire une procédure paramétrée dans un module standard, genre Public Sub NomProc(ByVal Wsh As Workseet) à laquelle je transmet au moins Me en tant que 1er paramètre depuis les Procédure des Worksheet, dont la maintenance est ainsi réduite au minimum.
 

zayab

XLDnaute Junior
Bonjour, Je réalise n'avoir pas clôturé le ticket. Merci Dranreb pour ton aide c'est super de pouvoir compter sur vous toutes et tous.
Je place le fichier qui fonctionne ici
La ou je bloquai encore avec le tri:
Add(Range("Tableau43[ou]"), xlSortOnCellColor, xlDescending, , xlSortNormal). _
SortOnValue.Color = RGB(192, 0, 0)
il suffit de remplacer le nom du tableau avec les références range
Add(Range("k33"), xlSortOnCellColor, xlDescending, , xlSortNormal). _
SortOnValue.Color = RGB(192, 0, 0)
c'est peut être un détail pour vous
 

Pièces jointes

  • test.xlsm
    28.8 KB · Affichages: 2

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…