Identifier si certaines personnes ont utilisé leur carte affaire durant leurs congés

  • Initiateur de la discussion Initiateur de la discussion ArnaudL
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

A

ArnaudL

Guest
Bonjour à tous,

Je viens solliciter votre aide car je cherche une formule (où macro où je sais pas trop quoi...) pas facile à trouver.

J'ai 2 informations que j'aimerai mettre en parallele pour detecter des fraudes. D'une part j'ai les dates de congés de centaines de personnes et d'autres part j'ai les dates de transactions effectuées avec des cartes affaires (sachant qu'il est interdit d'utiliser sa carte affaire pendant les jours de congés) de centaines de personnes (les personnes peuvent être les mêmes que celles dont j'ai les dates de congés ou bien d'autre).

Du coup je voudrai identifier si certaines personnes ont utilisé leur carte affaire durant leur jour de congés.

J'espere avoir était clair mais je me permet de vous mettre un exemple en pièce jointe pour illustrer mon probleme.

Je vous remercie par avance pour votre aide précieuse.

Bien cordialement,

(pardon si il y a des fautes)

Arnaud
 

Pièces jointes

Re : Identifier si certaines personnes ont utilisé leur carte affaire durant leurs co

Bonsour®
en G2 :
Code:
=SOMMEPROD(($A$2:$A$100=E2)*($B$2:$B$100<=F2)*($C$2:$C$100>=F2))<>0

etendre la formule vers le bas autant que besoin (nbr de lignes non vide en colonne G)
 
Re : Identifier si certaines personnes ont utilisé leur carte affaire durant leurs co

Bonjour le fil, bonjour le forum,

Une proposition VBA avec le code ci-dessous :
Code:
Sub Macro1()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL1 As Integer 'déclare la variable DL1 (Dernière Ligne 1)
Dim PL1 As Range 'déclare la variable PL1 (PLage 1)
Dim CEL1 As Range 'déclare la variable CEL1 (CELlule 1)
Dim DL2 As Integer 'déclare la variable DL2 (Dernière Ligne 2)
Dim PL2 As Range 'déclare la variable PL2 (PLage 2)
Dim CEL2 As Range 'déclare la variable CEL2 (CELlule 2)
Dim PLV As Range 'déclare la variable PLV (PLage Visible)
Dim D As Date 'déclare la variable D (Date)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = Sheets("Ce que j'ai") 'définit l'onglet O (à adapter)
DL1 = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL1 de la colonne 1 (=A) de l'onglet O
Set PL1 = O.Range("A2:A" & DL1) 'définit la palge PL1
DL2 = O.Cells(Application.Rows.Count, 5).End(xlUp).Row 'définit la dernière ligne éditée DL2 de la colonne 5 (=E) de l'onglet O
Set PL2 = O.Range("E2:E" & DL2) 'définit la palge PL2
For Each CEL2 In PL2 'boucle 1 : sur toutes les cellules CEL2 de la plage PL2
    D = CDate(CEL2.Offset(0, 1).Value) 'définit la date D
    O.Range("A1").AutoFilter Field:=1, Criteria1:=CEL2.Value 'filtre la colonne 1 (=A) de l'onglet O avec la valeur de CEL2 comme critère
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    'si toutes les cellules sont filtrées la ligne ci-dessous génère une erreur
    Set PLV = PL1.SpecialCells(xlCellTypeVisible) 'définit la plage PLV (cellules visibles (non filtrées) de la plage PL1)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err.Clear 'efface l'erreur
        GoTo suite 'va à l'étiquette "suite"
    End If 'fin de la condition
    For Each CEL1 In PLV 'boucle 2 : sur toutes les cellules CEL1 de la plage PLV
        If D >= CEL1.Offset(0, 1).Value And D <= CEL1.Offset(0, 2).Value Then 'si la date D est incluse dans la fourchette début/fin
            CEL1.Resize(, 3).Interior.ColorIndex = 3 'colore la ligne du tableau des congés en rouge
            CEL2.Resize(, 2).Interior.ColorIndex = 3 'colore la ligne du tableau des transactions en rouge
        End If 'fin de la condition
    Next CEL1 'prochaine cellule de la boucle 2
suite: 'étiquette
    O.Range("A1").AutoFilter 'supprime le filtre automatique
Next CEL2 'prochaine cellule de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
Les fraudes sont colorées de rouge...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour