Chercher une date calculée par formule dans une plage (VBA)

Le
Jean-Luc GARNIER
Bonjour à toutes et à tous,

Je cherche une fonction de recherche en VBA pour localiser dans une plage de
cellules celle dont la formule donne le résultat recherché.

Exemple:
- une ligne de cellules contient une date calculée: A1 = 01/01/2007, B1 =
A1+7, C1 = B1 + 7, D1 = C1 + 7, etc.
- je cherche la date 18/06/2007 dans la plage A1:AZ1
- je veux connaitre la colonne où la cellule "vaut" 18/06/2007.

En gros, un mix entre Find et Evaluate

Merci d'avance pour toute aide !

--
Jean-Luc, Auriol, FRANCE
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Corto
Le #4942271
Bonjour Jean-Luc GARNIER,
Je te propose tout simplement la fonction find :
Set XYZ = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18), _
LookIn:=xlValues, LookAt:=xlWhole)
if XYZ is nothing then
'------ Pas trouvé
else
'------ Trouvé, XYZ contient la cellule trouvée
endif

Corto

Bonjour à toutes et à tous,

Je cherche une fonction de recherche en VBA pour localiser dans une plage de
cellules celle dont la formule donne le résultat recherché.

Exemple:
- une ligne de cellules contient une date calculée: A1 = 01/01/2007, B1 =
A1+7, C1 = B1 + 7, D1 = C1 + 7, etc.
- je cherche la date 18/06/2007 dans la plage A1:AZ1
- je veux connaitre la colonne où la cellule "vaut" 18/06/2007.

En gros, un mix entre Find et Evaluate...

Merci d'avance pour toute aide !



AV
Le #4942261
Je cherche une fonction de recherche en VBA pour localiser dans une plage de
cellules celle dont la formule donne le résultat recherché.


Adapter la plage de recherche :

Sub zzz()
laDate = "18/06/07"
MsgBox Application.Match(CDate(laDate) * 1, [Feuil2!1:1], 0)
End Sub

AV

Jean-Luc GARNIER
Le #4942231
Merci Corto, mais cela ne peut pas marcher : Find ne fait pas l'évaluation
d'une fonction au vol !

En effet, dans la plage de recherche, seule la première cellule contient une
_valeur_ date, les cellules suivantes contiennent "±+7", par exemple.

Il faut donc que la fonction de recherche fasse d'abord l'évaluation de la
formule, puis compare la valeur obtenue à la valeur recherchée.

Dans l'exemple, la valeur cherchée est en colonne Y1: Y1 = X1+7, qui doit
donner 18/06/2007 et là, la fonction de recherche doit donner OK.

Est-ce plus clair ?

--
Jean-Luc, Auriol, FRANCE


"Corto" wrote:

Bonjour Jean-Luc GARNIER,
Je te propose tout simplement la fonction find :
Set XYZ = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18), _
LookIn:=xlValues, LookAt:=xlWhole)
if XYZ is nothing then
'------ Pas trouvé
else
'------ Trouvé, XYZ contient la cellule trouvée
endif

Corto

Bonjour à toutes et à tous,

Je cherche une fonction de recherche en VBA pour localiser dans une plage de
cellules celle dont la formule donne le résultat recherché.

Exemple:
- une ligne de cellules contient une date calculée: A1 = 01/01/2007, B1 =
A1+7, C1 = B1 + 7, D1 = C1 + 7, etc.
- je cherche la date 18/06/2007 dans la plage A1:AZ1
- je veux connaitre la colonne où la cellule "vaut" 18/06/2007.

En gros, un mix entre Find et Evaluate...

Merci d'avance pour toute aide !






Jean-Luc GARNIER
Le #4942191
Merci !

Problème : quand j'utilise ta formule, j'ai carrément une erreur 424 (Objet
requis) ! Impossible de trouver l'aide sur Match de plus...

As tu une idée de ce qui peut provoquer cette erreur ? J'ai essayé la date
en dur, rien n'y fait.

