bonjour à tous,

j'avais déjà posté un message sur le forum car j'avais du mal à écrire le code d'une macro. Celle-ci consistait à mettre à jour un fichier contenant une colonne avec références de pièces, nom de ces pièces, références des fournisseurs associés à chacune de ces pièces. De plus, on établit cette mise à jour à partir d'un "fichier source".
Lorsqu'une nouvelle réf de pièce apparait dans le fichier source, j'aimerais qu'elle apparaisse aussi dans le fichier mise à jour et lorsqu'une réf n'apparait plus dans le fichier source, il faudrait qu'elle disparaisse aussi du fichier mise à jour.

dans le fichier mise à jour, on a:
colonne B:ref de la pièce
colonne C:nom de la pièce
colonne D:ref du fournisseur
...





voici la macro pour réaliser ces opérations:

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
Sub macro_mise_a_jour()
 
Dim Der_Sc As Long
Dim der_Maj As Long, FC As String
Dim x As Long
 
Dim W_Maj
Dim W_Source
Dim F_Source
Dim F_Maj
 
 
Workbooks.Open Filename:=("D:\documents and Settings\SESA188347\Desktop\mise a jour+source\fichier source.xls")
 
Set W_Source = Workbooks("fichier source.xls")
Set W_Maj = Workbooks("mise a jour pieces critiques.xls")
Set F_Source = Workbooks("fichier source.xls").Sheets("Liste pièces prodipact")
Set F_Maj = Workbooks("mise a jour pieces critiques.xls").Sheets("Feuil1")
 
 
    'si les ref sont en B dans les deux fichiers
Der_Sc = F_Source.Range("B" & F_Source.Rows.Count).End(xlUp).Row 'dernière ligne du fichier source
der_Maj = F_Maj.Range("B" & F_Maj.Rows.Count).End(xlUp).Row 'dernière ligne du fichier_maj
 
 
'on crée une colonne temporaire (colonne AV) dans le fichier mise à jour
        Workbooks("mise a jour pieces critiques.xls").Activate
        FC = "=NB.SI(" & "'[" & W_Source.Name & "]" & F_Source.Name & "'!$B$2:$B$" & Der_Sc & ";B2)"
        Sheets("Feuil1").Range("AV2").Value = FC
        Sheets("Feuil1").Range("AV2").AutoFill Destination:=F_Maj.Range("AV2:AV" & der_Maj), Type:=xlFillDefault
 
 
'supprimer chaque ligne dont la ref n'est pas présente dans la feuille source
For x = der_Maj To 2 Step -1
    If F_Maj.Range("AV" & x) = 0 Then
        F_Maj.Range("AV" & x).EntireRow.Delete
    End If
Next x
 
'on supprime la colonne temporaire
F_Maj.Columns("AV:AV").Delete
 
'on recommence mais à l'envers, pour ajouter les lignes
Der_Sc = F_Source.Range("B" & F_Source.Rows.Count).End(xlUp).Row
der_Maj = F_Maj.Range("B" & F_Maj.Rows.Count).End(xlUp).Row
 
End Sub
Lorsque j'execute la macro, un message d'erreur s'affiche avec écrit " erreur d'execution 1004" à la ligne:
Sheets("Feuil1").Range("AV2").Value = FC

J'ai essayé de comprendre l'erreur mais je n'ai rien trouvé pour le moment. Quelqu'un aurait-il une idée sur ce sujet??
merci d'avance!!