Prblème Evaluate MATCH avec heure
Bonjour a tous
Je post mon premier post aprés avoir résolu la plupart de mes problèmes en lisant les posts de ce forum
il faut un début a tout
voila je dois réaliser un MATCH avec 2 critères.
Aprés plusieurs essais j'ai réussi a réaliser ce code. Mais malheureusement je bloque lorsque mon critère est une heure
Voici un petit code qui résume mon problème sur les critères horaire.
colonne A colonne B
21/01/2015 08:30:00
21/01/2015 08:30:00
21/01/2015 08:30:00
21/01/2015 08:45:00
21/01/2015 08:45:00
21/01/2015 08:45:00
Dim Valeur As Date
Dim NoLigne1 As Double
Dim NoLigne2 As Double
Valeur = CDate("08:45:00")
NoLigne1 = Application.Match(CDbl(Valeur), Range("Feuil1!B:B"), 0)
NoLigne2 = Evaluate("MATCH(" & CDbl(Valeur) & ",Feuil1!B:B,0)")
MsgBox (NoLigne1 & " " & NoLigne2)
En réalisant ce code le Noligne1 fonctionne mais pas le NoLigne2 pourtant c'est la même chose.
je voudrait que NoLigne2 fonctionne car d'aprés mes recherches seul Evaluate("MATCH") me pemet de faire une recherche a 2 critères.
J'espère avoir etait clair mais j'ai voulu réduire mon problème au plus simple.
Merci d'avance pour votre aide
Salut et bienvenue sur le Forum,
Peut-être que ton idée n'est pas la bonne. Que recherches-tu à réaliser exactement avec tes deux critères ?
Un fichier exemple ne serait pas du luxe.
Cordialement.
Bonjour, bonjour !
Sur une vieille version (2003) c'est le même topo : seule la première évaluation fonctionne …
Mais Application.Match
comme Evaluate("MATCH
font référence à la même fonction de feuille de calculs ‼
C'est la fonction EQUIV dans la version française d'Excel et en consultant son aide, il n'y a qu'un seul critère de valeur recherchée !
Avec une fonction pouvant renvoyer une erreur, mieux vaut utiliser une variable de type Variant pour la contrôler via IsError :
Sub Demo()
Const Valeur# = #8:45:00 AM#
NoLigne1 = Application.Match(Valeur, Range("Feuil1!B:B"), 0)
NoLigne2 = Evaluate("MATCH(" & Valeur & ",Feuil1!B:B,0)")
T$ = "NoLigne1 : "
If IsError(NoLigne1) Then T = T & "erreur !" Else T = T & NoLigne1
T = T & vbLf & vbLf & "NoLigne2 : "
If IsError(NoLigne2) Then T = T & "erreur !" Else T = T & NoLigne2
MsgBox T
End Sub
La formulation via Evaluate fonctionne en référençant une cellule pour la valeur recherchée :
NoLigne2 = Evaluate("MATCH(Feuil1!D1,Feuil1!B:B,0)")
…
Merci pour vos réponses
je suis d'accord sur le principe.
Hier j'ai réussi a finir ma macro qui fonctionne.
Pour faire plus simple voici le code qui résume l'utilisation
Valeur1 = CDate("21/01/2015")
Valeur2 = CDate("08:45:00")
Set Plage1 = Sheets("feuil1").Range("A:A")
Set Plage2 = Sheets("feuil1").Range("B:B")
Sheets("feuil1").Range("D1").Value = CDbl(Valeur2)
NoLigne2 = Evaluate("MATCH(1,(" & CLng(Valeur1) & "=A:A)*(D1=B:B),0)")
MsgBox (NoLigne2)
Merci pour vos réponses
je suis d'accord sur le principe.
Hier j'ai réussi a finir ma macro qui fonctionne.
Pour faire plus simple voici le code qui résume l'utilisation
Valeur1 = CDate("21/01/2015") 'premier critère recherhcé
Valeur2 = CDate("08:45:00") 'deuxieme critere recherché
Sheets("feuil1").Range("D1").Value = CDbl(Valeur2)
NoLigne2 = Evaluate("MATCH(1,(" & CLng(Valeur1) & "=A:A)*(D1=B:B),0)")
MsgBox (NoLigne2)
Enfait je suis obligé d'écrire ma valeur dans une cellule pour que la comparaison marche.
Mais je trouve que mon code n'est pas optimisé.
Aprés plusieurs essais mon code ne fonctionne pas lorsque ma donné est une heure
puisque le code suivant fonctionne avec un integer ou un string
colenneA ColonneB ColonneC
21/01/2015 08:30:00 1
21/01/2015 08:30:00 2
21/01/2015 08:30:00 3
21/01/2015 08:45:00 4
21/01/2015 08:45:00 5
Valeur1 = CDate("21/01/2015") 'premier critère recherhcé
Valeur3 = 4 'deuxieme critere recherché
NoLigne2 = Evaluate("MATCH(1,(" & CLng(Valeur1) & "=A:A)*(" & Valeur3 & "=C:C),0)")
MsgBox (NoLigne2)
Sinon le plus simple est de regrouper dans la même colonne date & heure …
Oui Oui
j'avais pensé a cette solution mais le tableau de recherche est fixe puisque c'est une requete sql.
La macro marche bien mais je suis quand même chagriné que seules les heures ne fonctionnent pas.