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 :

Imbrication de boucles [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Imbrication de boucles
    Bonjour,

    je travaille actuellement sur l'automisation de la présentation de données triées suivants 3 critères :
    la date (A) / le lieu (B)/ les horaires de début (C)

    Pour le tri par date pas de soucis, les données qui sont importées sont déjà triées.
    il faut ensuite que je trie les données, qui ont la même date, suivant le lieu .
    Au final ça donne ceci :
    A date B lieu C heure
    13/04/15 chap. 20rd 10:00
    13/04/15 chap. 20rd 14:00
    13/04/15 garage 14:00
    27/04/15 chap. 20rd 10:00
    05/05/15 chap. 20rd 10:00

    mon problème c'est que je ne vois pas comment récupérer mon range, y appliquer les filtres et ensuite reprendre la recherche pour une autre plage de données.

    dans ma tête,

    1 boucle sur tout le tableau "For i=9 to dernière ligne"

    à l'intérieur une boucle qui va tester chaque ligne par rapport à la suivante suivant la date pour connaitre la 1ere et la dernière ligne qui ont la même date et sur lesquelles on va travailler
    quand la date n'est plus la même cette boucle s'arrête et je réalise les instructions de tri sur la plage déterminée
    ensuite je reprends (???) la boucle à la ligne suivante, c'est là que je vois pas comment on fait ?

    j'ai essayé avec do while mais ça s'arrête pas, en faisant pas à pas. So help me please ! y'a peut être une autre méthodeb ou logique ?

    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
    Sub Tridonnees()
    Dim DernLigne As Long
    Dim dl As Long 'dernier ligne avec même date
    Dim cpt As Long 'compte le nombre de ligne de même date
    Dim i As Long
     
        'réinitialise les variables
        dl = 8
        cpt = 0
        DernLigne = Feuil1.Range("B" & Rows.Count).End(xlUp).Row
     
    For i = 9 To DernLigne
     
    Do While Feuil1.Range("A" & i).Value = Feuil1.Range("A" & i + 1).Value
    dl = dl + 1
    cpt = cpt + 1
    Loop
    Feuil1.Range("B" & dl - cpt, "C" & dl).Select
     
     
    Next i
     
        'macro enregistrée pour le tri   
        'Range("A9:F13").Select
        'ActiveWorkbook.Worksheets("planning").Sort.SortFields.Clear
        'ActiveWorkbook.Worksheets("planning").Sort.SortFields.Add Key:=Range("B9:B13" _
            ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
       ' ActiveWorkbook.Worksheets("planning").Sort.SortFields.Add Key:=Range("C9:C13" _
            ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
       ' With ActiveWorkbook.Worksheets("planning").Sort
            '.SetRange Range("A8:F13")
            '.Header = xlYes
            '.MatchCase = False
            '.Orientation = xlTopToBottom
            '.SortMethod = xlPinYin
            '.Apply
       ' End With
     
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 089
    Points : 9 880
    Points
    9 880
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si j'ai bien compris :

    - tu as trois colonnes
    - tu veux faire un tri croissant sur les trois colonnes avec en ordre de priorité : DATE / LIEU / HEURE

    si tel est le cas, l'enregistreur de macro te donne le début de solution qu'il restera à adapter :

    - selectionner les trois colonnes
    - appliquer un "tri automatique"

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    oui c'est bien cela,

    avec l'enregistreur j'ai le code pour faire le tri mais sur une plage de données définies , mais le problème c'est que la plage de cellules peut être différente à chaque fois.
    c'est là que je vois pas comment récupérer les adresses des lignes

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 089
    Points : 9 880
    Points
    9 880
    Billets dans le blog
    5
    Par défaut
    oups, j'avais pas vu dans ton code que tu avais déjà fait ça, désolé !

    du coup je me rattrape, teste ça :

    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
     
    Option Explicit
     
    Sub sylhel34()
     
        Dim Derlig As Integer
        Dim Sh As Worksheet
     
        Set Sh = ThisWorkbook.Worksheets("Feuil1")
     
        With Sh
     
            Derlig = .Range("B" & Rows.Count).End(xlUp).Row  ' j'ai repris ton morceau de code
     
            With .Sort
     
                .SortFields.Clear
                .SortFields.Add Key:=Range("A2:A" & Derlig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .SortFields.Add Key:=Range("B2:B" & Derlig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .SortFields.Add Key:=Range("C2:C" & Derlig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                .SetRange Range("A1:C" & Derlig)
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
     
                .Apply
            End With
        End With    
        Set Sh = Nothing
    End Sub
    je pars de tes postulats (et je suppute le reste) :

    - trois colonnes
    - les données commencent en ligne 2
    - pas de ligne vide entre deux lignes de données
    - tes trois colonnes possèdent des entêtes en ligne 1

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    en fait tu as raison, c'est moi qui fait fausse route,

    les tris automatiques marchent nickel directement sur l'ensemble du tableau

    comment on peut se prendre la tête alors que c'est si simple !

    merci de m'avoir remise sur le bon chemin.

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 089
    Points : 9 880
    Points
    9 880
    Billets dans le blog
    5
    Par défaut
    Attention,

    j'ai modifié mon précédent message, il y avait une coquille qui ne triait pas le troisième niveau (les heures)

    j'ai retesté avec une 15aines de lignes un peu bidons, et c'était concluant pour moi

    à toi de me dire

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

Discussions similaires

  1. Imbrication de boucles For
    Par dominos dans le forum Débuter
    Réponses: 4
    Dernier message: 03/04/2010, 17h53
  2. Imbrication de boucles
    Par vega95 dans le forum Général Python
    Réponses: 10
    Dernier message: 14/12/2009, 07h35
  3. [MySQL] Imbrication de boucle if /else et while
    Par jmtrivia dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/04/2009, 12h11
  4. imbrication de boucle (exemple :d'upload)
    Par new-dmx dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2008, 15h18
  5. Encore problème d'imbrication de boucles
    Par flora806 dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2008, 15h25

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