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 :

Trier les Range de la collection "Names"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut Trier les Range de la collection "Names"
    (clavier QWERTY)

    Bonjour,

    J'ai donne un nom a plusieurs Range (meme nombre de colonnes mais different nombre de lignes) que j'aimerai a present trier sur le meme argument. Comme je suis debutant voici le code que j'ai pour l'instant mais rien ne se passe:

    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
    Application.ScreenUpdating = False
     
    ssort = Range("F1")
     
    Dim xName As Name
     
      For Each xName In ActiveWorkbook.Names
     
          If xName.RefersToRange.EntireRow.Hidden = True Then
             xName.RefersToRange.EntireRow.Hidden = False
               xName.RefersToRange.Sort Key1:=Range(ssort), Order1:=Cells(3, 7).Value, Header:=xlNo, _
               OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
               DataOption1:=xlSortNormal
             xName.RefersToRange.EntireRow.Hidden = True
          Else
              xName.RefersToRange.Sort Key1:=Range(ssort), Order1:=Cells(3, 7).Value, Header:=xlNo, _
              OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
              DataOption1:=xlSortNormal
          End If
     
      Next
     
    Application.ScreenUpdating = True
    Je sais pas comment faire pour que xName soit interprete comme un Range; ex. : Range("Perso1"), Range("Perso2")...=> Range("xName").

    Et je sais pas non plus si ce que j'essai de faire est tres clair :-P

    Merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut martin et le forum
    Pas tout compris
    Range("Perso1") fait référence à la plage de cellules nommée "Perso1"
    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    Salut Gorfael,

    Désolé j'étais au boulo et trés pressé.

    Contexte: J'ai dans ma colonne A les noms de mes produits regroupés par type de produit et physiquement séparer par des interlignes que je désire conserver. Dans les colonnes B,C et D j'ai respectivement mon volume de vente, le prix des produits et le chiffre d'affaire.

    But: J'aimerai pourvoir effectuer un tri sur chaque groupe de produit, ascendant ou descendant, en fonction des colonnes B, C ou D. Ceci sans mélanger les groupes de produit séparés par des interlignes.

    Stratégie: J'ai nomé chaque zone; ex. la zone du premier produit du premier groupe, au dernier chiffre d'affaire du premier groupe s'appel "Groupe1". Comme en réalité j'ai 60 groupes, j'aimerai une macro qui réalise un tri sur tous les zones nomées, faisant donc parti de la collection Names de mon workbook.

    Jusqu'à présent j'avais ceci, "ssort" est la variable égale à la colume B, C ou D. L'ordre de tri est désigner par Cells(3,7) une variable dans la page active. Les histoires de Hidden T_F c'est pour le confort visuel de l'utilisateur final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ssort = Range("F1")
     
     If Range("Groupe1").EntireRow.Hidden = True Then
        Range("Groupe1").EntireRow.Hidden = False
          Range("Groupe1").Sort Key1:=Range(ssort), Order1:=Cells(3, 7).Value, Header:=xlNo, _
          OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
          DataOption1:=xlSortNormal
        Range("Groupe1").EntireRow.Hidden = True
     Else
          Range("Groupe1").Sort Key1:=Range(ssort), Order1:=Cells(3, 7).Value, Header:=xlNo, _
          OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
          DataOption1:=xlSortNormal
     End If
    J'ai se bloque de code pour les 60 groupes de produits, ca marche mais c'est pas long a modifier quand le format change un peu :-S Voilà donc pourquoi j'ai besoin d'une macro qui fasse ce tri avec toutes les zones nomées. Je voulais utiliser For Each Next (cf. premier post) mais je suis qu'un débutant et j'obtiens rien de probant.

    En espérant que c'est plus clair :-D Merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut martin et le forum
    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
    dim X as integer
    ssort = Range("F1")
    application.screenupdating=false
    for X = 1 to 60
     If Range("Groupe" & x).EntireRow.Hidden = True Then
        Range("Groupe" & x).EntireRow.Hidden = False
          Range("Groupe" & x).Sort Key1:=Range(ssort), Order1:=Cells(3, 7).Value, Header:=xlNo, _
          OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
          DataOption1:=xlSortNormal
        Range("Groupe" & x).EntireRow.Hidden = True
     Else
          Range("Groupe" & x).Sort Key1:=Range(ssort), Order1:=Cells(3, 7).Value, Header:=xlNo, _
          OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
          DataOption1:=xlSortNormal
     End If
    next X
    application.screenupdating=true
    Si j'ai compris le problème et que les noms soient de Groupe1 à Groupe60
    Sinon tu peux utiliser ta formulation initiale (j'ai raccourci le code pour donner un exemple, juste en sélectionnant zone apès zone).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim xName As Name
    For Each xName In ActiveWorkbook.Names
        Range(xName).Select
    Next xName
    End Sub
    Mais dans ce cas, il faut prévoir un test qui permet d'appliquer le tri qu'aux noms commençant par groupe
    if xname like 'groupe*" then ou
    if left(ucase(xname),6) = "GROUPE" then
    A+

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    ou
    if instr(xname,"groupe") = 1 then

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    Merci a tous.

    Le cas est resolu, mon code original (voir ci-dessous) aurait du fonctionne mais j'avais une zone nomee a travers plusieurs groupe sortie de nulpart... Alors forcement ca faisait tout bugger :-D

    A bientot pour de plus amples aventures

    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
    Dim xName As Name
    ssort = Range("E2").Value
     
    Application.ScreenUpdating = False
     
    For Each xName In ThisWorkbook.Names
     
      If Range(xName).EntireRow.Hidden = True Then
         Range(xName).EntireRow.Hidden = False
         Range(xName).Sort Key1:=Range(ssort), Order1:=Range("E6").Value, Header:=xlGuess, _
                      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                      DataOption1:=xlSortNormal
         Range(xName).EntireRow.Hidden = True
      Else
         Range(xName).Sort Key1:=Range(ssort), Order1:=Range("E6").Value, Header:=xlGuess, _
                      OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                      DataOption1:=xlSortNormal
      End If
     
    Next xName
     
    Application.ScreenUpdating = True

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/07/2011, 16h22
  2. Réponses: 3
    Dernier message: 26/04/2004, 12h51
  3. trier les données dans le cache ??
    Par psyco2604 dans le forum XSL/XSLT/XPATH
    Réponses: 31
    Dernier message: 10/06/2003, 10h03

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