Fusionner 2 tableaux dans un 3ème
OK pas de problème.
Ca ce découpe en 3 étapes :
Mettre en feuille 3 colonne B :
1 - les références trouvées en feuillle1 (colonne N) qu'on ne trouve pas en feuille2 (colonne B), dont la quantité en feuille 1 est différente de 0 et uniquement si dans la feuille 1 la valeur de la cellule B est trouvée dans la colonne A de la feuille 2
2 - les références trouvées en feuille1 (colonne N) qu'on trouve aussi en feuille2 (colonne B) mais dont les quantités diffèrent (colonne Q en feuille1 et Colonne F en feuille2)
3 - Les ref qui existent dans feuille 2 (colonne B) mais pas dans feuille 1 (colonne N) et dont la quantité en feuille 2 est différente de 0
Est-ce un peu plus clair ?
Bonsoir,
à testeer
Sub fusiondesreferences()
'Ca ce découpe en 3 étapes :
'Mettre en feuille 3 colonne B :
'1 - les références trouvées en feuillle1 (colonne N) qu'on ne trouve pas en feuille2 (colonne B), dont la quantité en feuille 1 est différente de 0 et
'uniquement si dans la feuille 1 la valeur de la cellule B est trouvée dans la colonne A de la feuille 2
'2 - les références trouvées en feuille1 (colonne N) qu'on trouve aussi en feuille2 (colonne B) mais dont les quantités diffèrent (colonne Q en feuille1 et Colonne F en feuille2)
'3 - Les ref qui existent dans feuille 2 (colonne B) mais pas dans feuille 1 (colonne N) et dont la quantité en feuille 2 est différente de 0
' on ajoute une nouvelle feuille pour recevoir le résultat de la fusion des références
' wso feuille résultat
Application.ScreenUpdating = False
calcmethod = Application.Calculation
Application.Calculation = xlCalculationManual
Set wso = Worksheets("import")
' wsi1 première feuille
Set wsi1 = Worksheets("sheet")
' dli1 dernière ligne de wsi1
dli1 = wsi1.Range("N" & Rows.Count).End(xlUp).Row
Set wsi2 = Worksheets("Prestashop")
' dli1 dernière ligne de wsi1
dli2 = wsi2.Range("B" & Rows.Count).End(xlUp).Row
'on passe en revue toutes les références de wsi1 la feuille "sheet" et on traite les cas 1 et 2
dlo = 1
For i = 2 To dli1
Application.StatusBar = "Progress phase 1 " & Format(i / dli1, "0.00%")
' on prend les références de wsi1 qui ont une quantité <>0
If wsi1.Range("Q" & i) <> 0 Then
' tf reference à rechercher dans wsi2
tf = wsi1.Range("N" & i)
Set re = wsi2.Range("B2:B" & dli2).Find(tf, lookat:=xlWhole)
If re Is Nothing Then ' on ne l'a pas trouvée on vérifie si la valeur de la cellule B de la feuille 1
' se retrouve dans la cellule A de la feuille 2
Set re = wsi2.Range("A2:A" & dli2).Find(wsi1.Range("B" & i), lookat:=xlWhole)
If Not re Is Nothing Then
'on l'a trouvée on l'ajoute dans wso
dlo = dlo + 1
wsi1.Range("N" & i).Copy wso.Range("B" & dlo)
End If
ElseIf wsi1.Range("Q" & i) <> wsi2.Range("F" & re.Row) Then 'on l'a trouvée et les quantités sont différentes
'on l'ajoute dans wso
dlo = dlo + 1
wsi1.Range("N" & i).Copy wso.Range("B" & dlo)
End If
End If
Next i
For i = 2 To dli2
Application.StatusBar = "Progress phase 2 " & Format(i / dli2, "0.00%")
' on passe en revue toutes les références de wsi2 la feuille "prestashop" et on traite le cas 3,
' on sélectionne les lignes dont la quantité est <>0
If wsi2.Range("F" & i) <> 0 Then
Set re = wsi1.Range("N2:N" & dli1).Find(wsi2.Range("B" & i), lookat:=xlWhole)
' on n'a pas trouvé la référence de wsi2 dans wsi1 on la copie
If re Is Nothing Then
dlo = dlo + 1
wsi2.Range("B" & i).Copy wso.Range("B" & dlo)
End If
End If
Next i
MsgBox "Traitement terminé"
Application.ScreenUpdating = True
Application.Calculation = calcmethod
Application.StatusBar = ""
Set wso = Nothing
Set wsi1 = Nothing
Set wsi2 = Nothing
End SubJe viens de faire un test poussé avec tout les cas de figure (j'en dénombre 7 : 3 pour le point 1, 2 pour le point 2 et 2 pour le point 3) et là aucun problème le résultat est parfait !!!
Chapeau bas l'artiste !
Promis je t'embête plus
Merci infiniment.