Contrôle des dépenses véhicules pendant l'absence des collaborateurs

Bonjour,

Vous trouverez un fichier composé de 2 informations :

--ONGLET LISTE DES DEPENSES

1- les consommations par nature, par nom & par date (colonne en violet à tenir compte)

2- Une colonne crée "Absence collaborateur" j'aimerais que dans cette colonne vous fassiez apparaître si le collaborateur a consommé durant une période d'absence en mode "date d'absence et motif d'absence"

--ONGLET ABSENCES COLLABORATEURS

1- date de début et fin d'absence

2- une colonne concatener car le nom & prénom se trouvent dans 2 colonnes différentes (attention ici, ça commence par le nom & prénom, alors que dans l'autre onglet, c'est une cellule et cela combine PRENOM+NOM (attention)).

L'objectif est de détecter des dépenses qui auraient eu lieu durant les absences du collaborateur en faisant apparaître la réponse sur la colonne W "Anomalie" en mettant en évidence la période d'absence du collaborateur svp. Comme ça , je pourrai filtrer par la suite

merci beaucoup

sur plus de 200 000 lignes faciles...

Bonjour,

En W8, à recopier vers le bas. Donne les dates de début et de fin dd'absence :

=SI(SOMMEPROD(('Absences collaborateurs'!$F$3:$F$12<=CNUM(A8))*('Absences collaborateurs'!$G$3:G$12>=CNUM(A8))*('Absences collaborateurs'!$D$3:$D$12&" "&'Absences collaborateurs'!$C$3:$C$12='Liste des dépenses'!H8))>0;
"Début : "&TEXTE(INDEX('Absences collaborateurs'!F:F;SOMMEPROD(('Absences collaborateurs'!$F$3:$F$12<=CNUM(A8))*('Absences collaborateurs'!$G$3:G$12>=CNUM(A8))*('Absences collaborateurs'!$D$3:$D$12&" "&'Absences collaborateurs'!$C$3:$C$12='Liste des dépenses'!H8)*LIGNE('Absences collaborateurs'!$F$3:$F$12)));"jj/mm/aaaa")&" Fin : "&
TEXTE(INDEX('Absences collaborateurs'!G:G;SOMMEPROD(('Absences collaborateurs'!$F$3:$F$12<=CNUM(A8))*('Absences collaborateurs'!$G$3:G$12>=CNUM(A8))*('Absences collaborateurs'!$D$3:$D$12&" "&'Absences collaborateurs'!$C$3:$C$12='Liste des dépenses'!H8)*LIGNE('Absences collaborateurs'!$F$3:$F$12)));"jj/mm/aaaa");"")

Daniel

Bonjour Daniel,

merci pour votre retour

Malgré un I7, cela tourne depuis 10 minutes pour 8000 lignes et mon fichier définitif fera environ 100 fois plus... y'a t'il un moyen d'alléger le traitement? De plus, il faut adapter la formule afin qu'elle puisse sélectionner toute la colonne et non se limiter à notre exemple qui n'est que illustratif et très limitatif en terme de volume à traiter car j'aurais beaucoup de data sur les 2 onglets 'vous limitez à la ligne 12 sur la partie des infos liées à l'onglet "absences" :) Merci beaucoup

Bonjour Younes,

Vous êtes vraiment toujours sur Excel 2003

Tu eux limiter au minimum la taille des plages. Je ne pense pas que ça change grand-chose. On pourrait envisager une macro, si tu es d'accord.

Daniel

oui volontier pour une Macro car cela prend vraiment du temps...merci pour ta réactivité

Bonsoir,

Malgré un I7, cela tourne depuis 10 minutes pour 8000 lignes et mon fichier définitif fera environ 100 fois plus

Je m'étonne... j'ai un I3 et la formule est instantanée. Maintenant il est vrai qu'avec la formule Sommeprod, cela risque de ramer puisqu'il cette formule est d'ordre Matricielle.

J'aurais peut-être essayé en créant des noms dans le gestionnaire de noms que j'aurais inclus dans la formule proposé par DanielC

A voir si cela vous intéresse de voir

Crdlt

Mets cette macro dans un module standard ( la première ligne doit être en tête du module) :

Option Base 1
Sub test()
  Dim Tabl As Variant, NP As Variant, DAT As Variant, Noms As Variant, Result()
  Dim I As Long, J As Long, Txt As String
  With Sheets("Absences collaborateurs")
    Tabl = .Range("F3", .Cells(.Rows.Count, 6).End(xlUp)).Resize(, 3)
    NP = .Range("C3", .Cells(.Rows.Count, 3).End(xlUp)).Resize(, 2)
  End With
  For I = 1 To UBound(Tabl, 1)
    Tabl(I, 3) = NP(I, 2) & " " & NP(I, 1)
  Next I
  With Sheets("Liste des dépenses")
    DAT = Application.Transpose(.Range("A8", .Cells(.Rows.Count, 1).End(xlUp)))
    Noms = Application.Transpose(.Range("H8", .Cells(.Rows.Count, 8).End(xlUp)))
    ReDim Result(UBound(DAT))
    For I = 1 To UBound(Tabl, 1)
      For J = 1 To UBound(Noms)
        If UCase(Tabl(I, 3)) = UCase(Noms(J)) Then
          If CDate(DAT(J)) >= Tabl(I, 1) Then
            If CDate(DAT(J)) <= Tabl(I, 2) Then
              Txt = "Début : " & Format(Tabl(I, 1), "dd/mm/yyyy") & " Fin : " & _
                Format(Tabl(I, 2), "dd/mm/yyyy")
                Result(J) = Txt
            End If
          End If
        End If
      Next J
    Next I
    .[W8] = Application.Transpose(Result)
  End With
End Sub

Si tu as un problème avec les macros, dis-le.

Daniel

au top merci :) !!

Bonjour à tous !

Votre profil, à propos de la nature du produit Excel utilisé, est à jour ?

Rechercher des sujets similaires à "controle depenses vehicules absence collaborateurs"