Find qui ne trouve pas la valeur cherchée

Salut

J'ai cette ligne

Set c = wb.Sheets("Test").Columns(1).Find(DateAReporter, LookIn:=xlValues)

Qui me renvoie un Nothing alors que

- La valeur de DateAReporter est dans la cellule Wb.Sheets("Test").range("A9")

- Que le test dans l'espion de Wb.Sheets("Test").range("A9")=DateAReporter renvoie Vrai, donc la correspondance existe bien

J'arrive pas à trouver pour pourquoi le Find ne trouve pas ce qu'on trouve par un autre moyen. Quelqu'un a une idée ?

Merci d'avance.

Manu

Bonjour Manu31,

Ta date ressort formatée dans ta première colonne. Or c'est en réalité une valeur de date Excel qui est calculée depuis le 1 janvier 1900. Et qui représente le nombre de jours entre la date inscrite et le premier jour (01/01/1900)

Comme Find recherche du texte il faut appliquer à ta variable cherchée le format adéquat. Voir sur ce site dans Fonctions VBA la fonction Format pour les dates selon la date textuelle qui ressort dans ta première colonne.

La date dans la première colonne est formatée mmm aaaa. J'avais déjà testé le code

Set c = wb.Sheets("Test").Columns(1).Find(Format(DateAReporter, "ddd yyyy"), LookIn:=xlValues)

Qui ne trouve rien non plus. Ca me parait normal parce que Format renvoie un string et je cherche une valeur numérique.

Manu

Voilà ce que me donne l'espion

capture

La valeur recherchée existe bien, seul le type diffère. Si je déclare la variable DateAReporter en Variant sa valeur devient 45413, mais ça devrait quand même fonctionner vu que je recherche la valeur.

Manu

A nouveau,

La date en valeur est quasiment un nombre avec virgule. Donc si tu recherches un résultat entier cela ne collera pas.

Tente d'intégrer INT pour forcer cette valeur en entière. Je suppose que ce n'est que le jour qui t'intéresse et non après la virgule qui représente l'heure.

Pour l'instant je suis aux courses, donc quand je rentrerais j'ouvrirais l'ordi et vérifierais.

Sinon insère un mini fichier réalisé pour l'occasion avec le strict nécessaire.

Bonjour,

le problème avec Find sur les dates c'est qu'il est tributaire du format d'affichage avec xlValues (bien mal nommé...).
Il faut utiliser lookin:=xlFormulas pour qu'il se base sur la valeur, et de préférence DateValue() qui interprète différents formats de date.
Set c = Range("A1:A100").Find(what:=DateValue("2 juin 2024") ,lookin:=xlFormulas)

pour les dates, Equiv() est moins prise de tête :

     p = Application.Match(CDbl(CDate(d)), [L2:L10000], 0)
     If IsError(p) Then
        ' non trouvée
     Else
        ' trouvée
     End If

eric

C'est bon ça fonctionne avec XlFormulas. Je m'en souviendrai pour la prochaine fois, ça m'évitera de me prendre la tête un bon moment... C'est quand même bien mal foutu pour le coup.

Merci du tuyau

Manu

Bon, fausse alerte. Ca marche sur le mini fichier que j'étais en train de préparer pour X Cellus

Mais dans mon fichier réel ça plante toujours...

capture

Je suis largué. Find ne fonctionne que dans un fichier unique ?

Manu

Pas plus de succès avec la fonction match

capture

Manu

A nouveau,

En retour ton fichier avec un bouton sur la feuille 2 pour lancer la macro.

Attention au typage de tes variables. Préférence de ne pas les typer pour essayer, elles le seront directement par le formatage directe (Cdbl, Cdate...etc)

Note: Worksheet.Functin n'existe pas mais WorkSheetFunction

Ah, et une chose que j'oubliais :
Il faut toujours définir les paramètres , LookIn et LookAt de .Find()
Ils ont la valeur de la dernière Recherche (ou Remplacement).
Il suffit que quelqu'un ait fait une recherche en changeant les options, et ce qui marchait avant ne fonctionne plus...
eric

Bon...

J'ai fouillé du côté de la déclaration de la variable DateAReporter avec la fonction Match :

- Date : plantage

- Pas de déclaration ou Variant : Fonctionne !!!!!!! Je n'ai pas touché le code de la fonction qui plantait ce matin dans les mêmes conditions, j'ai juste supprimé puis remis la déclaration de la variable.....

- Double : fonctionne (pas testé ce matin)

Par contre le Find ne fonctionne avec aucun des types déclarés ni avec l'absence de déclaration.

Je garde la fonction Match.

Merci de coup de main

Manu

Rechercher des sujets similaires à "find qui trouve pas valeur cherchee"