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.
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 SubPour 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.