macro pour regrouper des lignes

Le
marchepied
Bonjour,
j'ai une base Excel dont le nombre d'enregistrement qui varie chaque
jours (venant d'un AS400). cette base contient en colonne H, un le
chiffre 1 ou 2. un nombre indeterminé de 1 est suivi par un nombre
indéterminé de 2. voir exemple ci-dessous.
j'aimerai que tout les 2 soit regroupés par petit groupe (lignes
cachés)
quand on ouvre la base, on voit que les lignes où il y a le chifrre 1.
(les lignes avec 2 sont cachées, mais avec le petit + sur la gauche.
et que l'on puisse faire apparaitre chaque petit groupe de 2
indépendement des autres groupes de 2.
en faite, un petit groupe de 2 appartient au 1 suppérieur.
meci pour votre aide.

colonne H
1
1
2
2
2
1
2
2
2
2
1
1
1
1
1
2
2

je voudrai:
colonne H
1
+ 1
+ 1
1
1
1
1
+ 1
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #18589091
Bonjour.
Le problème est que dans une suite :
1
2
2
2
1
2
2
si tu fais un premier groupement avec :
1
2
2
2
tu obtiens :
+1
1
2
2
Ce qui est ce que tu souhaites, mais si tu procèdes au secong
groupement,
tu obtiens un seul regroupement :
+1
Il faut au moins deux 1 pour obtenir des groupes séparés.
Cordialement.
Daniel

Bonjour,
j'ai une base Excel dont le nombre d'enregistrement qui varie chaque
jours (venant d'un AS400). cette base contient en colonne H, un le
chiffre 1 ou 2. un nombre indeterminé de 1 est suivi par un nombre
indéterminé de 2. voir exemple ci-dessous.
j'aimerai que tout les 2 soit regroupés par petit groupe (lignes
cachés)
quand on ouvre la base, on voit que les lignes où il y a le chifrre 1.
(les lignes avec 2 sont cachées, mais avec le petit + sur la gauche.
et que l'on puisse faire apparaitre chaque petit groupe de 2
indépendement des autres groupes de 2.
en faite, un petit groupe de 2 appartient au 1 suppérieur.
meci pour votre aide.

colonne H
1
1
2
2
2
1
2
2
2
2
1
1
1
1
1
2
2

je voudrai:
colonne H
1
+ 1
+ 1
1
1
1
1
+ 1


Daniel.C
Le #18589341
A ceci près,, tu peux utiliser :

Sub test()
Dim c As Range, Res As Range
For Each c In Range([H1], [H65000].End(xlUp))
var = c.Address
If c = 1 And c.Offset(1) = 2 Then
Set Res = c
ElseIf c = 2 And (c.Offset(1) = 1 Or _
c.Offset = "") Then
Range(Res, c).Rows.Group
Range(Res.Offset(1), c).EntireRow.Hidden = True
End If
Next c
End Sub

Cordialement.
Daniel

Bonjour.
Le problème est que dans une suite :
1
2
2
2
1
2
2
si tu fais un premier groupement avec :
1
2
2
2
tu obtiens :
+1
1
2
2
Ce qui est ce que tu souhaites, mais si tu procèdes au secong groupement,
tu obtiens un seul regroupement :
+1
Il faut au moins deux 1 pour obtenir des groupes séparés.
Cordialement.
Daniel

Bonjour,
j'ai une base Excel dont le nombre d'enregistrement qui varie chaque
jours (venant d'un AS400). cette base contient en colonne H, un le
chiffre 1 ou 2. un nombre indeterminé de 1 est suivi par un nombre
indéterminé de 2. voir exemple ci-dessous.
j'aimerai que tout les 2 soit regroupés par petit groupe (lignes
cachés)
quand on ouvre la base, on voit que les lignes où il y a le chifrre 1.
(les lignes avec 2 sont cachées, mais avec le petit + sur la gauche.
et que l'on puisse faire apparaitre chaque petit groupe de 2
indépendement des autres groupes de 2.
en faite, un petit groupe de 2 appartient au 1 suppérieur.
meci pour votre aide.

colonne H
1
1
2
2
2
1
2
2
2
2
1
1
1
1
1
2
2

je voudrai:
colonne H
1
+ 1
+ 1
1
1
1
1
+ 1




Transocéan
Le #18589311
bonjour,
Comme dit daniel il y a un décalage mais en sautant les lignes contenant 1
de référence qui devient visible c'est possible
--
Faut-il travailler pour manger ? ou manger pour travailler ?

"Daniel.C" wrote:

Bonjour.
Le problème est que dans une suite :
1
2
2
2
1
2
2
si tu fais un premier groupement avec :
1
2
2
2
tu obtiens :
+1
1
2
2
Ce qui est ce que tu souhaites, mais si tu procèdes au secong
groupement,
tu obtiens un seul regroupement :
+1
Il faut au moins deux 1 pour obtenir des groupes séparés.
Cordialement.
Daniel

> Bonjour,
> j'ai une base Excel dont le nombre d'enregistrement qui varie chaque
> jours (venant d'un AS400). cette base contient en colonne H, un le
> chiffre 1 ou 2. un nombre indeterminé de 1 est suivi par un nombre
> indéterminé de 2. voir exemple ci-dessous.
> j'aimerai que tout les 2 soit regroupés par petit groupe (lignes
> cachés)
> quand on ouvre la base, on voit que les lignes où il y a le chifrre 1.
> (les lignes avec 2 sont cachées, mais avec le petit + sur la gauche.
> et que l'on puisse faire apparaitre chaque petit groupe de 2
> indépendement des autres groupes de 2.
> en faite, un petit groupe de 2 appartient au 1 suppérieur.
> meci pour votre aide.
>
> colonne H
> 1
> 1
> 2
> 2
> 2
> 1
> 2
> 2
> 2
> 2
> 1
> 1
> 1
> 1
> 1
> 2
> 2
>
> je voudrai:
> colonne H
> 1
> + 1
> + 1
> 1
> 1
> 1
> 1
> + 1





FdeCourt
Le #18589541
Salut,

Voilà une macro qui peux faire le boulot (7 secondes pour 65535
lignes, et en considérant que toutes les lignes sont renseignées, sans
erreur....) :

Sub Grouper_II()
Dim plage As String
Dim monRange
monRange = [Feuil1!H1:H65536]
With Feuil1
.Cells.ClearOutline
For x = 1 To UBound(monRange) - 1
Application.StatusBar = x
If monRange(x, 1) = 2 And plage = "" Then
plage = x
ElseIf monRange(x, 1) = 2 And monRange(x + 1, 1) <= 1 Then
plage = plage & ":" & x
.Rows(plage).Group
plage = ""
End If
Next
End With
End Sub

Cordialement,

F.
marchepied
Le #18591211
On 5 fév, 14:43, FdeCourt
Salut,

Voilà une macro qui peux faire le boulot  (7 secondes pour 65535
lignes, et en considérant que toutes les lignes sont renseignées, san s
erreur....) :

Sub Grouper_II()
    Dim plage As String
    Dim monRange
    monRange = [Feuil1!H1:H65536]
    With Feuil1
        .Cells.ClearOutline
        For x = 1 To UBound(monRange) - 1
        Application.StatusBar = x
            If monRange(x, 1) = 2 And plage = "" Then
                plage = x
            ElseIf monRange(x, 1) = 2 And monRange(x + 1, 1 ) <= 1 Then
                plage = plage & ":" & x
                .Rows(plage).Group
                plage = ""
            End If
        Next
    End With
End Sub

Cordialement,

F.



merci pour vos réponses.
la solution de FdeCourt fonctionne, sauf dans un cas, quand il faut
faire un groupe de une seule ligne 2.
Comme Daniel C. l'a remarqué, sa solution fonctionne sauf quand il y a
une seule ligne 1.
bon, tant pis, si c'est trop dure, je mettrais un filtre classique.
merci
FdeCourt
Le #18591551
Hello,

Il ne faut pas désespérer ;)

Avec celle là :

Sub Grouper_II()
Dim plage As String
Dim monRange
monRange = [Feuil1!H1:H36]
With Feuil1
.Cells.ClearOutline
For x = 2 To UBound(monRange) - 1
If monRange(x, 1) <> "" Then
If monRange(x, 1) = 2 And monRange(x - 1, 1) <= 1 Then
plage = x
If monRange(x, 1) = 2 And plage = "" Then
plage = x
ElseIf monRange(x, 1) = 2 And monRange(x + 1, 1) <= 1 Then
plage = plage & ":" & x
.Rows(plage).Group
plage = ""
End If
End If
Next
End With
End Sub

Cordialement,

F.
marchepied
Le #18592131
On 5 fév, 17:59, FdeCourt
Hello,

Il ne faut pas désespérer ;)

Avec celle là :

Sub Grouper_II()
    Dim plage As String
    Dim monRange
    monRange = [Feuil1!H1:H36]
    With Feuil1
        .Cells.ClearOutline
        For x = 2 To UBound(monRange) - 1
        If monRange(x, 1) <> "" Then
            If monRange(x, 1) = 2 And monRange(x - 1, 1) < = 1 Then
plage = x
            If monRange(x, 1) = 2 And plage = "" Then
                plage = x
            ElseIf monRange(x, 1) = 2 And monRange(x + 1, 1 ) <= 1 Then
                plage = plage & ":" & x
                .Rows(plage).Group
                plage = ""
            End If
        End If
        Next
    End With
End Sub

Cordialement,

F.



Bonsoir FdeCourt,
la nouvelle macro fonctionne bien, mais seulement dans le cas où il y
a une seule ligne 2.
je suppose que je dois combiner tes 2 macros ?
Marchepied
FdeCourt
Le #18593011
Alors encore quelques modifications :

Sub Grouper_II()
Dim plage As String
Dim monRange
monRange = [Feuil1!H1:H36]
With Feuil1
.Cells.ClearOutline
For x = 2 To UBound(monRange) - 1
If monRange(x, 1) <> "" Then
If x = 35 Then
Debug.Print "er"
End If
If monRange(x, 1) = 2 And monRange(x - 1, 1) <= 1 Then
plage = x

If monRange(x, 1) = 2 And plage = "" Then plage = x
If monRange(x, 1) = 2 And monRange(x + 1, 1) = 2 And x =
UBound(monRange) - 1 Then
plage = plage & ":" & x + 1
ElseIf monRange(x, 1) = 2 And monRange(x + 1, 1) <= 1 Or x
= UBound(monRange) - 1 Then
plage = plage & ":" & x
End If
If plage <> "" Then .Rows(plage).Group: plage = ""
End If
Next
End With
End Sub

Je l'ai testé sur la séquence suivante, et tout était correct (à
remettre en ligne bien sur !):
1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,2,1,2,2,1,2,2,1,1,2,1,1,2,1,1,2,1,1,2,1 ,1,1,2,1,1,1,2,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,1,2, 2,1,1,1,2,2,1,1,1,2,2,1,1,1,2,2,1,1,1,1,2,2,2,1,1,1,2,2,2,1,1,1,1,1,2,2,2,1 ,1,1,1,2,2,2,1,2,2,2,2,1,2,2,2,2,1,2,2,2,2,1,2,2,2,2,1,1,2,2,2,2,1,1,2,2,2, 2,1,1,2,2,2,2,1,1,2,2,2,2,1,1,1,2,2,2,2,1,1,1,2,2,2,2

Cordialement,

F.
marchepied
Le #18596441
On 5 fév, 19:42, FdeCourt
Alors encore quelques modifications :

Sub Grouper_II()
    Dim plage As String
    Dim monRange
    monRange = [Feuil1!H1:H36]
    With Feuil1
        .Cells.ClearOutline
        For x = 2 To UBound(monRange) - 1
        If monRange(x, 1) <> "" Then
            If x = 35 Then
            Debug.Print "er"
            End If
            If monRange(x, 1) = 2 And monRange(x - 1, 1) < = 1 Then
plage = x

            If monRange(x, 1) = 2 And plage = "" Then pla ge = x
            If monRange(x, 1) = 2 And monRange(x + 1, 1) = 2 And x =
UBound(monRange) - 1 Then
                 plage = plage & ":" & x + 1
            ElseIf monRange(x, 1) = 2 And monRange(x + 1, 1 ) <= 1 Or x
= UBound(monRange) - 1 Then
                plage = plage & ":" & x
            End If
            If plage <> "" Then .Rows(plage).Group: plage = ""
        End If
        Next
    End With
End Sub

Je l'ai testé sur la séquence suivante, et tout était correct (à
remettre en ligne bien sur !):
1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,2,1,2,2,1,2,2,1,1,2,1,1,2,1,1,2,1,1,2 ,1­,1,1,2,1,1,1,2,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1 ,1,2,­2,1,1,1,2,2,1,1,1,2,2,1,1,1,2,2,1,1,1,1,2,2,2,1,1,1,2,2,2,1,1,1,1,1 ,2,2,2,1­,1,1,1,2,2,2,1,2,2,2,2,1,2,2,2,2,1,2,2,2,2,1,2,2,2,2,1,1,2,2,2,2 ,1,1,2,2,2,­2,1,1,2,2,2,2,1,1,2,2,2,2,1,1,1,2,2,2,2,1,1,1,2,2,2,2

Cordialement,

F.



Bonjour,
merci beaucoup FdeCourt. la dernière macro est beaucoup mieux. mais
il y a un cas où cas ne fonctionne pas. dans le cas où il y a une
suite de plusieurs 2 (ex: 5, 10 etc...) la macro groupe seulement le
premier 2.
si c'est pas trop demandé merci de votre aide.
marchepied
Publicité
Poster une réponse
Anonyme