totre
Bonjour
Est ce normale que ton test en if soit en dehors de ta boucle en j?
Car là tu ne testera que la dernière valeur de ancien
J'aurais plutôt vu quelque chose comme ca dans le principe, sans passer par les tableaux (mais ca peut être une très bonne idée les tableaux c'est juste que j'ai pas envie de me prendre la tête avec)
a adapter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 For i = 3 To iLRBE flag=false For j = 3 To iLRAncien if WsAncien.Cells (j, 4).Value = WsBE.Cells (i, 12).Value then flag=true end if next j if not flag then msgbox "la valeur " & WsBE.Cells (i, 12).Value & " de nouveau n'existe pas dans ancien" 'tu remplaces la message box par ce que tu veux faire : copier, colorier,etc end if next i
Bonjour Krovax, le forum,
merci pour ta réponse précieuse,
j'ai testé le bout de code que tu m'as passé, je l'ai adapté, ça à l'air de marcher mais ça me copie pas le contenu des cellules, et ça m'insère pas la même couleur lorsqu'il y a égalité entre les contenues des cellules dans ancien.xls et noveuau.xls.
La macro me copie un contenu bizarre sous la forme #N/A et marque en rouge tout le contenu de la colonne code filiaire en rouge dans ancien.xls.
Or, il me faut les vraies valeurs de nouveau.xls copiée dans ancien.xls ou s'il y a égalité entre les contenues de ancien.xls et nouveau.xls, on garde les mêmes contenus des cellules. Où s'il y a des nouvelles valeurs dans nouveau.xls, on les rajoute à la suite de ancien.xls.
J'espère que je me suis fais comprendre Krovax,
Merci pour ta contribution Krovax,
Je te colle la macro modifiée si tu veux!
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 For i = 3 To iLRBE flag = False For j = 3 To iLRAncien If WsAncien.Cells(j, 5).Value = WsBE.Cells(i, 12).Value Then ' on garde la même couleur WsInna.Cells(i, 5).Interior.ColorIndex = 0 flag = True End If Next j If Not flag Then 'MsgBox "la valeur " & WsBE.Cells(i, 12).Value & " de nouveau n'existe pas dans ancien" 'tu remplaces la message box par ce que tu veux faire : copier, colorier,etc WsInna.Range("E1:E" & i).Value = WsBE.Range("L1:L" & j).Value ' insertion de la couleur rouge WsInna.Cells(i, 5).Interior.ColorIndex = 3 End If Next i
A bientôt,
Bonanos
Pourquoi tu copie TOUTES les valeurs de la ligne 1 à i???
Code : Sélectionner tout - Visualiser dans une fenêtre à part WsInna.Range("E1:E" & i).Value = WsBE.Range("L1:L" & j).Value
C'est pas ca que tu devrais utiliser?
Mais même la ce que tu ecrit na pas de sens tu utilise la variable j alors que tu es sortie de la boucle j!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part WsInna.Range("E" & i).Value = WsBE.Range("L" & j).Value
On reprend
Tu as deux classeur ancien et nouveau dans chacun une colonne avec des valeurs(un code filaire je ne sais pas ce que c'est et je t'avoue je m'en balance un peu)
Quest ce que tu veux faire? Soit clair.
Exemple ce que fait le code que tu a donné
Il regarde pour chaque valeur de nouveau si elle existe dans ancien. Si ce n'est pas le cas tu veux faire quoi?
Ajouter la valeur dans ancien? a la suite?
Si tu veux comparer si les valeur de ancien sont dans nouveau il faut que tu relance les deux boucle dans l'autre sens. Tester chaque valeur de ancien voir si elle est dans nouveau
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 WsAncien .Range("E" & iLRAncien +n).Value = WsBE.Range("L" & i).Value n=n+1 'initialise n a 1
200 lignes c'est pas grand chose ne t'inquiète pas
Par contre j'ai pas très envie de réfléchir a ton exemple, je préfère faire travailler ton cerveau plutôt que le mien. Toute ma vie j'ai été un Partisan du Moindre Effort.
Alors regarde le code que je t'ai donnée les remarques faites essaye de comprendre et adapte le a ton problème. Si ca coince, tu reviens tu explique ce qui coince (de manière précise et après avoir testé le programme en mode pas a pas avec des espion et tout)
Partager