× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 Feuilles dans l'ordre alphabétiqueSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
maryloo2005
  Posté le 29/01/2018 @ 15:53 
Aller en bas de la page 
Astucienne

Bonjour,

Est-il possible de classer des onglets de feuilles nommés dans l'ordre alphabétique ?

Merci et bonne fin de journée.

Publicité
poussebois
 Posté le 29/01/2018 à 16:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Maître astucien

Bonjour ,

Je suppose qu'il s'agit d'Excel ...

Il n'existe pas de fonction prévue pour cela.

Toutefois, cela est possible avec une macro VBA.

@ +

ferrand
 Posté le 30/01/2018 à 01:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

J'en ai fait une il y a peu de temps, peut-être même deux d'ailleurs (mais mon absence de classement rend très aléatoire de la retrouver dès que c'est sorti des fichiers récents) mais c'est assez vite écrit pour rendre inutile de chercher.

Sub TriOnglets()
Dim nf(), i%, j%
With ThisWorkbook
ReDim nf(.Worksheets.Count)
For i = 1 To .Worksheets.Count
nf(i) = .Worksheets(i).Name
Next i
For i = 1 To UBound(nf) - 1
For j = i + 1 To UBound(nf)
If nf(j) < nf(i) Then
nf(0) = nf(j): nf(j) = nf(i): nf(i) = nf(0)
End If
Next j
Next i
Application.ScreenUpdating = False
For i = UBound(nf) To 1 Step -1
.Worksheets(nf(i)).Move before:=.Worksheets(1)
Next i
End With
End Sub

Tu places la macro dans un module Standard et tu la lances...

Cordialement.

Debrief
 Posté le 30/01/2018 à 12:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Il y a un truc qui me laisse toujours perplexe avec les tableaux VBA.

Par défaut l'indice commence à 0, donc déclarer t(4) déclare un tableau de 5 éléments de 0 à 4 avec UBound(t) = 4
sauf...
- si on l'initie en chargeant avec des cellules: t = ActiveSheet.Range("x:y").Value -> tableau à 2 dimensions (1 à n lignes, 1 à p colonnes) avec UBound(t, 1) = n et UBound(t, 2) = p
- si on le précise dans la déclaration: Dim t(1 to 4) -> tableau de 4 éléments de 1 à 4 avec UBound(t) = 4
- si on utilise Option Base 1: Dim t(4) est comme Dim t(1 to 4) en défaut Option Base 0, mais Option Base 1 est inopérante sur un Split, t = Split("e,f,g,h", ",") -> tableau à 1 dimension (0 à 3) avec UBound(t) = 3

Cordialement,
D.

Edit: j'arrive à m'y emmêler les pinceaux et à ne pas écrire correctement en français



Modifié par Debrief le 30/01/2018 14:41
maryloo2005
 Posté le 30/01/2018 à 14:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucienne

bonjour,

oui, bien sûr il s'agit d'Excel.

Eh bien ça marche super bien. Merci Ferrand !

bonne fin de journée.

ferrand
 Posté le 31/01/2018 à 02:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

maryloo !

Salut Debrief !

Je reconnais que les tableaux c'est pas toujours simple, mais si tu veux te simplifier la vie il te faut établir quelques principes d'utilisation à ton propre usage, au moins pour t'éviter de te poser des questions par la suite sur ton propre code ! (ça m'est arrivé dans le temps !!! )

Ma pratique est simple, je reste sur l'Option Base 0 par défaut systématiquement, si je veux 1 ou une autre valeur, j'utilise la déclaration pour ça.

Ensuite dans un cas comme celui-ci, où j'ai des éléments qui se numérotent à partir de 1, je recueille les noms dans un tableaux en alignant les indices tableau sur les index de feuilles, mais je vais trier ce tableau pour classer les noms en ordre alpha, j'incorpore l'élément 0 qui va me servir pour le tri (switcher les éléments sans faire appel à une variable externe). Et ce système rend encore plus service sur un tableau à 2 dimensions que tu dois trier, car la ligne 0 aura la même taille que tes autres lignes et sera parfaitement adaptée.

Par ailleurs il faut savoir que les tableaux issues d'affectations des valeurs d'une plage (généralement on le fait en affectant à des variable de type Variant, mais le résultat est le même avec des variables tableaux dynamiques), renvoient toujours un tableau à 2 dimensions (même si la plage ne comporte qu'une ligne ou qu'une colonne), et d'indice minimal 1 pour les lignes comme pour les colonnes.

