Créer une table de matières dynamique

pricer

XLDnaute Nouveau
Bonjour

Je travaille sur un fichier Excel comportant plusieurs feuilles. J’ai crée un feuille ‘’Menu’’ où j’ai mis les titres de l’ensemble de mes feuille, une table des matières en quelques sortes.
Je voudrai savoir s’il est possible de configurer cette feuille ‘’table des matières’’ de telle sorte que je ne puisse avoir que les grands titres 1, 2,3, etc. et c’est en cliquant sur chaque ligne que je trouverais les sous titres 1.1, 1.2, 1.3, etc. histoire d’avoir une feuille par trop encombrante.

Je vous remercie par avance de vos suggestions.

Pricer ..
 

job75

XLDnaute Barbatruc
Re : Créer une table de matières dynamique

Re,

Le chr(255) pour définir derlig, ce n'est pas génial si des textes commencent par Z en colonne A...

Ecrire plutôt :

Code:
derlig = Application.Match([COLOR="Red"]"zzzzzzzzzz"[/COLOR], [A:A])

Edit : bof, utiliser le caractère de code 254 [Reédit : zéro pointé, totalement erroné] :

Code:
derlig = Application.Match(Chr([COLOR="Red"]254[/COLOR]), [A:A])

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Créer une table de matières dynamique

Re,

Voici une 2ème solution, sans repères en colonne B :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim derlig As Long, lig As Long, n As Byte, test As Boolean
derlig = Application.Match("zzzzzzzzzz", [A:A])
If Intersect(Target, Range("A1:A" & derlig)) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Cancel = True
lig = Target.Row + 1
n = Len(Target)

[COLOR="Red"]'pour déterminer l'action du double-clic
While Rows(lig).Hidden
  lig = lig + 1
Wend
test = Len(Cells(lig, 1)) > n
lig = Target.Row + 1[/COLOR]

If [COLOR="red"]test[/COLOR] Then
  While Len(Cells(lig, 1)) > n And lig <= derlig
    Rows(lig).Hidden = True
    lig = lig + 1
  Wend
Else
  While Len(Cells(lig, 1)) > n And lig <= derlig
    If Len(Cells(lig, 1)) = n + 1 Then Rows(lig).Hidden = False
    lig = lig + 1
  Wend
End If
End Sub

Perso je préfère la 1ère solution, on voit mieux ce qui se passe...

A+
 

Pièces jointes

  • Arborescence(2).xls
    34 KB · Affichages: 50
Dernière édition:

job75

XLDnaute Barbatruc
Re : Créer une table de matières dynamique

Re encore,

J'ai été chercher midi à quatorze heure pour la version (2), on s'emmêle vite les pinceaux...

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim derlig As Long, lig As Long, n As Byte
derlig = Application.Match("zzzzzzzzzz", [A:A])
If Intersect(Target, Range("A1:A" & derlig)) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Cancel = True
lig = Target.Row + 1
n = Len(Target)
[COLOR="Red"]If Rows(lig).Hidden Then[/COLOR]
  While Len(Cells(lig, 1)) > n And lig <= derlig
    If Len(Cells(lig, 1)) = n + 1 Then Rows(lig).Hidden = False
    lig = lig + 1
  Wend
Else
  While Len(Cells(lig, 1)) > n And lig <= derlig
    Rows(lig).Hidden = True
    lig = lig + 1
  Wend
End If
End Sub

A+
 

Pièces jointes

  • Arborescence(3).xls
    34 KB · Affichages: 53
Dernière édition:

hoerwind

XLDnaute Barbatruc
Re : Créer une table de matières dynamique

Re,

Milles mercis, c'est exactement ce que je souhaitais.
Personnellement je préfère la deuxième solution (comme disait mon dentiste : les coûts et les douleurs cela ne se discute pas !)

Je vais maintenant appliquer ta macro à grande échelle et te tiens au courant.
Merci encore !
 

hoerwind

XLDnaute Barbatruc
Re : Créer une table de matières dynamique

Re,

J'ai testé en grandeur nature.

Trois problèmes :

Un gros : la macro ne veut pas fonctionner sous le ligne 27, vois un extrait sous la pièce jointe.
J'ai beau regarder sous la code, je ne vois pas de limitation.

Un moyen : je souhaite que le double-clic se fasse sur la colonne B, tout en tenant compte des données de la colonne A, le double-clic dans cette dernière étant réservé à autre chose.
Dans l'état actuel de la macro, je n'ose trop y toucher pour essayer de régler ce problème moi-même.

Un petit : je ne savais pas que tri ne fonctionne pas lorsqu'il y a des lignes masquées.
C'est à dire que tout le tableau doit être affiché avant de trier : fastidieux
Je songe à une macro qui par un double-clic en A2 (ou B2, au choix), affiche tout, trie, puis referme tout.
Pas urgent (oups, on ne peut employer ce mot !)

Si tu as le temps d'y jeter un coup d'oeil.
Merci d'avance.
 

Pièces jointes

  • ArborescenceV4.zip
    11.6 KB · Affichages: 59

hoerwind

XLDnaute Barbatruc
Re : Créer une table de matières dynamique

Re,

Le gros problème est résolu.
Une erreur de codification, vois la pièce jointe, elle fonctionne.
J'avais sauté de 3 à 5 lettres, pour faire correspondre la MFC.
Je vais donc revoir cette codification.
 

Pièces jointes

  • ArborescenceV5.zip
    11.6 KB · Affichages: 36

job75

XLDnaute Barbatruc
Re : Créer une table de matières dynamique

Re hoerwind,

Pour le problème "moyen" les modifs en rouge :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim derlig As Long, lig As Long, n As Byte
derlig = Application.Match("zzzzzzzzzz", [A:A])
If Intersect(Target, Range("[COLOR="red"]B3:B[/COLOR]" & derlig)) Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Cancel = True
lig = Target.Row + 1
n = Len(Target[COLOR="Red"].Offset(, -1)[/COLOR])
If Rows(lig).Hidden Then
  While Len(Cells(lig, 1)) > n And lig <= derlig
    If Len(Cells(lig, 1)) = n + 1 Then Rows(lig).Hidden = False
    lig = lig + 1
  Wend
Else
  While Len(Cells(lig, 1)) > n And lig <= derlig
    Rows(lig).Hidden = True
    lig = lig + 1
  Wend
End If
End Sub

Edit : pour le "petit" problème (tri) pas trop compris.

Il est facile de tout afficher : Ctrl+A => menu Format-Ligne-Afficher...

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Créer une table de matières dynamique

Bonjour hoerwind, le forum,

Je mérite un zéro pointé :mad:

Pour le calcul de derlig, Chr(254) ne va pas du tout !

En fait "zzzzzzzzzz" (ou même "zz") est supérieur à n'importe quel caractère ANSI.

J'ai donc modifié mes posts #16 17 18 22.

A+
 

job75

XLDnaute Barbatruc
Re : Créer une table de matières dynamique

Re hoerwind,

Peux-tu m'expliquer à quoi sert le derlig ?

Il suffit de regarder la macro et voir où intervient cette variable derlig.

Elle sert à 2 choses :

- définir la plage où agit le double-clic

- limiter les boucles de balayage des cellules à cette dernière ligne.

Nota : on ne peut pas utiliser ici [A65536].End(xlUp).Row car les cellules masquées ne seraient pas prises en compte...

A+
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 845
Messages
2 092 770
Membres
105 529
dernier inscrit
StarExcel