|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : janvier 2012 Messages : 6 ![]() |
Bonjour,
N'ayant pas trouvé de solution à mon problème après plusieurs jours de recherche je me permets de poser ma question ici : J'ai un classeur Excel avec un nombre variable de feuilles (+250 et ça grandit) certaines avec des données brutes (souvent issues d'extraction de EssBase mais pas que), d'autres exploitant ces données et les mettant en forme. Ces dernières sont généralement intitulée numériquement sous le format ##### mais, pour faire simple, pas toujours (ex: 5 lettres puis 4 chiffres), ceux-ci correspondant à la nomenclature interne. Je souhaite d'abord créer un sommaire pour pouvoir trier ces dernières d'après l'adresse de cellule "B101" comme suit : - absence dans le sommaire des feuilles masquées & des feuilles non "nomenclaturées" (dont le nombre et le nom varie au cours du temps) - peut être en excluant les onglets qui sont de telle ou telle couleur ? (mais je ne sais pas comment faire cela ! - extraction dans ce sommaire de : intitulé de la feuille ; valeur en "A1" (nom de mon entité ; propre à chaque feuille) ; valeur en "B101" (valeur de tri des onglets par la suite) - lien hypertexte au niveau de l'intitulé de la feuille Par la suite je souhaite trier ce sommaire d'après la valeur "B101" de chaque feuille, puis ordonner uniquement les onglets concernés (nomenclaturés) dans l'ordre de ce sommaire sans toucher à celles qui ne m'intéressent pas. J'ai trouvé ce code que j'ai modifié pour obtenir un sommaire avec nom de feuille avec lien hypertexte, valeur A1 et valeur B101. Mais ne connaissant rien (ou presque) en VBA je n'ai pas su aller plus loin : Code :
Code :
![]() Merci ! |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Alors déjà, le premier code que tu as trouvé, il est vraiment pas beau. Comme on le dit souvent, il faut éviter les Select ou Activate à répétition.
Je m'intéresse plutôt au 2ème donc. Le problème qui se pose, c'est que tu appelles les feuilles par leur numéro, mais que ce numéro change dès que tu bouges une feuilles.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Inscription : janvier 2012 Messages : 6 ![]() |
Citation:
Je note pour le second code (qui de toute façon me convient plus) mais alors quelle syntaxe utiliser? Je suis plus débutante que débutante en VBA (3 jours...) et j'apprends vraiment sur le tas. Merci donc par avance de ta patience et de tes explications. |
|
|
|
00
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Bonjour,
Qu'est-ce que tu appelles l'intitulé de la feuille ? la cellule A1, le nom de l'onglet ?
__________________
Cordialement. Daniel Citation:
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : janvier 2012 Messages : 6 ![]() |
Bonjour,
Intitulé de la feuille : nom de l'onglet. La cellule A1 correspond à une donnée interne, soit le nom d'une entité (chaque entité a une nomenclature dans la base de données - normal - et A1 correspond à son nom). Merci. |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Je pense que ça devrait marcher en faisant
Code :
Sheets(Sheets("Sommaire").Cells(I, 1).Value).Move after:=Sheets(Sheets.Count)
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : janvier 2012 Messages : 6 ![]() |
Après test : j'ai toujours la même erreur au même niveau...
|
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Un exemple à adapter
Code :
__________________
Cordialement. |
||
|
|
10
|
|
|
#9 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Le tri s'est bien passé ? Il y a bien toujours le nom d'une feuille existante dans la colonne A entre la ligne 2 et la ligne Worksheets.Count ?
Le problème apparait au début de la boucle, à la fin ? (Quelle est la valeur de I ?)
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#10 | |
|
Invité de passage
![]() Inscription : janvier 2012 Messages : 6 ![]() |
J'ai testé et cela a l'air de marché à peu près : l'ordre des onglets a l'air particulier avec les valeur "0" en premier, puis les valeurs décroissantes et enfin les valeurs "vides".
Y a-t-il possibilité d'adapter la syntaxe pour avoir quelque chose comme LEN(Ws.Name) = 9 or 6 afin de s'adapter aux deux types de nomenclatures? Citation:
2. je ne comprends pas la question (j'ai dit débutante... 3. idem Merci encore de votre aide à tous. |
|
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2008 Messages : 5 848 ![]() |
Code :
If Len(Ws.Name) = 9 Or Len(Ws.Name) = 6 Then 'ici j'ai mis le test sur le nom des feuilles (je parcour les feuilles à 9 ou 6 lettres par exemple)
__________________
Cordialement. |
|
|
10
|
|
|
#12 |
|
Invité de passage
![]() Inscription : janvier 2012 Messages : 6 ![]() |
Merci ! C'est effectivement ce que j'avais fait de mon côté et qui fonctionne très bien. Désormais cette solution fonctionne (presque) parfaitement, je ferai le reste.
Merci à tous pour votre aide, vous m'avez bien permis d'avancer.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com