Merci d'avance pour ton aide,

--
Jean-Luc, Auriol, FRANCE


"AV" wrote:


Je cherche une fonction de recherche en VBA pour localiser dans une plage de
cellules celle dont la formule donne le résultat recherché.


Adapter la plage de recherche :

Sub zzz()
laDate = "18/06/07"
MsgBox Application.Match(CDate(laDate) * 1, [Feuil2!1:1], 0)
End Sub

AV






JB
Le #4942161
Bonjour,

Ce pgm fonctionne:
-Il pourrait y avoir un pb si le format des dates dans le tableur
était <> jj/mm/aa
-Il faut dans ce cas adapter le format de la date cherchée.
-Sachant que les dates sont dans une ligne, on peut utiliser
Application.Match

http://cjoint.com/?gfmdjjFDwJ

Sub essai()
Set xyz = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18),
LookIn:=xlValues, LookAt:=xlWhole)
If xyz Is Nothing Then
MsgBox "non trouvé"
Else
MsgBox xyz.Column
xyz.Select
End If
End Sub

Sub essai2()
Set xyz = [A8:AZ8].Find(What:=Format(DateSerial(2007, 6, 18),
"dddd d mmmm yyyy"), LookIn:=xlValues, LookAt:=xlWhole)
If xyz Is Nothing Then
MsgBox "non trouvé"
Else
MsgBox xyz.Column
xyz.Select
End If
End Sub

Sub essai3()
x = Application.Match(CDbl(DateSerial(2007, 6, 18)), [A8:AZ8], 0)
If IsError(x) Then
MsgBox "non trouvé"
Else
MsgBox x
End If
End Sub


JB


On 5 juin, 11:37, Jean-Luc GARNIER wrote:
Merci Corto, mais cela ne peut pas marcher : Find ne fait pas l'évaluat ion
d'une fonction au vol !

En effet, dans la plage de recherche, seule la première cellule contien t une
_valeur_ date, les cellules suivantes contiennent "±+7", par exemple.

Il faut donc que la fonction de recherche fasse d'abord l'évaluation de la
formule, puis compare la valeur obtenue à la valeur recherchée.

Dans l'exemple, la valeur cherchée est en colonne Y1: Y1 = X1+7, qui doit
donner 18/06/2007 et là, la fonction de recherche doit donner OK.

Est-ce plus clair ?

--
Jean-Luc, Auriol, FRANCE



"Corto" wrote:
Bonjour Jean-Luc GARNIER,
Je te propose tout simplement la fonction find :
Set XYZ = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18), _
LookIn:=xlValues, LookAt:=xlWhole)
if XYZ is nothing then
'------ Pas trouvé
else
'------ Trouvé, XYZ contient la cellule trouvée
endif

Corto

Bonjour à toutes et à tous,

Je cherche une fonction de recherche en VBA pour localiser dans une p lage de
cellules celle dont la formule donne le résultat recherché.

Exemple:
- une ligne de cellules contient une date calculée: A1 = 01/01/ 2007, B1 =
A1+7, C1 = B1 + 7, D1 = C1 + 7, etc.
- je cherche la date 18/06/2007 dans la plage A1:AZ1
- je veux connaitre la colonne où la cellule "vaut" 18/06/2007.

En gros, un mix entre Find et Evaluate...

Merci d'avance pour toute aide !- Masquer le texte des messages pré cédents -



- Afficher le texte des messages précédents -




Corto
Le #4942121
Bonjour Jean-Luc GARNIER,

C'est à ça que sert Lookin:=xlValues, la fonction cherche alors dans la
valeur affichée dans la cellule et non pas dans la formule.

Corto

Merci Corto, mais cela ne peut pas marcher : Find ne fait pas l'évaluation
d'une fonction au vol !

En effet, dans la plage de recherche, seule la première cellule contient une
_valeur_ date, les cellules suivantes contiennent "±+7", par exemple.

