je voudrais rechercher 31 décembre 2012 dans une colonne
comportant des dates au format jj/mm/aa
par macro afin de récupérer des données de la ligne et les copier
j'utilise Datevalue pour la transformer en date
la date 31/12/2012 se trouve bien dans ma colonne car c'est un jour ouvré
mais la recherche est infructueuse
En réalité c'est un peu + complexe, je recherche dans une liste
le dernier jour travaillé de l'année en cours (de lundi à vendredi)
Auriez-vous rencontré cd problème et trouvé une solution???
Ok sur le principe mais le problème est que si les formats de date initiaux dans le fichier sont différents de "dd/mm/yyyy" (exemple pour la plage de date : format "jj-mmmm" (format VBA récupéré : "d-mmmm") et la date en D2 : "j-mmm-aa" (format VBA récupéré : [$-40C]d-mmm-yy;@) , les plages au final perdent leur format de nombre d'origine.
C'est pourquoi je préfère stocker les formats d'origine au départ et remettre les plages au format initial à la fin.
En adaptant ta macro cela donnerait :
Code:
Sub TrouveDate()
MonFormatPlage = Range("A2:A201").NumberFormat 'récupérer le format de nombre de la plage de traitement
MonFormatDate = Range("D2").NumberFormat 'récupérer le format de nombre de la date recherchée
Range("D2").NumberFormat = "0"
Range("A2:A201").NumberFormat = "0"
Range("A2:A201").Find([D2], LookIn:=xlValues).Activate '.Select
Range("A2:A201").NumberFormat = MonFormatPlage 'rétablissement du format de nombre initial de la plage de traitement
Range("D2").NumberFormat = MonFormatDate 'rétablissement du format de nombre initial de la date recherchée
End Sub
Qu'en pense-tu ?
Pour l'instant, cela fonctionne sur les différents formats testés.
Il faudrait sur le principe pouvoir tester tous les formats de type date pour être sûr (j'en ai testé une vingtaine de mon côté) mais apparemment, cela donne le résultat escompté.
Si c'est effectivement le cas après un test complet sur l'ensemble des formats de nombre de type date utilisables, cela nous permettrait de valider ce type de traitement pour tous les cas de traitement de dates sur une feuille Excel.
A+
Bonjour David
le code est là comme idée
comme tu le dis avant traitement mettre les formats dans des variables,traiter et remettre les formats initiaux
j'ai testé ce qui me passait par la tête,pas eu de problème
je pense qu'il faut mettre les années au format "yyyy"(siècles différents exemple 1902, 2002 au format "yy" 02)
si un génie date passe par là,sais t'on jamais
comme je programme beaucoup,une réflexion
tout un temps dates sans problèmes ,puis commence les problèmes
est ce dû aux fichiers que l'on télécharge???
à bientôt
J'ai testé ce cas de figure et apparemment pas de problème.
Ci-joint un fichier test avec en feuille test2 les différents formats de cellules testés.
Chacun peut tester de son côté (peut-être qu'en fonction des versions Excel le résultat différera) et noter les nouveaux formats de nombres testés afin d'enrichir les tests.
J'ai également testé une version traitant la plage de dates dans un array.
Sur quelques tests, cela semble fonctionner en passant par Match au lieu de Find (mais à tester plus avant) :
Code:
Sub TrouveDateArray()
Set a = [PlageDates]
b = CDbl([DateATrouver])
c = Application.Match(b, a, 0)
MsgBox Cells(c, 1).Value
End Sub
tout un temps dates sans problèmes ,puis commence les problèmes
est ce dû aux fichiers que l'on télécharge???
Je n'ai pas de réponse pour l'instant mais maintenant je ferai attention si le cas se présente (peut-être effectivement un problème lors de téléchargement de fichier comportant un format de date système régional différent...).
A+
David84, j'ai testé ta solution avec match, il faut adapter si les dates ne commencent pas en ligne 1 comme dans mon exemple :
c = Application.Match(b, a, 0) + n
mes données commencent en ligne 8 donc pour moi n = 7 car
PlageDates =DECALER(test2!$A$8;;;NBVAL(test2!$A:$A)-1) (j'ai un titre au-dessus des dates d'où le -1)
David84, j'ai testé ta solution avec match, il faut adapter si les dates ne commencent pas en ligne 1 comme dans mon exemple :
c = Application.Match(b, a, 0) + n
mes données commencent en ligne 8 donc pour moi n = 7 car
PlageDates =DECALER(test2!$A$8;;;NBVAL(test2!$A:$A)-1) (j'ai un titre au-dessus des dates d'où le -1)
Sub TrouveDateArray()
Set a = [PlageDates]
b = CDbl([DateATrouver])
c = Application.Match(b, a, 0)
MsgBox a(c, 1).Value
End Sub
Mais au-delà de ce détail, la question est de savoir si le principe est fonctionnel, et apparemment tu me dis que oui donc c'est à noter mais je pense qu'il faut faire d'autres tests avant d'en être sûr.
A+
Yes, ça marche, sauf que ce qui m'intéresse c'est pas . value (la valeur je la connais puisque je la recherche dans la plage dates) mais .row car ensuite je vais faire un offset pour récupérer les valeurs qui sont sur la ligne de la date trouvée.
J'aime bien cette soluce, c'est court au niveau du code, et sans doute plus rapide au niveau de l'exécution.
Yes, ça marche, sauf que ce qui m'intéresse c'est pas . value (la valeur je la connais puisque je la recherche dans la plage dates) mais .row car ensuite je vais faire un offset pour récupérer les valeurs qui sont sur la ligne de la date trouvée.
Et bien si tu veux la ligne, tu n'as qu'à demander la ligne au lieu de la valeur (puisque a est instancié en tant qu'objet (utilisation de Set), tu peux ensuite rechercher tout ce qui a trait à cet objet, c'est tout l'intérêt d'instancier un objet) :
Code:
Sub TrouveDateArray()
Set a = [PlageDates]
b = CDbl([DateATrouver])
c = Application.Match(b, a, 0)
MsgBox a(c).Row
End Sub
Mais je réitère ma mise en garde : pense à bien tester cette solution sur des formats de nombre différents pour vérifier qu'elle est fiable !
Pour ma part, je pense que oui mais c'est à toi de t'en assurer.
J'aime bien cette soluce, c'est court au niveau du code, et sans doute plus rapide au niveau de l'exécution.
Pas sûr que Match soit super rapide dans un array (contrairement à l'utilisation de EQUIV dans la feuille de calcul) mais dans ce cadre précis ce n'est pas la rapidité d'exécution qui devrait poser problème, et puis l'utilisation de Find ne donne rien de concluant de mon côté (je parle de ce cas spécifique).
A+
Oui oui c'est bien ce que j'ai fait, j'ai récupéré la ligne avec .row
J'ai testé plein de formats, pour l'instant tout est bon
(comme dans le cochon! Niark!)
Et comme cette soluce me plait bien, j'ai bien envie de l'adopter dans mes programmes.
Merci à toi de me l'avoir fait découvrir, je trouve que c'est 1000 fois mieux que de sauvegarder le format des 2, déformerez, chercher puis reformater les 2, c'est un peu laborieux.
Voic un petit fichier de synthèse des principaux codes de cette discussion de David, Bébère que je remercie et de moi même . Il ya des choses que je commence à comprendre mais c'est pas gagné .
J'ai aussi apprécié le dernier code de David avec match .
Merci aussi à Cathy car sans elle, on aurait pas trouvé autant de solutions dans une seule discussion .
Bonjour Michel,
Merci pour le fichier.
pour info, TrouveDate et TrouveDate2 plantent chez moi (version 2010) sur les feuilles 2 et 3, ainsi que sur la feuille 1 à partir du moment où le format de nombre diffère du format standard.
Pour TRouveDate :
Hi hi c'est pour ça que je pose plein de questions!
Comme mes questions sont souvent compliquées ça fait progresser tous les lecteurs du fil et même les contributeurs!
Désolé Jean-Marcel, mais il y avait tellement de réponses que je n'ai pas vu la tienne . Après, c'est aussi parce que David a bien insisté sur le post #34 que cela m'a mis la puce à l'oreile.
Donc Merci aussi à Jean-Marcel (aux autres aussi si il y en a qu'ils se dénoncent ) .
Merci pour le fichier.
pour info, TrouveDate et TrouveDate2 plantent chez moi (version 2010) sur les feuilles 2 et 3, ainsi que sur la feuille 1 à partir du moment où le format de nombre diffère du format standard.
David: Merci pour le like . J'ai fait plusieurs tests, et cela montre qu'on peux avoir des problèmes assez facilement dans la recherche des dates. Après c'est aux personnes qui ont ce type de problème d'analyser leurs données à exploiter et de prendre la solution qui convient en ayant testé bien sur .
Bonsoir,
concernant le code de Jean-Marcel, testé avec succès sur 2007 et 2010.
En fait, concernant ce travail sur les dates, je me suis rappelé que JB avait déjà effectué ce type de test ici avec une conclusion qui rejoint la nôtre : avec Match (et contrairement à Find), le format des dates du champ de recherche n'a pas d'importance.
Il me paraît correct de faire ce rappel.
A+