Find date résultant d'une formule ET avec format personnalisé

vgendron

XLDnaute Barbatruc
Bonjour le forum

c'est un sujet vu et revu. et pourtant.. je me casse les dents dessus...

Dans la PJ:
J'ai en lignes, les dates de l'année (1er Décembre annee n-1==> 31 Décembre annee n)

-->Ligne3 en format "ddd" pour avoir Lun, mar....
=ligne5

-->Ligne 4 en format "Date Courte"
=ligne5

-->ligne 6 en format "dd" pour n'avoir que le numéro du jour
1er jour = formule avec Date()
jours suivants = formule = jour précédent +1
==> toutes les dates des 3 lignes résultent de formule

-->cellule S8: la date (format date courte) à récuperer et chercher

j'en arrive au besoin
avec la méthode find (ou autre chose finalement), récuperer la date en S8 et la retrouver dans au moins une de ces lignes

==> le code récupère S8 de deux façons.. DateValue et directement la range(S8")
et une troisième ou j'utilise directement "Date"

petit test If <>""
les trois versions sont retrouvées

Quand je lance CE MEME CODE sur le vrai projet: il ne trouve plus rien SAUF la 3eme version DATE !
et attention.. j'ai fait un copier coller du vrai projet vers le classeur ci joint et me suis assuré des formats identiques : j'en perd mes dents, après les avoir cassées :-D

dernière subtilité..

si je redéfini mes variable en tant que Date, le "petit test" ne lui plait plus.......il continue néanmoins de me trouver les trois dates dans la PJ et juste la 3eme version dans mon fichier....

Quelqu'un aurait il une idée avant que je ne doive aller commander un appareil dentaire? :-D
 

Pièces jointes

  • FindDates.xlsm
    30.1 KB · Affichages: 29
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@vgendron
Et qu'en dit Mister JB ? ;)

Sinon j'ai beau cherché, je ne vois rien en rapport avec la cellule S8 dans les codes VBA, non ?

PS: J'ai testé les trois CommandButton de la PJ et je trouve les dates saisies dans les InputBox respectifs

vgendron: tu es sûr d'avoir joint le bon fichier?
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Hello
J'ai rechargé le bon fichier en post 1
j'ai refait quelques essais hier.. et visiblement.. tant que les dates ne sont PAS issues de formules, (elles sont donc tapées à la main), ca ne pose pas de problème quelque soit le format d'affichage dans la feuille Excel.. mais dès qu'elles sont issues de formule.. rien ne va plus...
 

vgendron

XLDnaute Barbatruc
Salut Bernard, je ne t'avais pas oublié :-D

bon..j'ai vérifié..
Si je récupère une date tapée manuellement, ou qu'elle soit issue d'une formule
si j'utilise range("S8") ou Cdate() ou datevalue()..
le test ISDATE me retourne toujours vrai.
==> la date à chercher est toujours bien vue comme une date

maintenant. si je la recherche dans une zone dont les dates sont écrites à la main. pas de problème
mais si je la recherche dans une zone dont les dates sont issues de formules....nada...
bon. comme c'est bientot le temps des BBQ, j'arrete de me casser les dents.. et je contourne en remplissant la zone de recherche avec des dates à la main..

J'y reviendrai sans doute plus tard...

Merci
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Attention la foncton IsDate ne permet pas de savoir s'il s'agit d'une date. Elle renvoie aussi True aussi s'il s'agit d'un String convertible en date, qui ne sera donc pas trouvé si ce qu'on cherche est une date.
 

vgendron

XLDnaute Barbatruc
Hello @All

bon.. parce que j'aimerais quand meme comprendre ce qui m'échappe...
je joins le fichier sur lequel je travaille vraiment: il y a certainement quelqe chose qui ne colle pas

Le but: par macro
==>Récupérer la Date à chercher en colonne S (S8 pour l'exemple)
==> Puis chercher cette date en AH4:pN4 ou AH5:pN5 ou AH6:pN6

Input:
==>En colonne S: les dates sont tapées à la main par l'utilisateur (à la saisie un code évènement_change, que j'ai enlevé ici, s'assure que l'utilisateur saisit bien une date qui est dans le calendrier (AH:pN)

==> En C1:l'année du calendrier
==> AH6 = formule pour donner le 1er décembre de l'année précédente, puis formule sur le reste de la ligne pour les jours suivants jusqu'au 31/12 de l'année C1
Cette ligne est "affichée" au format "dd" pour ne voir que le numéro du jour
==>la ligne 4: formule =ligne6, et format d'affichage "ddd"
==>la ligne 5: formule =ligne6 et format d'affichage "dd/mm/yyyy" ==> !! police de caractère = couleur de fond, pour ne pas voir la ligne.

==>ligne 12 = dates en dur au format "Date"
==> 'ligne 13 = dates en dur au format standard
Le code réalisé s'assure que tout est de la "Date", format différents. mais DATES
j'ai beau essayer de changer la ligne de recherche (==de format) avec xlvalues, ou xlformulas, avec cdate, avec .value2.......rien n'y fait.....
 

Pièces jointes

  • TestDates.xlsm
    59.5 KB · Affichages: 30

Jauster

XLDnaute Occasionnel
Alors, c'est une possibilité, mais :
Excel : Marche avec les paramètres du pays local (d'ou l'utilisation de ";")
En VBA on utilise "," donc format américain d'Excel. La gestion des dates peut ne pas être identique et donc mm/dd/yyyy ?

Sinon à essayer :
VB:
Set ici = .Range("AH" & i & ":PN" & i).Find(CDate(DateToFin), LookIn:=xlFormulas)
au lieu d'appliquer le CDate à DateToFind, mais directement dans Find
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour
DateToFin est vide.
DateToFind n'est pas utilisé dans le Find.
Mais même en remplaçant, le Find ne la trouve pas, et je ne comprends pas pourquoi.
Mais dans la mesure où ce ne sont que des dates qui se suivent, moi je déduirais la position par simple soustraction d'avec la date de début.
 

vgendron

XLDnaute Barbatruc
@Dranreb
ah oui. bien vu le "d" manquant
du coup.. avec
DateToFind = .Range("S8")
et Set ici = .Range("AH" & i & ":pN" & i).Find(DateToFind, LookIn:=xlFormulas) 'xlvalues ou xlformulas
il me trouve bien la date dans la ligne 12
ce serait bien qu'il me trouve maintenant dans des formules..
déjà. je pige pas l'idée de lui préciser: lookIN xlformulas.. pour qu'au final. il trouve dans des dates en dur........

@Jauster
je fais quelques essais et reviens..
 

vgendron

XLDnaute Barbatruc
tiens donc... les méthodes Find et for next ne trouvent pas la meme chose.....
For next, trouve sur TOUTES les lignes 4 5 6 12 et 13
alors que la méthode Fin uniquement sur la ligne 12 (la seule dont je ne dispose pas normalement dans mon fichier... :-D )

VB:
Sub TestDate()
'i = 4 'ligne contient des dates issues de formules: format ddd
'i = 5 'ligne contient des dates issues de formules: format jj/mm/aaaa
i = 6 'ligne contient des dates issues de formules: format dd
'i = 12 'ligne contient des dates en dur format "Date"
'i = 13 'ligne contient des dates en dur format standard ==> la boucle "controle Date" ne voit aucune date. que du numérique.. ca me semble normal

With ActiveSheet
    DateToFind = .Range("S8")
    MsgBox "la date à trouver est une date: " & (VarType(DateToFind) = vbDate) '==> il s'agit bien d'une date
   
    '"Controle Date"
    For j = 34 To 430 'je vérifie que la zone de recherche contient bien des dates 'ne tient pas compte du format d'affichage
        If VarType(.Cells(i, j)) <> vbDate Then MsgBox .Cells(i, j): Exit For 'si pas une date. il me l'affiche
    Next j
       
    'ici. je cherche une date parmi des dates
   
    For Each jour In .Range("AH" & i & ":PN" & i)
        If jour = DateToFind Then MsgBox "le for each trouve: " & jour.Address
    Next jour
   
    Set ici = .Range("AH" & i & ":PN" & i).Find(DateToFind, LookIn:=xlFormulas) 'xlvalues ou xlformulas
    Set ici = .Range("AH" & i & ":PN" & i).Find(CDate(DateToFind), LookIn:=xlFormulas)
    If Not ici Is Nothing Then
        MsgBox "la méthode find trouve: " & ici.Address 'si je trouve la date.. il me l'affiche
    End If
   
End With

End Sub
 

Discussions similaires