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

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

10 réponses
Avatar
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

10 réponses

Avatar
Corto
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 !



Avatar
AV
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

Avatar
Jean-Luc GARNIER
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 !






Avatar
Jean-Luc GARNIER
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






Avatar
JB
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 <jean-luc.garnier(at)gemalto.com>
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 -




Avatar
Corto
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 ?



Avatar
AV
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

Avatar
Jean-Luc GARNIER
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 <jean-luc.garnier(at)gemalto.com>
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 -









Avatar
JB
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 <jean-luc.garnier(at)gemalto.com>
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 <jean-luc.garnier(at)gemalto.com>
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 -






Avatar
Jean-Luc GARNIER
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 <jean-luc.garnier(at)gemalto.com>
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 -