IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Tri d'après sommaire des onglets d'un classeur XL [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut Tri d'après sommaire des onglets d'un classeur XL
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Ajout_Sommaire_NomsFeuilles() 
    <div style="margin-left:40px">Dim I As Integer 
    	ActiveWorkbook.Worksheets(1).Select 
    	ActiveSheet.Range("A2").CurrentRegion.ClearContents 
    	For I = 2 To ActiveWorkbook.Worksheets.Count 
    	ActiveSheet.Range("A" & I).Select 
    	ActiveSheet.Hyperlinks.Add _ 
    	Anchor:=Selection, _ 
    	Address:="", _ 
    	SubAddress:="'" & Worksheets(I).Name & "'!A1", _ 
    	TextToDisplay:=Worksheets(I).Name 
    	ActiveSheet.Range("B" & I) = Worksheets(I).Range("A1") 
    	ActiveSheet.Range("C" & I) = Worksheets(I).Range("B101") 
    	Next 
    	Cancel = True</div>End Sub
    J'avais également trouvé ce code-ci plus complet et devant me faire tout ce que je demande mais il ne semble pas fonctionner pour moi (sans doute parce que je m'y prends mal) et me met une "Erreur d'exécution 9 : L'indice n'appartient pas à la sélection" (ligne de débogage en gras) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Tri_Sommaire_Onglets_CAHT_BudFi()
        
    Sheets("Sommaire").Activate For I = 2 To Sheets.Count Cells(I, 1).Value = Sheets(I).Name Cells(I, 2).Value = Sheets(I).Range("A1").Value Cells(I, 3).Value = Sheets(I).Range("B101").Value Next Columns("A:C").Sort Key1:=Range("B101"), Order1:=xlDescending, Header:=xlNo Sheets(Cells(1, 1).Value).Move before:=Sheets(1) For I = 2 To Sheets.Count Sheets(Sheets("Sommaire").Cells(I, 1).Value).Move after:=Sheets(I - 1) Next
    End Sub
    Cela fait 3 jours que j'essaye de trouver une solution donc si quelqu'un(e) voulait bien m'aider siouplé ?

    Merci !

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    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.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut
    Citation Envoyé par ZebreLoup Voir le message
    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.
    Merci pour ta réponse !

    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.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Qu'est-ce que tu appelles l'intitulé de la feuille ? la cellule A1, le nom de l'onglet ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut
    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.

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Je pense que ça devrait marcher en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(Sheets("Sommaire").Cells(I, 1).Value).Move after:=Sheets(Sheets.Count)
    Vu que tu les as dans l'ordre, si tu les rajoutes à la fin à chaque fois, ce sera bon

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut
    Après test : j'ai toujours la même erreur au même niveau...

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Un exemple à adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub Tri_Sommaire_Onglets_CAHT_BudFi()
    Dim Ws As Worksheet
    Dim i As Integer, j As Integer
     
    Application.ScreenUpdating = False
    With Worksheets("Sommaire")
        .Move Before:=Sheets(1)
        .UsedRange.Clear
        For Each Ws In ThisWorkbook.Worksheets
            If Len(Ws.Name) = 9 Then                 'ici j'ai mis le test sur le nom des feuilles (je parcour les feuilles à 9 lettre par exemple)
                i = i + 1
                .Hyperlinks.Add Anchor:=.Range("A" & i), Address:="", SubAddress:="'" & Ws.Name & "'!A1", TextToDisplay:=Ws.Name
                .Range("B" & i) = Ws.Range("A1")
                .Range("C" & i) = Ws.Range("B101")
            End If
        Next Ws
        If i > 0 Then
            .Range("A1:C" & i).Sort Key1:=.Range("C1"), Order1:=xlDescending, Header:=xlNo
     
            For j = i To 1 Step -1
                ThisWorkbook.Worksheets(CStr(.Range("A" & j))).Move After:=Worksheets(1)
            Next j
        End If
        .Activate
    End With
    End Sub

  9. #9
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    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 ?)

  10. #10
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Un exemple à adapter
    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 Envoyé par ZebreLoup Voir le message
    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 ?)
    1. le tri au sein du sommaire se passe mais pas de tri au sein des onglets
    2. je ne comprends pas la question (j'ai dit débutante... )
    3. idem

    Merci encore de votre aide à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Chargement des onglets d'un classeur xls
    Par arnest dans le forum QlikView
    Réponses: 7
    Dernier message: 25/11/2013, 08h32
  2. Réponses: 9
    Dernier message: 22/10/2013, 13h50
  3. Réponses: 2
    Dernier message: 15/02/2011, 15h12
  4. [XL-2003] Copier des onglets vers nouveau classeur avec Variable
    Par xbb12 dans le forum Excel
    Réponses: 2
    Dernier message: 24/03/2010, 16h26
  5. réinitialiser le nbre des onglets apres suppression
    Par adilissimo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/06/2007, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo