Formule matricielle incompatibilité de type avec une date

Bonjour

Situation:

j'ai une base de données dans une feuille excel avec plusieurs colonnes. (Employé ; Date ; Code; ....)

Je souhaite récupérer par vba l'information de la colonne Code et des suivantes en fonction des 2 variables Employé et Date. (Ces deux variables forment un couple unique)

Pour cela, j'essaie dans un premier temps de récupérer la ligne de ma base de données qui correspond à mes deux variables.

J'ai réussi a le faire par le code suivant en utilisant une formule matricielle par le bias d'Evaluate avec la fonction equiv.

Ce code fonctionne :

 UserFormSaisie.LabelEmployé.Caption = LabelSalarié.Caption
   UserFormSaisie.LabelDate.Caption =DateSerial(année, mois, jour)
    UserFormSaisie.ComboBoxCode.List = Sheets("Paramètre").Range("G3:K" & Sheets("Paramètre").[G65536].End(xlUp).Row).Value
    UserFormSaisie.ComboBoxCode.ColumnWidths = "0;150;0;0;0"

    ligne = Evaluate("MATCH(1,(testnom=""" & LabelSalarié.Caption & """)*(testdate=43200),0)")

Seulement, je veux utiliser la valeur que j'ai récupérer dans mon LabelDate pour ma date et non pas un numéro de série fixe.

J'ai essayé plusieurs manipulations et j'ai toujours le message d'erreur suivant:

erreur d’exécution 13

incompatibilité de type

Info complémentaire :

testdate est la plage de cellule de la colonne date de ma base de données. Le format de ces cellules est "date".

merci d'avance pour votre aide

Bonjour

Pourquoi Annee, mois et jour et pas Year, Month et day ??

Mets un fichier en ligne avec données non confidentielles, ce sera plus facile d'analyser

Crdlt

Bonjour Dan

j'ai créé un fichier test ci joint qui reprend mon problème.

Sub Bouton1_Cliquer()

Dim année, mois, jour, ligne As Integer
Dim salarié As String
Dim d As Date

'j'ai affecté des valeurs qui sont présentes dans ma base
salarié = "BBB"
année = 2015
mois = 1
jour = 13
d = DateSerial(année, mois, jour)

ligne = Evaluate("MATCH(1,(testnom=""" & salarié & """)*(testdate=42017),0)")

'ce que j'aimerais faire:
'ligne = Evaluate("MATCH(1,(testnom=""" & salarié & """)*(testdate=" & d & "),0)")

MsgBox ligne    

End Sub

En espérant être assez précis.

Mon but est de récupérer la ligne pour pouvoir ensuite récupérer les infos des autres colonnes avec un cells(ligne-1,colonne).value

Sauf que je n'arrive pas à passer ma variable d dans ma formule matricielle.

J'ai n'ai pas réussi aussi a utiliser un range à la place de mes noms de plage qui peuvent être amenées à s'agrandir.

Merci

16test.xlsm (19.13 Ko)

re

Essaie plutôt comme ceci :

Sub Bouton1_Cliquer()

Dim année, mois, jour, ligne As Integer
Dim salarié As String
Dim d As Date

salarié = "BBB"
année = 2015
mois = 1
jour = 13
d = DateSerial(année, mois, jour)
On Error Resume Next
ligne = Application.WorksheetFunction.Match(CLng(d), Sheets("BD").Range("B:B"), 0)
If Err = 0 Then
MsgBox ligne
Else: MsgBox "pas de référence de date"
End If   
End Sub

Si ok clique sur le V vert à coté du bouton Editer pour cloturer le fil lors de ta réponse

Crdlt

Bonjour Dan

Merci pour ta réactivité et ta réponse.

Je pense que ton programme ne réponds pas totalement à ma question car elle recherche seulement la date dans la colonne B.

Or je veux une recherche qui combine la bonne date et le bon employé en même temps.

Toutefois, ta réponse m'as permis de résoudre mon problème en utilisant la fonction CLng pour convertir ma date en numéro de série. Ce que je n'arrivai pas à faire malgré mes recherches.

J'ai aussi réussi à écrire le code sans utiliser les plages de données qui sont susceptibles de bouger.

voici mon code final

Dim année, mois, jour, ligne As Integer
Dim salarié As String
Dim d As Date

salarié = "BBB"
année = 2015
mois = 1
jour = 13
d = DateSerial(année, mois, jour)
lignefin = Sheets("BD").Range("A1").End(xlDown).Row
ligne = Evaluate("MATCH(1,(A1:A" & lignefin & "=""" & salarié & """)*(B1:B" & lignefin & "=" & CLng(d) & "),0)")

Encore merci pour ton aide.

Je clôture le sujet.

amicalement

Rechercher des sujets similaires à "formule matricielle incompatibilite type date"