Tu dois aussi déclarer cell as range ;) Si c'est moi qui ai oublié alors :oops:
Tu dis
A+
Version imprimable
Tu dois aussi déclarer cell as range ;) Si c'est moi qui ai oublié alors :oops:
Tu dis
A+
Toujours pas :'( Le débogage m'affiche une erreur à la ligne suivante encore et toujours :
J'ai aussi rajouté la déclaration du cell bien qu'aucune erreur ne survenait.Code:Set c = .Find(What:=cell, LookIn:=xlValues, lookat:=xlWhole)
A savoir, si ça peut t'aider, lorsque j'applique la macro sur un fichier où il n'y a pas de doublons dans la colonne de la première feuille ça marche. Si une valeur est doublée, ça bug. Je pense vraiment que le find tente de faire un "2 = 1".
Ok. Quand tu diras tout... On n'avait pas encore parlé de doublon... ça manquait :(
Les doublons peuvent-ils se trouver dans les deux feuilles ou dans une seule ?
Dans laquelle ?
A+
PS - Que dois-tu faire si doublon ?
Euh, je dois en avoir parlé dans au moins 5 de mes réponses sans nommer ça "doublons"... :cry: Tu peux vérifier si tu veux ! A chaque fois que je dis : "je pense que le problème vient de là".
Je viens donc de te prendre en flagrant délit de lire les posts de travers !:mouarf:
HéHé. Bon je t'explique ça clairement. En gros dans la feuil1 (de 5000 lignes), il y a parfois des valeurs qui se répétent dans la colonne D. La méthode find trouve donc plusieurs correspondances avec la valeur recherchée de l'autre feuille. D'ou erreur de type. Ce qu'il faut faire donc : parcourir cette colonne D, une fois la valeur recherchée trouvée, comparer la colonne E de la feuil1 avec celle qui correspond dans l'autre feuille etc. Donc, dès qu'une valeur recherchée est trouvée dans la colonne D de la première feuille, il faut arrêter la recherche et passer à la suite.
Dans le cas d'un doublon, pour chacune des 2 valeurs identiques, il faut poursuivre la procédure.
Tu ne réponds pas à ma question, à mon tourJe t'ai demandé...Citation:
Envoyé par toi
Je le répéterai pas :mouarf:Citation:
Envoyé par moi
parce que s'ils ne se trouvent que dans une seule feuille, le pb se résoud sans difficulté en inversant le sens de la recherche FL1 devient FL2 et inversement. Ensuite, les copies seront elles aussi à adapter.
Les doublons ne peuvent être que dans la feuil1 (de 5000 lignes). ThisWorkBook en gros. Et que dans la colonne D. :roll:
parlons de ces doublons : Ce sont des doublons "complets" ?
Par "complet", j'entends que les deux cellules testées sont identiques.
Quand
c = Cell
et
cell.Offset(0, 1) = c.Offset(0, 2) ?
Ou bien
une seule cellule de thisworkbook (FL1) peut se retrouver dans FL2 ?
Ce ne sont pas des doublons complets : on a juste c = cell. Seules deux cellules de la colonne D de FL1 peuvent avoir la même valeur. Elles correspondront donc toutes les 2 à la valeur cherchée dans FL2.
Alors ça ne devrait pas poser le moindre problème.
Je ne vois plus qu'une solution : Tu nous joins un bout de ton fichier avec ses deux feuilles. Un trentaine de lignes dont quelques doublons devraient suffire.
Tu peux le "zipper"
A+
Voilà ! FL1 et FL2.
La macro se situe dans le module 3 de FL1 et s'appelle Conduits_admission_air_BP. J'envoie FL1 entière et une 30aine de lignes pour FL2. Les raccourcis sont faits tels que les 2 fichiers soient sur le bureau.
Encore Merci !!!
Ok. J'ai trouvé. Find ne permet pas des chaînes de caractères qui dépassent une "certaine longueur". Bref, le texte dans tes cellules est trop long.
Le code fonctionne si on teste sur un bout de cell. Seulement on ne recherche plus la totalité de la cellule mais une partie
Je te mets la correction que je te suggère (en rouge)
Tu testes et tu me dis mais je me suis retrouvé avec des hoquets dans la colonne H... Ça devrait te dire quelque chose ;)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Sub Conduits_admission_air_BP() Dim FL1 As Worksheet Dim FL2 As Worksheet Dim c As Range Dim Mot as string Set FL1 = ThisWorkbook.ActiveSheet Workbooks.Open "C:\Documents and Settings\p049490\Desktop\Gamme de développement - Conduits admission air BP (NR).xls" Set FL2 = ActiveWorkbook.ActiveSheet For Each cell In FL1.Range("D157:D5346") Mot = left(cell.value, 20) With FL2.Range("E1:E1000") Set c = .Find(What:=Mot, LookIn:=xlValues, lookat:=xlPart) If Not c Is Nothing Then 'Si donnée trouvée 'Teste si la colonne E de feuille 1 est = colonne G de feuille 2 If Cell = c and cell.Offset(0, 1) = c.Offset(0, 2) Then 'place la donnée située dans la colonne H se FL1 dans la colonne H de FL2 FL2.Cells(c.Row, 8) = cell.Offset(0, 3) End If Set c = Nothing End If End With Mot = "" 'simple précaution Next End Sub
A+
Je te remercie et je te tire mon chapeau !!! Ca marche exactement comme je le souhaitais, donc encore une fois, merci :king: Pour les petits "hoquets" :mouarf: j'en fait mon affaire 8-)
En tout cas, c'est vraiment sympa de ta part de m'avoir tant aidé :P
J'aime bien avoir raison, c'est pour ça :mouarf:
Bonne journée
LoL :mouarf:
Bonne journée à toi et t'inquiète donc pas, je viendrai t'embêter d'ici peu avec mon questionnaire dynamique ;)