× 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
8,99 €McAfee Internet Security 2020 (3 appareils, 1 an) à 8,99 €
Valable jusqu'au 15 Avril

Amazon fait une promotion sur la suite antivirus Internet Security 2020 qui passe à 8,99 €. Cette protection intégrale alliant antivirus, protection de l'identité et protection de la confidentialité des données pour tous vos PC, Mac, smartphones et tablettes est valide pour 3 appareils pendant 1 an. La clé d'activation ainsi que le lien de téléchargement vous seront envoyés par email une fois la commande passée. Une très bonne affaire.


> Voir l'offre
79,99 €Disque dur externe Western Digital My Passport 2 To + Clé USB 3.0 Sandisk 16 Go + Housse à 79,99 €
Valable jusqu'au 11 Avril

La Fnac fait une promotion sur un pack comprenant un disque dur externe Western Digital My Passport 2 To, un clé USB 3.0 Sandisk 16 Go ainsi qu'une housse à 79,99 € au lieu de 99,99 €.


> Voir l'offre
349,99 €TV + Xbox One S à partir de 349,99 €
Valable jusqu'au 12 Avril

Bonjour l'achat d'une TV parmi une sélection de modèles, la console Xbox One S avec un jeu et une manette passent à 1 €. Pour profiter de l'offre, ajoutez la TV et le pack console de votre choix. La remise s'effectuera dans votre panier. La TV Brandt 49,5 pouces B5006UHD 4K UHD avec le pack Xbox One S 1 To + Star Wars Jedi : Fallen Order vous reviendront par exemple à 449 €.


> 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