Salut à tous!
j'ai pas exactement compris ce que tu veux faire en cas de différence?
ton code copie toujpours la même zone de Nouveau pour le mettre toujours au même endroit dans ancien (et encore je ne suis pas sur que cela puisse marcher "L1:L" il te manque une info "L1:L5" ou "L1:L" & i).
Si tu veux copier la valeur d'une cellule tu peux simplement utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 If WsA.Cells(i, 4) <> WsN.Cells(j, 12) Then Worksheets("NOUVEAU" ).Range("L1:L" ).Copy _ Destination:=Worksheets("ANCIEN" ).Range("D1" )
dans cette exempl je copie le contenu de la cellule ligne 5 colonne j du classeur nouveau, dans la cellule ligne i colonne 4 du classeur ancien
Code : Sélectionner tout - Visualiser dans une fenêtre à part WsA.cells(i,2)=WsN.cells(5,j)
SI tu veux copier des ligne
pour les colonne remplace rows par Columns
Code : Sélectionner tout - Visualiser dans une fenêtre à part WsN.rows(i).Copy WsA.rows(j)
Edit : je viens de voir que pendanrt que je rédigeais mon message AlainTech c'est occupé de la mise en page. Merci bien, prochaine fois je ferais une mise a jour au lieu de me fatiguer a lire un code non balisé![]()
je viens de te(vous) lire et encore merci!
Je vais vous expliquer plus simplement et de manière courte.
Je travaille sur les deux classeurs anciens.xls et nouveau.xls.
on compare seulement, les codes filiaires des deux classeurs.
Dans le classeur ancien.xls , le code filiaire se trouve sur la feuille(onglet) "ANCIEN" répéré à la colonne D;
De la même manière, dans le classeur nouveau.xls, le code filiaire se trouve sur la feuille(onglet) "NOUVEAU" répérer à la colonne L.
La recopie de se fait de à partir de la colonne L de nouveau.xls sur la colonne D de ancien.xls, j'espère que je me suis fais comprendre krovaxhein?
Il suffit de recopier toutes les de L à D s'il y a différences entre les deux codes filiaires.
Cet après midi si vous le souhaitez je vous colle les fichiers en pièces jointes pour teste?
Merci d'avance les gars y compris Krovax,
BUT
Comparer chaque code filiaire des deux classeurs(anciens.xls et nouveau.xls),
A) s'il y a égalité entre les codes filiares de chaque classeur alors la couleur ne change pas(on garde la même couleur du départ).
Donc dans ancien.xls, le code filiaire reste le même sans changement de couleur car il y a eu égalité!
B) s'il y a différence entre les codes filiaires dans les deux classeurs alors la différence trouvée dans nouveau.xls se retrouve immédiatement (recopie du contenu de la cellule qui a changé dans l'ancien classeur) dans ancien.xls avec changement de couleur cette fois en ROUGE;
J'espère que je me suis bien expliqué cette fois - ci Krovaxhein?
Je suis entrain de travailler dessus un peu. Et je tiens compte de votre remarque Krovax, merci pour tout car je viens d'apprendre des choses avec vous!
A bientôt sur le forum,
Merci,
Sozo
Dans ce cas
Devrais marcher
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 For i = 1 To WsA.Range("D65536").End(xlUp).Row For j = 1 To WsN.Range("L65536").End(xlUp).Row If WsA.Cells(i, 4) <> WsN.Cells(j, 12) Then WsA.Cells(i, 4) = WsN.Cells(j, 12) WsA.Cells(i, 4).Interior.ColorIndex = 3 End If Next j Next i
En cas de différence
rq : Utiliser des tableau pour trouver la fin de la ligne est une idée mais on peut faire plus simple voir ici
Je l'ai juste mis pour information et par habitude surtout
Re... Krovax,
je viens te lire ton message, je vais devoir tester le code que tu m'as envoyé!
je tiens aussi à te remercier pour le temps que tu as conscré à mon problème car avoir des gens passionnés et de coeur comme vous de nos ce n'est pas évident d'en trouver!
Avant de tester la macro je te colle te mets en pièces jointes les deux classeurs:
le contenu de la macro est ci-dessus: avec ton code inséreé j'ai testé sans résultat je ne sais pas pourquoi et pourtant ça l'air béton!
Les deux classeurs se nomment AncienCodF.xls et NouveauCodF.xls
Pièce jointe 45716
Pièce jointe 45717
A bientôt sur le forum,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 Sub Compare() Dim iLRA%, iLRN%, i%, j% Dim Y As Boolean, Ys As Boolean Dim TabloN(), TabloA() Dim WbA As Workbook, WbN As Workbook Dim WsA As Worksheet, WsN As Worksheet Set WbA = Workbooks("AncienCodF.xls") Set WbN = Workbooks("NouveauCodF.xls") Set WsA = WbA.Worksheets("ANCIEN") Set WsN = WbN.Worksheets("NOUVEAU") iLRA = WsA.Cells(65535, 1).End(xlUp).Row iLRN = WsN.Cells(65535, 1).End(xlUp).Row TabloA() = WsA.Range("D1:D" & iLRA) TabloN() = WsN.Range("L1:L" & iLRN) '<-- Première partie : On commence d'abord par parcourir chaque élément ' du tableau "NOUVEAU" pour détecter les nouveautés For i = 1 To UBound(TabloN) 'Et on parcourt tout le tableau "ANCIEN" For j = 1 To UBound(TabloA) ' Si égalité alors on pose un drapeau If TabloA(j, 1) = TabloN(i, 1) Then Y = True 'Si l'égalité est stricte on met un flag If WsN.Cells(i, 12) = WsA.Cells(j, 4) Then Ys = True End If Next ' test de différence de valeur des cellules des feuilles "ANCIEN" et "NOUVEAU" For i = 1 To WsA.Range("D65536").End(xlUp).Row For j = 1 To WsN.Range("L65536").End(xlUp).Row If WsA.Cells(i, 4) <> WsN.Cells(j, 12) Then WsA.Cells(i, 4) = WsN.Cells(j, 12) WsA.Cells(i, 4).Interior.ColorIndex = 3 End If Next j Next i Y = False Ys = False Next Set WsA = Nothing Set WsN = Nothing End Sub
Merci pour tout encore,
mbizo
Partager