Il faut donc que la fonction de recherche fasse d'abord l'évaluation de la
formule, puis compare la valeur obtenue à la valeur recherchée.

Dans l'exemple, la valeur cherchée est en colonne Y1: Y1 = X1+7, qui doit
donner 18/06/2007 et là, la fonction de recherche doit donner OK.

Est-ce plus clair ?



AV
Le #4941971
As tu une idée de ce qui peut provoquer cette erreur ?


Tu ne dois pas fournir toutes les infos car, tel que donné, le code doit te
renvoyer le résultat (sauf si la date est absente) et ce, quel que soit le
format de date adopté dans la plage (à la différence de la méthode "Find")

Exemple simple là :
http://cjoint.com/?gfoM0crYq7

AV

Jean-Luc GARNIER
Le #4941841
Merci beaucoup !

Je pense effectivement avoir un problème avec le format des dates, car les
cellules affichent une date "18/6" et non "18/06/2007". Du coup, Find renvoie
Nothing systématiquement...

Comment puis-je m'affranchir de ce problème (je ne peux pas changer le
format de l'affichage) ?

Merci d'avance !

--
Jean-Luc, Auriol, FRANCE


"JB" wrote:

Bonjour,

Ce pgm fonctionne:
-Il pourrait y avoir un pb si le format des dates dans le tableur
était <> jj/mm/aa
-Il faut dans ce cas adapter le format de la date cherchée.
-Sachant que les dates sont dans une ligne, on peut utiliser
Application.Match

http://cjoint.com/?gfmdjjFDwJ

Sub essai()
Set xyz = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18),
LookIn:=xlValues, LookAt:=xlWhole)
If xyz Is Nothing Then
MsgBox "non trouvé"
Else
MsgBox xyz.Column
xyz.Select
End If
End Sub

Sub essai2()
Set xyz = [A8:AZ8].Find(What:=Format(DateSerial(2007, 6, 18),
"dddd d mmmm yyyy"), LookIn:=xlValues, LookAt:=xlWhole)
If xyz Is Nothing Then
MsgBox "non trouvé"
Else
MsgBox xyz.Column
xyz.Select
End If
End Sub

Sub essai3()
x = Application.Match(CDbl(DateSerial(2007, 6, 18)), [A8:AZ8], 0)
If IsError(x) Then
MsgBox "non trouvé"
Else
MsgBox x
End If
End Sub


JB


On 5 juin, 11:37, Jean-Luc GARNIER wrote:
Merci Corto, mais cela ne peut pas marcher : Find ne fait pas l'évaluation
d'une fonction au vol !

En effet, dans la plage de recherche, seule la première cellule contient une
_valeur_ date, les cellules suivantes contiennent "±+7", par exemple.

Il faut donc que la fonction de recherche fasse d'abord l'évaluation de la
formule, puis compare la valeur obtenue à la valeur recherchée.

Dans l'exemple, la valeur cherchée est en colonne Y1: Y1 = X1+7, qui doit
donner 18/06/2007 et là, la fonction de recherche doit donner OK.

Est-ce plus clair ?

--
Jean-Luc, Auriol, FRANCE



"Corto" wrote:
Bonjour Jean-Luc GARNIER,
Je te propose tout simplement la fonction find :
Set XYZ = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18), _
LookIn:=xlValues, LookAt:=xlWhole)
if XYZ is nothing then
'------ Pas trouvé
else
'------ Trouvé, XYZ contient la cellule trouvée
endif

Corto

Bonjour à toutes et à tous,

Je cherche une fonction de recherche en VBA pour localiser dans une plage de
cellules celle dont la formule donne le résultat recherché.

Exemple:
- une ligne de cellules contient une date calculée: A1 = 01/01/2007, B1 > > > > A1+7, C1 = B1 + 7, D1 = C1 + 7, etc.
- je cherche la date 18/06/2007 dans la plage A1:AZ1
- je veux connaitre la colonne où la cellule "vaut" 18/06/2007.

En gros, un mix entre Find et Evaluate...

