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 ordonnancement excel [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Manager
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Par défaut
    Oui dsl et merci pour tout ce que tu as fait!!!

    Et je me suis trompé dsl, je voulais mettre quand je change plusieurs fois l'ordre des numéros que le tri ne fonctionne plus.

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    il est normal que tu aies des bug, ton fichier n'a plus la même configuration qu'au départ, tu allais jusqu'à la colonne "J", maintenant c'est la colonne "I".

    d'après ton dernier fichier, voici ce que tu dois écrire en module1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
    Dim Dcol As Long, Dcel As Range, i As Long, Tb()
    Dim x As Long
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub tri_ss_gr_Click() 'voir le nom du bouton
    Application.ScreenUpdating = False
    etablir
    Application.ScreenUpdating = True
    End Sub
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Sub etablir()
    Dim A_trier As Range, ListeNoms As Object, Nom As String, Ingd As String
    Nom = ""
    Set ListeNoms = CreateObject("System.Collections.ArrayList") ' un "Arraylist pour trier plus facilement en bas du module
    ReDim Tb(1 To 1) 'j'initialise une variable tableau
    x = 0
    Dcol = Cells(5, Columns.Count).End(xlToLeft).Column ' on cherche la dernière colonne
    Ingd = Cells(5, Dcol)
    Set Dcel = Cells(Rows.Count, Dcol).End(xlUp) 'et la dernière cellule dans cette colonne
    For i = 5 To Dcel.Row 'on boucle sur cette colonne
      If Cells(i, Dcol).Value = Ingd Then 'on vérifie la cellule
        x = x + 1 'si vérifié, on incrémente x
        ReDim Preserve Tb(1 To x) 'on redimensionne le tableau
        Tb(x) = Cells(i, Dcol).Address 'et on donne l'adresse à l'élément du tableau
      End If
    Next i
    For i = 1 To UBound(Tb) - 1 'on boucle sur le tableau
      Set A_trier = Range(Range(Tb(i))(2, -Dcol + 2), Range(Tb(i + 1))(0, 1)) 'plage qui sera triée
      tri A_trier, Range(Tb(i))(2, 1) 'on va sur la procédure tri
      Nom = Split(Range(Tb(i))(1, -Dcol + 3), " ")(1) 'nom représente le mot après "Marque"
      ActiveWorkbook.Names.Add Name:=Nom, RefersTo:= _
          Range(Range(Tb(i))(1, -Dcol + 2), Range(Tb(i + 1))(0, 1)) 'on définit un nom pour la plage triée
      ListeNoms.Add Nom 'on ajoute ce nom à une "ArrayList"
    Next i
      'ci-dessous pour le dernier groupe
    Set A_trier = Range(Range(Tb(UBound(Tb)))(2, -Dcol + 2), Dcel)
    tri A_trier, Range(Tb(UBound(Tb)))(2, 1)
    Nom = Split(Range(Tb(UBound(Tb)))(1, -Dcol + 3), " ")(1)
    ListeNoms.Add Nom
    ActiveWorkbook.Names.Add Name:=Nom, RefersTo:= _
          Range(Range(Tb(UBound(Tb)))(1, -Dcol + 2), Dcel)
    '---------------------------------------------------------------
    Range(ListeNoms(0)).Cut Destination:=Range("J5") 'on déplace la 1ère plage (1er bloc) à droite de la dernière colonne
      'et les autres au travers d'une boucle
    For i = 1 To ListeNoms.Count - 1
      Set Dcel = Cells(Rows.Count, Dcol * 2).End(xlUp)(2, -Dcol + 2)
      Range(ListeNoms(i)).Cut Destination:=Dcel
    Next i
      '-------------------------------------------------------------
    ListeNoms.Sort 'on trie les noms des blocs
    Range(ListeNoms(0)).Cut Destination:=Range("A5") 'on remet le 1er bloc au début
      'et les autres au travers d'une boucle
    For i = 1 To ListeNoms.Count - 1
      Set Dcel = Cells(Rows.Count, Dcol).End(xlUp)(2, -Dcol + 2)
      Range(ListeNoms(i)).Cut Destination:=Dcel
    Next i
    End Sub
    Private Sub tri(laplage As Range, lacel As Range)
    laplage.Sort Key1:=lacel, Order1:=xlAscending, Header:=xlNo, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
     
    End Sub
    je ne t'envoies pas de fichier pour l'instant car je veux comprendre ce que tu veux comme tri avec ce genre de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Tri230()
        Rows("5:50").Select
        Selection.Sort Key1:=Range("F5"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        Selection.Sort Key1:=Range("A5"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        Range("A1").Select
    End Sub
    déjà, eviter les "Select", ensuite à quoi sert de trier sur "F5" si tu recommences avec "A5"
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre habitué
    Homme Profil pro
    Manager
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Par défaut
    Ok.En fait j'ai simplifié le fichier à 5 marques mais j'ai plus de 50 marques.Voila comment je procède.Avant d'affecter les numéros en colonne A ,je recherche toutes les références que je dois ordonner (pas toutes).Car il s'agit d'une feuille standard avec tous les marques.Et le tri croissant par code article me permet de trouver plus rapidement mes références pour leur affecter un numéro.

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    1ère chose :
    si tu es amené à changer le nombre de colonnes dans ton tableau, remplaces cette ligne de mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(ListeNoms(0)).Cut Destination:=Range("J5") 'on déplace la 1ère plage (1er bloc) à droite de la dernière colonne
    par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(ListeNoms(0)).Cut Destination:=Cells(5, Dcol + 1) 'on déplace la 1ère plage (1er bloc) à droite de la dernière colonne
    2ème chose : j'espère que tu as vu pourquoi j'ai ajouté une variable pour ces lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ......
    Ingd = Cells(5, Dcol)......
      If Cells(i, Dcol).Value = Ingd Then 'on vérifie la cellule
    3ème chose : je ne comprends pas tes explications pour les tris que j'estime alambiqués mais ça reste ton problème car non prévu dans la demande
    dis-moi au moins si ma dernière version fonctionne
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre habitué
    Homme Profil pro
    Manager
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Par défaut
    J'ai mis le tri en colonne F,uniquement quand la colonne A est vide.Imaginons que j'affecte que 2 numéros (exemple 1 : en colonne A pour la marque Leclerc et 2 pour la marque Carrefour) et rien en colonne A sur les autres marques.En faisant mon tri,il mettra en 1 la marque Leclerc et en 2 la marque Carrefour.Les autres marques ayant aucun numéro affectées en colonne A seront triées par tri croissant en fonction de leur code article en colonne f.

    J'ai essayé ton code.Il trie bien les numéros les lignes auxquelles j'ai affecté un numéro.Mais pas les autres.Peux tu m'envoyer le fichier stp si ça fonctionne chez toi.
    Je suis désolé si je suis pas clair.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Graphe et Macro et Excel et VBA
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 18/11/2005, 17h24
  2. Activation des macros sous Excel
    Par Igloobel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/10/2005, 11h44
  3. macro sous excel
    Par julien13200 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2005, 15h49
  4. Macro dans excel permettant de voir si un fichier est ouvert
    Par VirginieGE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/08/2004, 07h51
  5. [VBA-E] macro conversion excel vers csv
    Par baboune dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/07/2004, 09h23

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