Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trier certaines feuilles d'un classeur et pas les autres...

2 réponses
Avatar
Excel...lent
Bonsoir la communauté,

Il ya quelques temps lorsque je sévissait sur ce forum avec le pseudo "
Excel...lent " j'avais demandé un coup de main pour trier des feuilles d'un
classeur contenant les 52 semaines d'une année. Chaque semaine était nommée
par un "S" + son numéro. Exemple la semaine 42 --> S42.

Un gentil contributeur dont j'ai oublié le nom ( qu'il veuille bien me
pardonner ) m'avait donné ce code :

ReDim tablo(0)
For Each s In ActiveWorkbook.Sheets
If Left(s.Name, 1) = "S" Then
ReDim Preserve tablo(UBound(tablo) + 1)
tablo(UBound(tablo)) = Val(Right(s.Name, Len(s.Name) - 1))
End If
Next
For I = 1 To UBound(tablo) - 1
a = WorksheetFunction.Large(tablo, I)
b = WorksheetFunction.Large(tablo, I + 1)
Sheets("S" & b).Move before:=Sheets("S" & a)
Next
End Sub

A l'époque je n'avais pas cherché à comprendre son fonctionnement, me
contentant de l'utiliser tout simplement.

Aujourd'hui je souhaiterais que ce tri s'effectue sur des feuilles qui se
nommeraient par l'année sur deux digit suivit du numéro de semaine comme
avant :
Exemple la semaine 42 de l'année 2007 serait nommée --> Y07-S42

Or le code ne fonctionne pas avec cette dénomination. Est-il possible de le
modifier ?

Et puis si quelqu'un a la patience et si cela n'est pas trop fastidieux pour
le contributeur je suis preneur d'une explication sur le code.

Merci beaucoup pour votre aide.

Cordialement.

Excel...lent

2 réponses

Avatar
Mishell
Bonjour.

Il te faut ici effectuer un tri du tableau Liste avant de pouvoir déplacer
les feuilles.


ReDim Liste(0)
'Mettre les noms des feuilles dans le tableau Liste()
For Each s In ActiveWorkbook.Sheets

ReDim Preserve Liste(UBound(Liste) + 1)
Liste(UBound(Liste)) = s.Name

Next

' Tri à bulle ascendant du tableau Liste()
Dim Premier As Integer, Dernier As Integer
Dim i As Integer, j As Integer
Dim Temp

Premier = LBound(Liste)
Dernier = UBound(Liste)
For i = Premier To Dernier - 1
For j = i + 1 To Dernier
If Liste(i) > Liste(j) Then
Temp = Liste(j)
Liste(j) = Liste(i)
Liste(i) = Temp
End If
Next j
Next i


' Déplacer les feuilles
For i = UBound(Liste) - 1 To 1 Step -1
Sheets(Liste(i)).Move before:=Sheets(Liste(i + 1))
Next i

Mishell


"Excel...lent" wrote in message
news:
Bonsoir la communauté,

Il ya quelques temps lorsque je sévissait sur ce forum avec le pseudo "
Excel...lent " j'avais demandé un coup de main pour trier des feuilles
d'un
classeur contenant les 52 semaines d'une année. Chaque semaine était
nommée
par un "S" + son numéro. Exemple la semaine 42 --> S42.

Un gentil contributeur dont j'ai oublié le nom ( qu'il veuille bien me
pardonner ) m'avait donné ce code :

ReDim tablo(0)
For Each s In ActiveWorkbook.Sheets
If Left(s.Name, 1) = "S" Then
ReDim Preserve tablo(UBound(tablo) + 1)
tablo(UBound(tablo)) = Val(Right(s.Name, Len(s.Name) - 1))
End If
Next
For I = 1 To UBound(tablo) - 1
a = WorksheetFunction.Large(tablo, I)
b = WorksheetFunction.Large(tablo, I + 1)
Sheets("S" & b).Move before:=Sheets("S" & a)
Next
End Sub

A l'époque je n'avais pas cherché à comprendre son fonctionnement, me
contentant de l'utiliser tout simplement.

Aujourd'hui je souhaiterais que ce tri s'effectue sur des feuilles qui se
nommeraient par l'année sur deux digit suivit du numéro de semaine comme
avant :
Exemple la semaine 42 de l'année 2007 serait nommée --> Y07-S42

Or le code ne fonctionne pas avec cette dénomination. Est-il possible de
le
modifier ?

Et puis si quelqu'un a la patience et si cela n'est pas trop fastidieux
pour
le contributeur je suis preneur d'une explication sur le code.

Merci beaucoup pour votre aide.

Cordialement.

Excel...lent


Avatar
Excel...lent
Salut Mishell,

Je te prie de bien vouloir m'excuser pour ne pas avoir répondu plus tôt. En
ce moment je bosse de nuit alors je suis un vrai "zombi".

Sinon ta proposition est exactement ce que je recherche. Je l'ai adapté à
mon application et ça tourne au poil !

Merci de ton coup de main.

Cordialement.

Excel...lent