Méthode Find

FoLKeN

XLDnaute Junior
Bonjour à tous,

Je m'arrache les cheveux sur cette méthode qui fonctionne parfois, et d'autres fois non. Par exemple j'ai réalisé une macro hier qui fonctionnait bien après avoir finalement compris le fonctionnement de find. Et aujourd'hui elle ne fonctionne plus. Pourtant j'ai vérifié et rien n'a bougé théoriquement.

Voici le code que j'ai écrit pour l'utiliser (en simplifiant):
Code:
Dim Cell As Range
Dim temp As Range

For Each Cell In UnRange
    
Set temp = AutreRangeDeRecherche.Find(Cell.Value)
If Not temp Is Nothing Then
... [I]'Il ne rentre plus dans le If[/I]

Et ca m'embete beaucoup de faire des For Each pour Trouver une chaine dans un Range. J'ai essayé un tas de paramètres différents dans Find mais ca ne me sert à rien et ca ne change rien.

Merci une énième fois pour votre aide
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Méthode Find

Bonsoir Folken

tu ne nous en dis pas beaucoup... comment sont définis "UnRange" et "AutreRangeDeRecherche" ? Après le "in" de la boucle "for each" on trouve généralement une collection ou une variable représentant cette collection.

bonne soirée
@+
 

FoLKeN

XLDnaute Junior
Re : Méthode Find

Ben je vous en dit pas plus car mon programme est relativement complexe et j'ai préféré le simplifier au maximum pour voir si l'erreur ne pouvait pas venir d'ailleurs. Mais bon, à ta réponse j'en déduis que la syntaxe est correcte déjà.

UnRange = Une liste en colonne de noms dans une feuille.
AutreRangeDeRecherche = Une autre liste, dans une autre feuille, en ligne, de noms.

Ces deux derniers sont définis plus haut dans la fonction, pendant les déclarations. J'ai vérifié comme il faut les zones. La méthode find devrait normalement renvoyer la référence d'une cellule.
 

Pierrot93

XLDnaute Barbatruc
Re : Méthode Find

Re Folken

quand tu parles de liste, je suppose qu'il s'agit d'un objet "Range" représentant des plages de cellules, déclaré dans la même procédure comme ci dessous :

Code:
Dim UnRange
Set UnRange = Range("A1:A10")

si c'est bien le cas vois pas trop ou se trouve le problème.

@+
 

FoLKeN

XLDnaute Junior
Re : Méthode Find

C'est en effet exactement ce que j'ai fait. Par exemple:
Code:
Dim TraineeModCol As Range ' Trainee column in Training_Map
Set TraineeModCol = Sheets("Training_Map").Range("B10:B1009")

Il n'y a pas de problème pouvant survenir avec la méthode find? Par exemple dans une autre fonction j'utilisais la meme chose pour essayer de retrouver des dates correspondantes, mais impossible, donc j'ai fait des For Each mais bon... C'est pas très optimisé et les temps de calculs sont déjà relativement longs.
 

pierrejean

XLDnaute Barbatruc
Re : Méthode Find

bonsoir a tous

un point a ne pas negliger issu de l'aide

Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.

L'origine des fonctionnements differents de Find vient peut-etre de la
 

FoLKeN

XLDnaute Junior
Re : Méthode Find

Est-ce que à tout hasard vous avez une idée pourquoi la recherche de valeur de type Date ne fonctionne pas ? Y a-t-il des paramètres plus particuliers à faire ? Mais même en considérant la date comme un string, ca devrait fonctionner les formats que j'ai attribués aux cellules... Yo no entiendo :(
 

michel_m

XLDnaute Accro
Re : Méthode Find

Bonsoir à tous,

pour compléter PierreJean (merci pour le coup de la réinitialisation des paramètres que je ne connaissais pas et qui me faisait être grossier!)

il faut transformer le format de la date de la variable au m^me format que la date recherchée

par exemple

la variable est 10/05/07 type string
la date recherchée est formatée 10 mai 2007

il faut écrire
Find(What:=Format(CDate(variable), " d mmmm yyyy"),.......)

si les formats sont les m^mes:
Find(What:=CDate(variable),...)


si le
 

FoLKeN

XLDnaute Junior
Re : Méthode Find

Tout d'abord, merci bcp pour vos réponses et votre rapidité.
Cependant j'avais déjà essayé vos solutions et ca ne marchait (et marche) pas.

Code:
Code:
Set tempDateSessions = DatesInSessions.Find(What:=CDate(CellDateSchedule.Value), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns)
If tempDateSessions Is Nothing Then
  MsgBox ("Error with dates")
  Exit Sub
End If

Alors que le code que j'ai remplacé avec des For Each fonctionne:
Code:
For Each CellTempDate In DatesInSessions
  If CellTempDate.Value = CellDateSchedule.Value Then
    Set tempDateSessions = CellTempDate
    Exit For
  End If
Next CellTempDate

Je dois vraiment être aveugle :)
Une idée ?
 

pierrejean

XLDnaute Barbatruc
Re : Méthode Find

bonjour FLOKEN

Voila un exposé des cas possibles

tu devrais trouver ce qui te convient

a garder en memoire : Comparer des entités comparables ou (chercher une carotte dans des navets n'aboutira jamais)


edit: Je viens de dire a mon epouse que j'aidais un forumeur a chercher un String parmi des Strings .....
elle m'a regardé d'un drole d'air !!!
 

Pièces jointes

  • FLOKEN1.xls
    26.5 KB · Affichages: 99
Dernière édition:

FoLKeN

XLDnaute Junior
Re : Méthode Find

Hi,

Je n'ai pas trouvé la solution à mon problème de date malgré votre aide. Mais je pense malgré tout savoir d'où ca vient. Car dans mon fichier, un utilisateur va rentrer une date de départ dans un champ (formatté en Date JJ/MM/AA). Dans plusieurs autres feuilles, une première cellule (formattée Date aussi) récupère cette valeur et la copie, puis toutes les cellules suivantes calculent en incrémentant la date par une fonction faite maison qui renvoie une date.
L'erreur vient peut-être dans les retours de fonction mais je n'ai pas trop le temps de retravailler ca. Je vais garder mes For Each :( Quoiqu'il en soit merci pour tout !
 

Discussions similaires

Réponses
2
Affichages
153
Réponses
21
Affichages
295

Statistiques des forums

Discussions
312 241
Messages
2 086 523
Membres
103 242
dernier inscrit
Patoshick