[VBA Excel 2003] - probleme avec la fonction find sur des dates...

fabian123

XLDnaute Occasionnel
Bonjour à toutes et tous!

j'essaye, pour le boulot, de réaliser une pointeuse automatique sur Excel.

Je me sert donc de l'heure interne du pc ainsi que de la date...

Je rencontre un souci dans la phase suivante.

l'utilisateur encode ses heures dans un userform puis les transfert dans une feuille excel en regard de la date du jour.

j'utilise donc une fonction "Find"

je recherche la date du jour dans le tableau. la date du jour étant donnée par une formule je mets donc dans ma fonction Lookinxl:=xlvalues.

Le format de la date dans la cellule du classeur étant "j jjj" (ex "15 jeu"), je met donc ma fonction Date dans vba sous le format "d ddd" (format (date, "d ddd")

et c'est là qu'intervient mon problème!

quand je lance la recherche, il ne trouve pas d'équivalence, mais si j'encode manuellement 15 jeu (pour reprendre l'exemple) là, il me retrouve la cellule!

Pourquoi est-ce qu'il ne la trouve pas quand la valeur est donnée par une formule et qu'il la trouve si j'encode manuellement? En sachant que dans ma fonction Find, j'utilise la propriété LookIn:=xlValues???

voici le code que j'utilise:

Private Sub CommandButton8_Click()

'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As Variant, AdresseTrouvee As Variant, varDate As Variant

Valeur_Cherchee = Format(Date, "d dddd")
Set PlageDeRecherche = Sheets("Calendrier").Range("A4:BT34")

Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookIn:=xlValues, LookAt:=xlWhole)


If Trouve Is Nothing Then

AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else

AdresseTrouvee = Trouve.Address
End If
MsgBox AdresseTrouvee
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : [VBA Excel 2003] - probleme avec la fonction find sur des dates...

Bonjour fabian,

un essai en pièce jointe

à+
Philippe
 

Pièces jointes

  • 111.xlsm
    18.8 KB · Affichages: 203
  • 111.xlsm
    18.8 KB · Affichages: 214
  • 111.xlsm
    18.8 KB · Affichages: 233

fabian123

XLDnaute Occasionnel
Re : [VBA Excel 2003] - probleme avec la fonction find sur des dates...

Bonjour phlaurent,


un grand merci pour ta réponse rapide!

ca fonctionne nickel! merci beaucoup!

juste par curiosité, peux-tu me dire pourquoi ma méthode avec "find" ne marche pas? en fait, je me rend compte que si je n'applique pas de format à ma variable et que je met mes cellules excel sous le format "25/12/2013"(par ex!) ça marche très bien, mais une fois que j'applique un format sur ma fonction Date, ça ne marche plus... sauf si j'encode manuellement dans le classeur excel... c'est bizarre!

En attendant, ta méthode fonctionne super bien et elle est beaucoup plus courte que la mienne!

Dernière question... la référence de la cellule renvoyée par 'cellule.address', comment réintégrer les référence de la cellule (par exemple B13) pour la réintégrer dans un "range". est-ce que ce serait range(cellule.address)?
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : [VBA Excel 2003] - probleme avec la fonction find sur des dates...

Re,

une petite modif qui répond à tes "angoisses" :D
Code:
Sub Macro1()
Dim cellule As Range
test = 0
Valeur_Cherchee = Date
For Each cellule In Sheets("Calendrier").Range("A4:BT34")
If cellule = Date Then
texte = Replace(cellule.Address, "$", "") '(supprimer les signes $ )
Range(cellule.Address).Select ' sélection de la cellule trouvée
MsgBox ("Valeur trouvée en " & texte)
test = 1
End If
Next cellule
If test = 0 Then MsgBox ("Aucun résultat")
End Sub

juste par curiosité, peux-tu me dire pourquoi ma méthode avec "find" ne marche pas? en fait, je me rend compte que si je n'applique pas de format à ma variable et que je met mes cellules excel sous le format "25/12/2013"(par ex!) ça marche très bien, mais une fois que j'applique un format sur ma fonction Date, ça ne marche plus... sauf si j'encode manuellement dans le classeur excel... c'est bizarre!
je suppose que Find tient compte de ce qui est affiché dans la cellule
............. je n'ai pas testé

à+
Philippe
 

Pièces jointes

  • 111.xlsm
    19 KB · Affichages: 104
  • 111.xlsm
    19 KB · Affichages: 107
  • 111.xlsm
    19 KB · Affichages: 119

Docmarti

XLDnaute Occasionnel
Re : [VBA Excel 2003] - probleme avec la fonction find sur des dates...

Bonjour phlaurent,


un grand merci pour ta réponse rapide!

ca fonctionne nickel! merci beaucoup!

juste par curiosité, peux-tu me dire pourquoi ma méthode avec "find" ne marche pas? en fait, je me rend compte que si je n'applique pas de format à ma variable et que je met mes cellules excel sous le format "25/12/2013"(par ex!) ça marche très bien, mais une fois que j'applique un format sur ma fonction Date, ça ne marche plus... sauf si j'encode manuellement dans le classeur excel... c'est bizarre!

...

Bonjour fabian123

Je confirme ce que pense phlaurent :
je suppose que Find tient compte de ce qui est affiché dans la cellule

Find avec xlValues ne sert qu'à une chose : faire une recherche dans ce qui est actuellement affiché (la propriété TEXT des cellules) (donc un seul format de date ou de nombre à la fois, tenant compte également de la largeur de la colonne qui peut modifier l'affichage des dates (il faut utiliser la commande ShrinkToFit pour s'assurer que les dates sont affichées correctement) comme elle peut modifier l'affichage des nombres par arrondissement)
alors que
Find avec xlFormulas sert à effectuer une recherche dans la propriété FORMULA des cellules ( en tenant compte du type de la valeur recherchée : si la valeur recherchée est de type Date, il ne trouve que les valeurs de type Date; si la valeur recherchée est de type String ou Numérique, il trouve tout sauf les valeurs de type Date.

Autre Particularité importante de Find avec xlValues dont il faut tenir compte dans la recherche d'une date : si le format de la date recherchée correspond au format Date Courte défini dans les paramètres linguistiques régionaux du Panneau de configuration de Windows, la valeur recherchée doit être de type Date pour que la recherche soit fructueuse. Si le format de la date recherchée est un autre format de date que le format Date Courte, la valeur recherchée doit être de type String pour que la recherche soit fructueuse.
Autrement dit, xlValues effectue toujours sa recherche dans le résultat tel qu'affiché et la valeur recherchée par xlValues doit être de type Date seulement pour la recherche des dates au format Date Courte.

Pour rechercher la valeur affichée (date, nombre ou texte), il faut utiliser xlValues.
Pour rechercher la vraie date ou le vrai nombre dans les cellules qui ne contiennent pas de formule, il faut utiliser xlFormulas. Si la cellule contient une formule, il faut alors utiliser une boucle type FOR...Next.

On peut utiliser xlValues pour rechercher la vraie date à la condition que toutes les dates que nous désirons trouver aient le même format de date.

Ne pas oublier d'utiliser ShrinkToFit avant une commande FIND utilisant le paramètre LookIn:=xlValues, si on veut être certain de trouver.

Cordialement

Docmarti
 
Dernière édition:

Misange

XLDnaute Barbatruc
Re : [VBA Excel 2003] - probleme avec la fonction find sur des dates...

Bonjour

Pour accéder à la date, il ne faut pas chercher avec range("A1").value mais avec .value2 qui contient le N° de série de la date. Ceci permet de s'affranchir des différents formats de date


Ce lien n'existe plus
 

Docmarti

XLDnaute Occasionnel
Re : [VBA Excel 2003] - probleme avec la fonction find sur des dates...

--Misange: Merci. C'est une solution radicale, applicable si toutes les cellules du champ ont le même format de date. Il serait peut-être mieux d'utiliser un type Double plutôt qu'un type Long au cas où les cellules contiendraient l'heure en plus de la date.

--Fabian: Je n'avais pas testé le format (date, "d ddd") sur lequel porte ta question. Le test m'a permis de constater qu'avec ce format (et d'autres), la recherche avec xlvalues donne un résultat positif seulement avec Anglais-Etats-Unis dans les paramètres linguistiques régionaux de Windows. Déception.

Cordialement


Docmarti
 

Discussions similaires

Réponses
8
Affichages
881

Statistiques des forums

Discussions
312 198
Messages
2 086 144
Membres
103 129
dernier inscrit
Atruc81500