Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec Application.Match

4 réponses
Avatar
MrFlag
Bonjour,

Je bloque actuellement sur une petite fonction ou j'utilise la fonction "e;e;Application.Match"e;e; afin de comparer une date à une série de date dans un range.

Le code est pourtant basique mais l'instruction "e;e;IsError()"e;e; est constamment TRUE !

Quelqu'un aurait-il la solution?


Private Function PlusJOuvres(Date_Fin, NbJours)
Application.EnableEvents = False

Dim Date_Test As Date, i

Date_Test = CLng(Date_Fin)
i = 0

Do
Date_Test = Date_Test + 1

If IsError(Application.Match(Date_Test, feries, 0)) = True And (Weekday(Date_Test, 2) > 0) = True And (Weekday(Date_Test, 2) < 6) = True Then
i = i + 1
End If

Loop Until i = NbJours + 1

PlusJOuvres = Date_Test

Application.EnableEvents = True
End Function

"feries" correspond à ma plage de date définie dans le gestionnaire de noms. J'ai essayé de la remplacer par range() mais rien ne change.

Je suis sur Excel 2010.

Cordialement.

4 réponses

Avatar
GL
Le 04/03/2015 13:25, MrFlag a écrit :
Bonjour,

Je bloque actuellement sur une petite fonction ou j'utilise la fonction
"e;e;Application.Match"e;e; afin de comparer une date à une série de date dans
un range.

Le code est pourtant basique mais l'instruction "e;e;IsError()"e;e; est
constamment TRUE !

Quelqu'un aurait-il la solution?



Un nom (plage nommé) comme "feries" ne peut pas être utilisé
directement.

Soit vous faites :

Dim Plage as Range
Set Plage¬tiveWorkbook.Names("feries").RefersToRange

soit plus simplement: Range("feries")

Par ailleurs les "= True" dans votre formule sont superfétatoires.

Cordialement.



Private Function PlusJOuvres(Date_Fin, NbJours)
Application.EnableEvents = False

Dim Date_Test As Date, i

Date_Test = CLng(Date_Fin)
i = 0

Do
Date_Test = Date_Test + 1

If IsError(Application.Match(Date_Test, feries, 0)) = True And
(Weekday(Date_Test, 2) > 0) = True And (Weekday(Date_Test, 2) < 6) = True Then
i = i + 1
End If

Loop Until i = NbJours + 1

PlusJOuvres = Date_Test

Application.EnableEvents = True
End Function

"feries" correspond à ma plage de date définie dans le gestionnaire de noms.
J'ai essayé de la remplacer par range() mais rien ne change.

Je suis sur Excel 2010.

Cordialement.

Avatar
isabelle
bonjour,

j'ai fait le test avec

If IsError(Application.Match(Date_Test, Range("feries"), 0)) = True

et je n'ai pas eu ce problème

isabelle

Le 2015-03-04 07:25, MrFlag a écrit :
Bonjour,

Je bloque actuellement sur une petite fonction ou j'utilise la fonction
"e;e;Application.Match"e;e; afin de comparer une date à une série de date dans
un range.

Le code est pourtant basique mais l'instruction "e;e;IsError()"e;e; est
constamment TRUE !

Quelqu'un aurait-il la solution?


Private Function PlusJOuvres(Date_Fin, NbJours)
Application.EnableEvents = False

Dim Date_Test As Date, i

Date_Test = CLng(Date_Fin)
i = 0

Do
Date_Test = Date_Test + 1

If IsError(Application.Match(Date_Test, feries, 0)) = True And
(Weekday(Date_Test, 2) > 0) = True And (Weekday(Date_Test, 2) < 6) = True Then
i = i + 1
End If

Loop Until i = NbJours + 1

PlusJOuvres = Date_Test

Application.EnableEvents = True
End Function

"feries" correspond à ma plage de date définie dans le gestionnaire de noms.
J'ai essayé de la remplacer par range() mais rien ne change.