Merci d'avance pour toute aide !- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -









JB
Le #4941831
Solution 1: Adapter le format de la variable cherchée au format
utilisé dans le tableur:

Set xyz = [A1:AZ1].Find(What:=Format(DateSerial(2007, 6, 18), "dd/
mm"), LookIn:=xlValues, LookAt:=xlWhole)
If xyz Is Nothing Then
MsgBox "non trouvé"
Else
MsgBox xyz.Column
xyz.Select
End If

Solution 2: Utiliser Application.Match (si champ de recherche est une
ligne ou 1 colonne)

x = Application.Match(CDbl(DateSerial(2007, 6, 18)), [A8:AZ8], 0)
If IsError(x) Then
MsgBox "non trouvé"
Else
MsgBox x
End If
End Sub

JB


On 5 juin, 16:07, Jean-Luc GARNIER wrote:
Merci beaucoup !

Je pense effectivement avoir un problème avec le format des dates, car les
cellules affichent une date "18/6" et non "18/06/2007". Du coup, Find ren voie
Nothing systématiquement...

Comment puis-je m'affranchir de ce problème (je ne peux pas changer le
format de l'affichage) ?

Merci d'avance !

--
Jean-Luc, Auriol, FRANCE



"JB" wrote:
Bonjour,

Ce pgm fonctionne:
-Il pourrait y avoir un pb si le format des dates dans le tableur
était <> jj/mm/aa
-Il faut dans ce cas adapter le format de la date cherchée.
-Sachant que les dates sont dans une ligne, on peut utiliser
Application.Match

http://cjoint.com/?gfmdjjFDwJ

Sub essai()
Set xyz = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18),
LookIn:=xlValues, LookAt:=xlWhole)
If xyz Is Nothing Then
MsgBox "non trouvé"
Else
MsgBox xyz.Column
xyz.Select
End If
End Sub

Sub essai2()
Set xyz = [A8:AZ8].Find(What:=Format(DateSerial(2007, 6, 18),
"dddd d mmmm yyyy"), LookIn:=xlValues, LookAt:=xlWhole)
If xyz Is Nothing Then
MsgBox "non trouvé"
Else
MsgBox xyz.Column
xyz.Select
End If
End Sub

Sub essai3()
x = Application.Match(CDbl(DateSerial(2007, 6, 18)), [A8:AZ8], 0)
If IsError(x) Then
MsgBox "non trouvé"
Else
MsgBox x
End If
End Sub

JB

On 5 juin, 11:37, Jean-Luc GARNIER wrote:
Merci Corto, mais cela ne peut pas marcher : Find ne fait pas l'éva luation
d'une fonction au vol !

En effet, dans la plage de recherche, seule la première cellule con tient une
_valeur_ date, les cellules suivantes contiennent "±+7", par exem ple.

Il faut donc que la fonction de recherche fasse d'abord l'évaluatio n de la
formule, puis compare la valeur obtenue à la valeur recherchée.

Dans l'exemple, la valeur cherchée est en colonne Y1: Y1 = X1+7, qui doit
donner 18/06/2007 et là, la fonction de recherche doit donner OK.

Est-ce plus clair ?

--
Jean-Luc, Auriol, FRANCE

"Corto" wrote:
Bonjour Jean-Luc GARNIER,
Je te propose tout simplement la fonction find :
Set XYZ = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18), _
LookIn:=xlValues, LookAt:=xlWhole)
if XYZ is nothing then
'------ Pas trouvé
else
'------ Trouvé, XYZ contient la cellule trouvée
endif

Corto

Bonjour à toutes et à tous,

Je cherche une fonction de recherche en VBA pour localiser dans u ne plage de
cellules celle dont la formule donne le résultat recherché.

Exemple:
- une ligne de cellules contient une date calculée: A1 = 01 /01/2007, B1 =
A1+7, C1 = B1 + 7, D1 = C1 + 7, etc.
- je cherche la date 18/06/2007 dans la plage A1:AZ1
- je veux connaitre la colonne où la cellule "vaut" 18/06/200 7.