Une fois qu'on assimilé la chose, ça devient assez pratique : on met une plage en tableau pour la parcourir... sans se casser la tête on parcourt toujours de 1 à UBound...

Les tableaux formés avec Split ou Array, comme tu le notes, sont toujours de base 0 et à une dimension.

L'utilisation de Split est souvent intéressante quand tu formes une chaîne intercalant un séparateur pour ensuite la splitter, ce qui te permet de dénombrer les éléments et de les utiliser. Généralement en la formant tu n'évites pas de démarrer par un séparateur que je m'ingéniais autrefois à éliminer pour ne pas avoir d'élément vide... Je le fais toujours si je dois affecter le résultat splitté à une plage mais quand ce n'est pas le cas, cet élément vide rend bien des services ! En recueillant des éléments de cette façon tu ne sais pas combien tu en auras à l'arrivée, et si tu n'en as qu'un, en supprimant l'élément vide plus de tableau ! et éventuellement une erreur 13... ! En conservant cet élément vide, tu as la garantie que pour un seul élément recueilli tu auras toujours un tableau, le dénombrement n'en est que facilité (correspond à UBound sans correction) et à l'utilisation on boucle de 1 à UBound... Je peux t'assurer que le jour où j'ai décidé qu'il était bon de garder cet élément vide j'y est trouvé un grand confort d'utilisation...

On n'en finirait pas de discuter sur les tableaux...

Bonne soirée ou journée...

Debrief
 Posté le 31/01/2018 à 07:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Salut Ferrand,

J'ai en effet la même approche que toi concernant l'Option Base et la déclaration, et je comprends très bien l'utilité de l'élément 0 comme zone d'échange lors du tri. Et à force de m'être fait piéger lors de l'affectation d'une seule ligne (ou colonne) de cellules en tableau, je sais maintenant que ça donne toujours un tableau à 2 dimensions t(ligne(s), colonnes(s)) d'indice 1-n, 1-p.

Par contre je n'avais pas pensé au Split en ces termes et j'adopterai désormais ton approche de séparateur initial pour simplifier le décompte, l'analyse 1-n du tableau et éviter l'erreur du "non-tableau" avec 1 seul élément.

Merci pour tes infos.
D.

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
-25%Gardena : jusqu'à -25% sur les articles de jardin
Valable jusqu'au 30 Mai

Amazon fait une promotion sur une sélection d'articles de jardin bénéficient de remises jusqu'à -25%. Vous trouverez des pompes d'arrosage, des programmateurs, des raccords, des accessoires pour tondeuses, des outils, etc.


> Voir l'offre
23,29 €Clé USB Sandisk Ultra 128 Go à double connectique USB 3.1 Type A et C à 23,29 €
Valable jusqu'au 29 Mai

Amazon fait une promotion sur la clé USB Sandisk Ultra 128 Go à double connectique USB 3.1 Type A et C qui passe à 23,29 €. Cette clé USB  dispose d'un connecteur réversible USB Type C et d'un connecteur classique de type A. Grâce à elle, transférez en toute simplicité et rapidement (jusqu'à 150 Mo/s) vos fichiers entre vos smartphones, tablettes et ordinateurs. On la trouve ailleurs à plus de 40 €.


> Voir l'offre
374,99 €Carte mémoire MicroSDXC UHS-I U3 SanDisk Extreme Pro 1 To à 374,99 €
Valable jusqu'au 30 Mai

Amazon fait une vente flash sur la carte mémoire MicroSDXC UHS-I U3 SanDisk Extreme Pro d'une capacité de 1 To qui passe à 374,99 € alors qu'on la trouve ailleurs à partir de 500 €. Cette carte mémoire offre des vitesses jusqu'à 170 Mo/s en lecture et 90 Mo/s en écriture et intègre des mécanismes afin de gérer l'usure des cellules de la carte et augmenter ainsi sa durée de vie. Une valeur sûre pour les plus exigeants en FullHD et 4K.


> Voir l'offre

Sujets relatifs
Plusieurs feuilles excel par ordre alphabetique
ordre alphabétique dans open office Writer
mettre dans l'ordre alphabetique???
ordre alphabétique dans outlook 2003
Trier par ordre alphabétique
Mettre par ordre alphabétique sur LibreOffice
Nbre max de feuilles dans un classeur
classement par ordre alphabetique
classer une liste de noms par ordre alphabétique
ordre d'affichage dans Office Picture Manager
Plus de sujets relatifs à Feuilles dans l''ordre alphabétique
 > Tous les forums > Forum Bureautique