Tri des S et C

bonjour je vudrais savoir si il serait possible par une macro de faire le trie entre les S et C de maniere a avoir les C en 1er et les S a la suite, j'ai mis des couleurs pour aider, mais sans melanger les C qui comporte defois plusieurs cellules.

je suis sous excel 2002

merci a tous

oups désolé, petit oublie je viens de mettre le fichier

27eric89-v0.xls (18.50 Ko)

si vous avez besoin de plus d'information je suis a votre disposition pour y répondre.

merci pour votre aide

Bonsoir,

une solution avec une macro, qui manipule les données pour permettre le tri, fait le tri et remets les données en l'état,

attetntion :la macro utilise la colonne A qui est vide, s ce n'est pas le cas, les données de la colonne A seront effacées

à tester

Sub trics()
    With Worksheets("feuil1")
        dl = .Range("D" & Rows.Count).End(xlUp).Row
        For i = 3 To dl
            If .Cells(i, 4) <> "" Then
                If .Cells(i, 6) <> "" Then
                    n = n + 10
                Else
                    .Cells(i, 6) = .Cells(i - 1, 6)
                End If
                .Cells(i, 1) = n
            End If
        Next i
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("F2:F" & dl) _
                                  , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SortFields.Add Key:=.Range("A2:A" & dl) _
                                  , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SetRange Range("A2:K" & dl)
        .Sort.Header = xlYes
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
        For i = 3 To dl
            If .Cells(i, 6) <> "C" Then Exit For
            If .Cells(i, 1) = .Cells(i + 1, 1) Then
                .Cells(i + 1, 6) = ""
            End If
        Next i
        .Columns(1).Clear
    End With

End Sub

bonjour

je remet le fichier modifié pour mieux comprendre, la colone a ne sert pas, le plus important est que les données soient triées sans etre mélangée.

j'ai essaye la macro avec un bouton mais je rencontre une erreur.

cordialement

17eric89-v0.zip (11.36 Ko)

Bonjour

Ta macro commence par 2 sub

Supprimes le second

Private Sub CommandButton1_Click()
'Sub trics()
    With Worksheets("feuil1")

bonjour j'ai fait un essais et je me retrouve avec un erreur 438

.Sort.SortFields.Clear

le clic me rajoute des nombres dans la colone A mais ne tri pas les S et C

merci de votre aide

bonjour,

je n'ai pas cette erreur quand j'exécute la macro chez moi.

j'ai vu qu'il pouvait y avoir plus d'une ligne rattachée à un C, j'ai adapté le code.

Private Sub CommandButton1_Click()
    With Worksheets("feuil1")
        dl = .Range("D" & Rows.Count).End(xlUp).Row
        For i = 3 To dl
            If .Cells(i, 4) <> "" Then
                If .Cells(i, 6) <> "" Then
                    n = n + 10
                    c = .Cells(i, 6)
                End If
                .Cells(i, 1) = c & Format(n, "000000")
            End If
        Next i
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range("A2:A" & dl) _
                                  , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SetRange Range("A2:K" & dl)
        .Sort.Header = xlYes
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
        .Columns(1).Clear
    End With
End Sub

bonjour ou plutot bonsoir

je viens d'essayer la macro mais toujours le meme probleme avec la meme erreur 438

je me demande si cela ne viens pas de la version d'excel 2002.

est il possible d'adapter cette macro pour cette version.

en tous cas merci de m'aider

cordialement

Bonjour,

en effet j'ai trouvé sur internet que la syntaxe du tri est différente entre la version 2002 et les version dont je dispose.

j'ai adapté le code à l'aveugle, à tester

Private Sub CommandButton1_Click()
    With Worksheets("feuil1")
        dl = .Range("D" & Rows.Count).End(xlUp).Row
        For i = 3 To dl
            If .Cells(i, 4) <> "" Then
                If .Cells(i, 6) <> "" Then
                    n = n + 10
                    c = .Cells(i, 6)
                End If
                .Cells(i, 1) = c & Format(n, "000000")
            End If
        Next i
        .Range("A2:K" & dl).Sort  Key1:=.Range("A2:A" & dl),Order1:=xlAscending,Header = xlYes
        .Columns(1).Clear
    End With
End Sub

je viens de le mettre en place

erreur syntaxe

.Range("A2:K" & dl).Sort Key1:=.Range("A2:A" & dl),Order1:=xlAscending,Header = xlYes

essaie ceci, si cela ne fonctionne pas pourrais-tu essayer d'enregistrer le tri de ton tableau sur la colonne A dans une macro et m'envoyer le code de la macro générée pour que je puisse disposer de la syntaxe correcte.

.Range("A2:K" & dl).Sort (Key1:=.Range("A2:A" & dl),Order1:=xlAscending,Header:=xlYes)

Alternative, quelqu'un sur le forum qui peux adapter la syntaxe pour excel 2002

Bonsoir

Je ne sais pas si cela vient de là mais comme clé on n'utilise que la 1ère cellule

.Range("A2:K" & dl).Sort Key1:=.Range("A2"),Order1:=xlAscending,Header:=xlYes

Édit : Non il faut juste supprimer les parenthèses

Édit 2ème : Dans la ligne de code d'eric89 (l'erreur vient de ) if faut Header:= xlYes

Range("A2:K" & dl).Sort Key1:=.Range("A2:A" & dl),Order1:=xlAscending,Header = xlYes

Merci Banzaï,

J'allais également proposer cette syntaxe après avoir relu la documentation trouvée sur internet.

j'ai remis cette formule mais toujours bloqué

je te met le fichier avec la macro

merci


oups oublié les deux points je fait un essais et je post après

2eric89-v0.zip (11.43 Ko)

OUAOU

ca marche impécable

par contre j'ai oublé un detail.

j'ai des cellules vides dans la colone F mais avec des ecritures sur ces lignes que je voudrais retrouvé en dessous des tris S et C lors du tri.

est ce possible.

en tous cas merci a tous

je met le fichier joint, ce que cela devrait donner

merci

4eric89-v0.zip (12.13 Ko)

au pire je peux rajouter une lettre V qui me donnera ces lignes en derniers

en tous cas merci beaucoup pour ce travail

a bientot

bonne jounée

Bonjour,

code adapté, pour mettre les lignes avec rien en colonne F mais avec des écritures en colonnes C et D à la fin. La macro est basée sur l'hypothèse que les lignes de continuation du code C en colonne F, n'ont pas d'écriture en colonne C).

Private Sub CommandButton1_Click()
    With Worksheets("feuil1")
        dl = .Range("D" & Rows.Count).End(xlUp).Row
        For i = 3 To dl
            If .Cells(i, 4) <> "" Then
                If .Cells(i, 6) <> "" Then
                    n = n + 1
                    c = .Cells(i, 6)
                ElseIf .Cells(i, 3) <> "" And .Cells(i, 4) <> "" Then
                    n = n + 1
                    c = "V"
                End If
                .Cells(i, 1) = c & Format(n, "000000")
            End If
        Next i
        .Range("A3:K" & dl).Sort Key1:=.Range("A3:A" & dl), Order1:=xlAscending, Header:=xlYes
        .Columns(1).Clear
    End With
End Sub

ok cool ca marche nickel

par contre est il possible d'inverser le sens du tri S en 1er et C en second

merci beaucoup pour ton aide

ok cool ca marche nickel

par contre est il possible d'inverser le sens du tri S en 1er et C en second (décroissant)

merci beaucoup pour ton aide

je remet le fichier joint

j'ai mis une colone en M avec des n°.

est il posible d'affecter ces n° lors du tri devant les C et S.

le but est d'avoir un de ces numéro devant un C ou un S mais pas de doublon si possible a ordre croissant

merci beaucoup

2eric89-v0.zip (12.45 Ko)
Rechercher des sujets similaires à "tri"