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 pour grouper des lignes sur une plage qui peut varier


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Macro pour grouper des lignes sur une plage qui peut varier
    Bonjour, j'ai le même problème que dans cette discussion.

    Il se trouve que je voudrais regrouper mes ligne en fonction de la colonne A a condition que les valeurs soient identique.

    65
    66
    66
    66
    67
    67
    67
    67
    68
    71
    71
    71
    71
    71
    72
    72
    72

    Voila le code que j'ai mais il ne fonctionne pas correctement

    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
    Sheets("TRM_ONEY").Activate
    fin = Cells(3, 1).End(xlDown).Row
    i = 3
     
        Do While i < fin + 1
          Range("D" & i).Select
          If Range("D" & i).Value = "" Then
            If Range("D" & i + 1).Value = "" Then
                If Range("D" & i + 2).Value = "" Then
                    Rows(i & ":" & i + 2).Select
                    Selection.Rows.Group
                    i = i + 1
                Else
                 Rows(i & ":" & i + 1).Select
                 Selection.Rows.Group
                 i = i + 1
                End If
            Else
            End If
          End If
          i = i + 1
        Loop
     
    Columns("D:D").EntireColumn.AutoFit
    Columns("E:E").EntireColumn.AutoFit
    Columns("F:F").EntireColumn.AutoFit
     
    fin = Cells(3, 1).End(xlDown).Row
    ActiveSheet.PageSetup.PrintArea = "$A$1:$AE$" & fin
    Le problème c'est qu'il me regroupe bien lorsqu'il n'y a que trois ligne. cependant des qu'une quatrieme ou une cinquieme apparait, il y a des sous groupement... merci de m'aider svp

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 48
    Points : 58
    Points
    58
    Par défaut
    J'ai fait un programme qui effectue une fusion de cellule
    si ça peut t'aider

    bonne chance

    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
    For compteur2 = 3 To DerniereLigne
     
        'numérotation pour la ligne
        numeroDeLigne1 = numeroDeLigne1
        n = n + 1
        numeroDeLigne2 = numeroDeLigne1 + n
     
        'valeur dans la cellule
        cas1 = Range("A" & numeroDeLigne1).Value
        cas2 = Range("A" & numeroDeLigne2).Value
     
        'Adresse de la cellule
        address1 = Range("A" & numeroDeLigne1).Address
        address2 = Range("A" & numeroDeLigne2).Address
     
     
        'Si la valeur ds cellules est égale alors on fusionne les cellules
        'si ce n'est pas égale alors la dernière cellule devient la première
        'on recommence alors le teste jusqu'à la dernière ligne
        If cas1 = cas2 Then
     
        Range(address1, address2).Select
     
            With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .WrapText = True
                .AddIndent = False
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
     
            Application.DisplayAlerts = False
            Selection.Merge
            Application.DisplayAlerts = True
     
            numeroDeLigne2 = numeroDeLigne1 + n
            Else
            cas1 = cas2
            address1 = address2
            numeroDeLigne1 = numeroDeLigne2
            numeroDeLigne2 = numeroDeLigne1 + 1
            n = 0
        End If
    Next compteur2

  3. #3
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    voici un code pour grouper en fonction de la première colonne
    pour que cela fonctionne, il faut inserer une ligne après chaque groupement.
    tu pourras mettre dans cette ligne vie un soustotal de la ligne (comme je suppose que c'est le but)

    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
    Sub GrouperParColonneA()
    Dim I, J
    Dim C As Range
     
    Set C = Cells(3, 1).End(xlDown)
    J = 3
    I = 3
     
    Do Until I > C.Row
        If Not Cells(I, 1) = Cells(I + 1, 1) Then
            Cells(I + 1, 1).EntireRow.Insert
            Range(Cells(J, 1), Cells(I, 1)).EntireRow.Group
            I = I + 1
            J = I + 1
        End If
        I = I + 1
    Loop
     
    End Sub

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Besoin d'aide
    Bonjour,

    Comment faire une macro disant que
    - Si la cellule de la colonne D n'est pas vide, mettre toute la ligne en gras
    - Si la cellule est vide, pas mettre en gras

  5. #5
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    en gros, comme ça!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cells.font.bold=true
    columns(4).SpecialCells(xlCellTypeBlanks).entirerow.Font.Bold=false

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut ^^
    Merci, c'est parfait ^^
    Franchement tu assures, c'est cool
    Merci bcp

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

Discussions similaires

  1. [XL-2013] Script pour mettre des données sur une même ligne
    Par initial32 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/12/2014, 13h45
  2. Réponses: 1
    Dernier message: 25/08/2014, 08h25
  3. Une macro pour supprimer des lignes dans un message
    Par blade2a dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/06/2012, 01h26
  4. Macro pour grouper des lignes sur une plage qui peut varier
    Par girardinho dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/07/2010, 09h43

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