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 :

Macro tri croissant [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 54
    Par défaut Macro tri croissant
    Bonjour a tous,

    Me voilà de nouveau pour un nouveau problème (décidément !!! ).
    Alors je voudrais trier mes données par ordre croissant avec comme paramètre de tri ma colonne A. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Tri_croissant()
     
    Dim maplage As Range
       With ThisWorkbook.Worksheets("Export_FP_09-09-09")
     Set maplage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 28).End(xlUp))
       End With
       Set maplage = maplage.Offset(1).Resize(maplage.Rows.Count - 1)
       maplage.Sort Key1:=maplage.Cells(1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom
     
    End Sub
    Le code fonctionne mais le problème est le nom du fichier. En effet mon fichier se nomme "Export_FP_09-09-09" cependant je voudrais que le code fonctionne quelque soit le nom du fichier. Ensuite le second problème est que si je n'enregistre pas ma macro dans le classeur "Export_FP_09-09-09" le code ne fonctionne pas. Car je l'enregistre dans un classeur "PERSONAL.xlsb pour que les macros que je crée soit accessible à partir de n'importe quel feuille.
    Merci pour votre aide !!!

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    cependant je voudrais que le code fonctionne quelque soit le nom du fichier
    Pour dénommer un classeur tu as la collection workbooks (workbooks("nomduclasseur.xls"), mais il faut bien un critère pour choisir le classeur ou une boite d'invite qui te demande le nom ou la boite de dialogue ouvrir...

    Pour ouvrir et instancier un classeur tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim wb as workbook, repertoire as string, fichier as string
    repertoire = "Le nom du repertoire"
    fichier = "le nom du fichier"
     
    Set wb = Workbooks.Open(Repertoire & "\" & Fichier)
    ' Ensuite tu peux utiliser wb pour utiliser le classeur wb.name ...

    Edit : Selon ce que tu veux faire, il y a plusieurs solutions, j'attends ta réponse avant d'en proposer.

  3. #3
    Membre expérimenté
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Par défaut Procédure avec paramètres
    Bonjour ,
    Il y a 2 problèmes à traiter :

    1) Exécuter une macro qui n'est pas dans le classeur 1
    2) Pouvoir utiliser la procédure tri quelque soit le fichier .

    1 ) Si la macro est dans le fichier PERSONAL.xlsb , il faut l'appeler avec la syntaxe : Application.Run PERSONAL.xlsb !Tri_croissant

    2) Pour utiliser le fichier avec d'autres nom , on peut ajouter des paramètre à la procédure :

    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
     
    ' modifiation dans la définition de la procédure 
     
     
     Sub Tri_croissant(nom_fichier as string , nom_feuil as string )
      Dim maplage As Range
      With ThisWorkbook.workbooks (nom_fichier  ).worksheets ( nom_feuil)
     
         Set maplage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 28).End(xlUp))
      End With
       Set maplage = maplage.Offset(1).Resize(maplage.Rows.Count - 1)
       maplage.Sort Key1:=maplage.Cells(1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom
    ....
     
    end sub 
     
    Pour l'appeler avec la nouvelle version :  Application.Run PERSONAL.xlsb !Tri_croissant nom_fichier   , nom_feuil.

    Je n'ai pas cherché à modifier ton code ...

  4. #4
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 54
    Par défaut
    Merci pour vos réponses !!!
    Je pense que c'est une question bête mais il faut que je crée une macro dans la feuille ou je travaille en mettant la ligne : "Application.Run PERSONAL.xlsb !Tri_croissant" pour pouvoir l'utiliser ???
    Je suis désolé mais je n'ai pas encore eu l'occasion d'utiliser une telle syntaxe.

  5. #5
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Re,

    Oui il faut créer une macro.A toi de choisir comment tu la déclenches, touches de raccourcis, bouton sur la feuille, à l'ouverture ...


    La syntaxe de la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "nomduclasseur.xls'!nomdelamacro"

  6. #6
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 54
    Par défaut
    Merci pour l'info !
    J'ai trouvé la solution, la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Tri_croissant()
     
    Dim maplage As Range
    NomFichier = ActiveWorkbook.Name
       With Workbooks(NomFichier).Worksheets(1)
     Set maplage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 28).End(xlUp))
       End With
       Set maplage = maplage.Offset(1).Resize(maplage.Rows.Count - 1)
       maplage.Sort Key1:=maplage.Cells(1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlTopToBottom
     
    End Sub
    En tout cas merci beaucoup pour votre aide !!!

    A plus!

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

Discussions similaires

  1. [XL-2010] Macro pour interdire la fonction tri croissant
    Par Peedjy dans le forum Excel
    Réponses: 3
    Dernier message: 20/06/2012, 13h45
  2. [XL-2003] Tri croissant dans un filtre auto par macro
    Par kernkraft dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/12/2010, 18h08
  3. besoin d aide algo tri croissant
    Par dju.ly dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 28/12/2005, 16h37
  4. Réponses: 2
    Dernier message: 27/10/2005, 15h51
  5. Réponses: 2
    Dernier message: 21/06/2005, 16h37

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