En gros, un mix entre Find et Evaluate...

Merci d'avance pour toute aide !- Masquer le texte des messages p récédents -



- Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -



- Afficher le texte des messages précédents -






Jean-Luc GARNIER
Le #4941811
Merci beaucoup à tous ! J'ai résolu mon problème de format et la fonction
retourne exactement ce que j'attends !

A bientôt !

--
Jean-Luc, Auriol, FRANCE


"Jean-Luc GARNIER" wrote:

Merci beaucoup !

Je pense effectivement avoir un problème avec le format des dates, car les
cellules affichent une date "18/6" et non "18/06/2007". Du coup, Find renvoie
Nothing systématiquement...

Comment puis-je m'affranchir de ce problème (je ne peux pas changer le
format de l'affichage) ?

Merci d'avance !

--
Jean-Luc, Auriol, FRANCE


"JB" wrote:

Bonjour,

Ce pgm fonctionne:
-Il pourrait y avoir un pb si le format des dates dans le tableur
était <> jj/mm/aa
-Il faut dans ce cas adapter le format de la date cherchée.
-Sachant que les dates sont dans une ligne, on peut utiliser
Application.Match

http://cjoint.com/?gfmdjjFDwJ

Sub essai()
Set xyz = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18),
LookIn:=xlValues, LookAt:=xlWhole)
If xyz Is Nothing Then
MsgBox "non trouvé"
Else
MsgBox xyz.Column
xyz.Select
End If
End Sub

Sub essai2()
Set xyz = [A8:AZ8].Find(What:=Format(DateSerial(2007, 6, 18),
"dddd d mmmm yyyy"), LookIn:=xlValues, LookAt:=xlWhole)
If xyz Is Nothing Then
MsgBox "non trouvé"
Else
MsgBox xyz.Column
xyz.Select
End If
End Sub

Sub essai3()
x = Application.Match(CDbl(DateSerial(2007, 6, 18)), [A8:AZ8], 0)
If IsError(x) Then
MsgBox "non trouvé"
Else
MsgBox x
End If
End Sub


JB


On 5 juin, 11:37, Jean-Luc GARNIER wrote:
Merci Corto, mais cela ne peut pas marcher : Find ne fait pas l'évaluation
d'une fonction au vol !

En effet, dans la plage de recherche, seule la première cellule contient une
_valeur_ date, les cellules suivantes contiennent "±+7", par exemple.

Il faut donc que la fonction de recherche fasse d'abord l'évaluation de la
formule, puis compare la valeur obtenue à la valeur recherchée.

Dans l'exemple, la valeur cherchée est en colonne Y1: Y1 = X1+7, qui doit
donner 18/06/2007 et là, la fonction de recherche doit donner OK.

Est-ce plus clair ?

--
Jean-Luc, Auriol, FRANCE



"Corto" wrote:
Bonjour Jean-Luc GARNIER,
Je te propose tout simplement la fonction find :
Set XYZ = [A1:AZ1].Find(What:ÚteSerial(2007, 6, 18), _
LookIn:=xlValues, LookAt:=xlWhole)
if XYZ is nothing then
'------ Pas trouvé
else
'------ Trouvé, XYZ contient la cellule trouvée
endif

Corto

Bonjour à toutes et à tous,

Je cherche une fonction de recherche en VBA pour localiser dans une plage de
cellules celle dont la formule donne le résultat recherché.

Exemple:
- une ligne de cellules contient une date calculée: A1 = 01/01/2007, B1 > > > > > A1+7, C1 = B1 + 7, D1 = C1 + 7, etc.
- je cherche la date 18/06/2007 dans la plage A1:AZ1
- je veux connaitre la colonne où la cellule "vaut" 18/06/2007.

En gros, un mix entre Find et Evaluate...

Merci d'avance pour toute aide !- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -











Publicité
Poster une réponse
Anonyme