Recherche multi-critère + Plusieurs onglets
Bonjour à tous,
Je viens solliciter votre aide après avoir passé l'après-midi à essayer de trouver une solution à mon problème.
Je vous explique :
j'ai un fichier qui recense les contrôles véhicules selon leur type. L'ouvrier rentre les données dans son application qui retombent directement dans le fichier en pièce jointe. (PJ qui n'est qu'un exemple, je dois conserver les données anonymes).
Je dispose de 4 types de véhicules donc cela me fait 4 onglets différents.
Les contrôles sont hebdomadaires, ce qui fait donc 1 par semaine mais à date variable.
Venons-en au faite :
Toutes les immatriculations sont inscrites dans "vérification contrôle"
Je souhaiterais savoir si les salariés ont réalisé leur contrôle hebdomadaire en recherchant à la semaine.
Cela implique donc une recherche multi-critère car il y a 7 jours dans la semaine (C2:ID2) + retrouver l'immatriculation dans 4 onglets différents...
Je continu mes recherches, si je trouve une solution je vous la ferais partager.
Si vous avez des pistes d'idées je suis preneur. (J'ai essayé d'exploiter Index et Equiv)
Je vous remercie par avance.
Cordialement.
Bonsoir,
La fonction NO.SEMAINE ne renvoie pas le numéro de semaine ISO pour les versions Excel jusqu'à 2007. Microsoft n'a pallié cette carence qu'à partir de 2010 (paramètre spécifique pour la fonction, et fonction dédiée pour les versions ultérieures).
J'ai donc introduit une fonction personnalisée pour calculer le numéro de semaine :
Function NSEM(d As Date) As Integer
Dim dref
Application.Volatile
dref = DateSerial(Year(d + (8 - Weekday(d)) Mod 7 - 3), 1, 3)
dref = dref - Weekday(dref) + 2
NSEM = (d - dref) \ 7 + 1
End FunctionPuis un fonction personnalisée pour réaliser ta vérification :
Function CONTROLVEHIC(d As Date, imat As String)
Dim CV, f%, s%, i%
Application.Volatile
s = NSEM(d): CV = Array("", "", "")
On Error Resume Next
For f = 1 To 4
With Worksheets("Contrôle Véhicule " & f)
i = WorksheetFunction.Match(imat, .Columns("F"), 0)
If Err.Number <> 0 Then
Err.Clear: i = 0
End If
If i > 0 Then
If NSEM(.Cells(i, 2)) = s Then
CV = .Range("B" & i).Resize(, 3).Value
Exit For
End If
End If
End With
Next f
CONTROLVEHIC = CV
End FunctionCette dernière fonction est matricielle.
Exemple d'utilisation :
On sélectionne la plage B5:D5 (3 cellules en ligne), et on tape la formule :
=CONTROLVEHIC($A$1;A5)A1 représente la date représentative de la semaine cherchée, A5 est l'immatriculation cherchée.
On valide la formule par Ctrl+Maj+Entrée
et les 3 valeurs s'inscrivent dans les 3 cellules sélectionnées au départ si la recherche est fructueuse, rien ne s'inscrit dans le cas contraire.
On peut bien sûr étendre cette formule en tirant ces 3 cellules sur les lignes suivantes...
Cordialement.
Bonsoir,
C'est juste exceptionnel... Quel dommage que je ne connaisse pas le VBA.... Je vais d'ailleurs m'y mettre.
Je me permets de te poser quelques questions que je pense plutôt simple pour toi :
- Si je souhaite que cela incrémente une colonne supplémentaire dans "vérification contrôle" comment puis-je faire ?
- Qu'est ce que représente le % à coté des lettres ?
- Serait-ce trop de demander une explication brève des lignes de la macro ? (j’essaie d'apprendre, même si je vais essayer de la décortiquer de mon côté)
En tout cas si tu ne peux ou veux pas, c'est sans problème.
Je te remercie pour le temps que tu as consacré à cette macro qui m'est bien utile.
Tu as parfaitement répondu à ma demande.
Encore merci.
Cordialement.