Tri sur tableau Excel et affichage sur 2 feuilles différente

Bonjour à tous,

Tout d'abord merci d'exister, j'ai pu trouvé pas mal de solutions grâce à vous.

J'ai besoin d'aide pour la mise en place d'un fichier qui aura pour but de gérer, contrôler la consommation de carburant sur une flotte de véhicules.

J'ai simplifié mon fichier pour que je puisse mieux comprendre si une âme charitable décide de m'aider.

Je suis un débutant sur Excel...

J'expose mon souci :

J'ai un petit tableau de 5 colonnes, qui répertorie, les cartes licence (carte essence), les dates d'utilisation de la carte, les commerciaux ayant utilisé la carte le carburant servi et une colonne Regul si régularisation il doit y avoir.

Je souhaite séparer le tableau en fonction des critères suivants : sur la feuille Tri1 apparaissent les numéros carte licence ayant été utilisée par 2 commerciaux différents.

Puis sur la feuille Tri2, apparaissent les numéros de carte ayant été utilisées par un seul commercial.

Ensuite une carte licence ne peut être utilisée plus de 2 fois par jour approvisionner un véhicule pour le même carburant . (ex: jean a pris le 01/01, 2 fois du gazole. Pierre a récupéré la carte de Jean et à également pris du gazole.

Dans la case Regul sur la ligne ou Pierre à pris du gazole doit apparaître le nombre de fois où la carte a été utilisée en plus des 2 fois.

Voilà en gros mon objectif principal, une fonction de notification par courrier devra s'y greffer par la suite mais pour le moment ce n'est pas l'urgent.

Merci à tous ceux qui pourront m'aider.

Le fichier est joint.

51commerciaux.zip (7.96 Ko)

Bonsoir djaldjam3, le forum

Je me suis contenté de répondre à ceci :

Je souhaite séparer le tableau en fonction des critères suivants : sur la feuille Tri1 apparaissent les numéros carte licence ayant été utilisée par 2 commerciaux différents.

Puis sur la feuille Tri2, apparaissent les numéros de carte ayant été utilisées par un seul commercial.

Option Explicit
Sub test()
Dim a, b(), c(), e, w(), x()
Dim i As Long, j As Long, n As Long, t As Long
    With Sheets("User").Cells(1).CurrentRegion
        a = .Value
        With CreateObject("Scripting.Dictionary")
            .CompareMode = 1
            For i = 2 To UBound(a, 1)
                If Not .exists(a(i, 1)) Then
                    ReDim w(1 To 3)
                    w(1) = 0
                    Set w(2) = CreateObject("Scripting.Dictionary")
                    w(2).CompareMode = 1
                    ReDim x(1 To 5, 1 To 1)
                Else
                    w = .Item(a(i, 1))
                    x = w(3)
                    ReDim Preserve x(1 To 5, 1 To UBound(x, 2) + 1)
                End If
                If Not w(2).exists(a(i, 3)) Then
                    w(2)(a(i, 3)) = Empty
                    w(1) = w(1) + 1
                End If
                For j = 1 To UBound(a, 2)
                    x(j, UBound(x, 2)) = a(i, j)
                Next
                w(3) = x
                .Item(a(i, 1)) = w
            Next
            ReDim b(1 To UBound(a, 1), 1 To UBound(a, 2))
            ReDim c(1 To UBound(a, 1), 1 To UBound(a, 2))
            For Each e In .keys
                If .Item(e)(1) = 1 Then
                    For i = 1 To UBound(.Item(e)(3), 2)
                        n = n + 1
                        For j = 1 To UBound(.Item(e)(3), 1)
                            b(n, j) = .Item(e)(3)(j, i)
                        Next
                    Next
                Else    '.Item(e)(1) >= 2 !!!
                    For i = 1 To UBound(.Item(e)(3), 2)
                        t = t + 1
                        For j = 1 To UBound(.Item(e)(3), 1)
                            c(t, j) = .Item(e)(3)(j, i)
                        Next
                    Next
                End If
            Next
        End With
    End With
    With Sheets("Tri1").Cells(1)
        .CurrentRegion.Cells.ClearContents
        .Resize(1, UBound(a, 2)).Value = Application.Index(a, 1, 0)
        If t > 0 Then
            With .Offset(1).Resize(t, UBound(a, 2))
                .Value = c
            End With
        End If
    End With
    With Sheets("Tri2").Cells(1)
        .CurrentRegion.Cells.ClearContents
        .Resize(1, UBound(a, 2)).Value = Application.Index(a, 1, 0)
        If n > 0 Then
            With .Offset(1).Resize(n, UBound(a, 2))
                .Value = b
            End With
        End If
    End With
End Sub

Pour le reste, je n'ai pas compris

klin89

Bonsoir Klin89,

Merci infiniment de ton aide.

Je m'excuse d'avance car je suis vraiment un débutant. Mais est ce normal que lorsque je teste, je n'ai rien sur les feuilles Tri2 et Tri1 ?

Me suis juste contenté de copier ton code et de l'appliqué à un bouton. Mais je n'ai pas de résultat, même pas de message d'erreur.

Merci encore pour ton aide.

C'est ok, ca fonctionne à merveille KLIN89 !!! Merci encore, me reste plus qu'a continuer à parcourir les leçons proposé sur ce site et de décortiquer ton code afin de bien le comprendre.

Pour ma seconde demande, je vais essayer de me débrouiller seul et je reviendrai en cas de difficulté. 8)

Merci encore.

Salut à tous,

J'ai besoin également d'aide pour une demande similaire;

En fait, j'ai besoin de faire quasiment la même chose sauf que quand j'ai copié le code et exécuté, j'ai une erreur d’exécution '9' , sur la Ligne 26. (x(j, UBound(x, 1)) = a(i, j)

Je ne peux pas mettre de tableau en copie car les données sont assez confidentiel. Mon tableau comporte 12 colonnes.

Le résultat de la séparation doit se faire sur 2 feuilles, avec les critères presque similaire à la demande de djaldjam3.

En tous cas merci de votre aide.

Rechercher des sujets similaires à "tri tableau affichage feuilles differente"