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.
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.
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.
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.
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.
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
Tu es un génie Pierrejean (ou au moins tu sais lire et chercher et moi pas)
Je n'avais pas lu cette note. Et c'est en effet bel et bien la raison. Tout s'explique
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
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 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 !