Je suis sur Excel 2010.

Cordialement.

Avatar
Patrick
perso, je trouve que ce n'est jamais facile de chercher sur une date, il y a
peut être un truc ?

en attendant j'utilise ceci:

a = range("A1") ' A1 est une date bien sur :)

et je cherche sur CDbl(a)

j'ai eu des soucis en cherchant des dates , dont j'étais certain de
l'exitence et du vrai format date et je ne trouvais pas avec la méthode
find, alors avec CDbl() ça fonctionne :

vous avez un avis ?

Patrick


"isabelle" a écrit dans le message de news:
md77ub$guh$
bonjour,

j'ai fait le test avec

If IsError(Application.Match(Date_Test, Range("feries"), 0)) = True

et je n'ai pas eu ce problème

isabelle

Le 2015-03-04 07:25, MrFlag a écrit :
Bonjour,

Je bloque actuellement sur une petite fonction ou j'utilise la fonction
"e;e;Application.Match"e;e; afin de comparer une date à une série de date
dans
un range.

Le code est pourtant basique mais l'instruction "e;e;IsError()"e;e; est
constamment TRUE !

Quelqu'un aurait-il la solution?


Private Function PlusJOuvres(Date_Fin, NbJours)
Application.EnableEvents = False

Dim Date_Test As Date, i

Date_Test = CLng(Date_Fin)
i = 0

Do
Date_Test = Date_Test + 1

If IsError(Application.Match(Date_Test, feries, 0)) = True And
(Weekday(Date_Test, 2) > 0) = True And (Weekday(Date_Test, 2) < 6) = True
Then
i = i + 1
End If

Loop Until i = NbJours + 1

PlusJOuvres = Date_Test

Application.EnableEvents = True
End Function

"feries" correspond à ma plage de date définie dans le gestionnaire de
noms.
J'ai essayé de la remplacer par range() mais rien ne change.

Je suis sur Excel 2010.

Cordialement.








---
L'absence de virus dans ce courrier electronique a ete verifiee par le logiciel antivirus Avast.
http://www.avast.com
Avatar
MichD
Bonjour,

Ceci fonctionne, mais je ne peux pas dire si la valeur retournée est la
valeur que tu recherches puisque tu n'as pas dit ce que devait faire la
fonction...

La "HIC" avec les dates est que tu dois t'assurer que la variable reçoit
vraiment une date avec un format qui est bien compris par la procédure. Pour
cela, il y a différentes façons de renseigner une variable affectée du TYPE
date.

Dim X as date
X = DateSerial(2015,3,7)
OU
X = DateValue("2015/3/7")
OU
X = #3/7/2015# 'Il faut écrire la date dans le format américain
(Mois/jour/année)

Attention : Les fonctions de conversion utilisent par défaut les paramètres
définis dans le panneau de configuration. À cet égard, il faut oublier cette
façon de faire X = Cdate("7/3/2015") car si le fichier s'ouvre sur un autre
ordinateur et que la configuration du panneau de configuration est
différente (exemple : ordinateur américain), la date sera lue comme étant le
3 juillet 2015 au lieu du 7 mars 2015.

'----------------------------------------------------------------------------------------
Sub test()
Dim Date_Test As Date, NoLigne As Long

'Définir la date que tu cherches
Date_Test = DateSerial(2015, 3, 7)

MsgBox PlusJOuvres(Date_Test, 5)

End Sub

'----------------------------------------------------------------------------------------
Private Function PlusJOuvres(Date_Fin As Date, NbJours As Long)

Dim Date_Test As Long, i As Long

Date_Test = CLng(Date_Fin)
i = 0

Do
Date_Test = Date_Test + 1
If IsError(Application.Match(Date_Test, feries, 0)) = True And _
Weekday(Date_Test, 2) < 6 = True Then
i = i + 1
End If
Loop Until i = NbJours + 1

PlusJOuvres = CDate(Date_Test)
End Function
'----------------------------------------------------------------------------------------