Bonjour à tous,
Je rencontre un problème dans la réalisation d'un code pour mon projet et je ne parviens pas à compléter mon code:
J'ai un fichier comportant 3 onglets: "f3", "f2", "f"
- L'onglet "f3" comporte une liste de produits identifiés avec un numéro unique. Cette liste n'a pas vocation à évoluer, c'est pour pouvoir retrouver mon point de départ
- L'onglet "f2" correspond à un registre des modifications sur les produits. L'utilisateur peut déclarer une modification à travers un userform et le produit modifié va apparaitre dans cet onglet (toujours avec le même numéro unique mais également un numéro de modification).
L'utilisateur peut soit modifier un produit existant soit créer un nouveau produit (qui sera donc uniquement présent en "f2" et "f").
- L'onglet "f" correspond à ma liste de produits mise à jour, c'est à dire la liste initiale "f3" prenant en compte la dernière modification pour chaque produit en "f2" et les nouveaux produits si il y en a.
Je cherche donc à faire une macro qui va supprimer la liste actuelle "f", copier ma liste initiale "f3" en prenant en compte les éléments de mon registre de modification "f2" et coller le résultat en "f".
J'ai commencé avec le code ci-dessous cependant le résultat n'est pas exacte car:
. les nouveaux produits enregistrés en "f2" n'apparaissent pas dans ma liste "f" actualisée
. ma liste actualisée "f" comporte des lignes vides supplémentaires après le lancement de la macro.
Merci par avance pour votre aide et n'hésitez pas à me le faire remarquer si mes explications sont trop maigres
Adrien
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 Sub Macro1() 'On supprime la liste actuelle f Sheets("f").Select Range("A10").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.ClearContents Range("A10").Select 'On recopie la liste initiale f3 dans f Dim CopyRange As Range Dim PasteRange As Range Set CopyRange = Sheets("f3").Cells(10, 1).Resize(455, 14) With Sheets("f") Set PasteRange = Sheets("f").Cells(10, 1).Resize(455, 14) End With 'on met les valeurs de la references CopyRange dans la references PasteRange PasteRange.Value2 = CopyRange.Value2 'on supprime les references Set CopyRange = Nothing Set PasteRange = Nothing 'On ajoute les modifications déclarée en f2 dans la liste mise à jour en f Dim lgn, nu%, i%, j%, plgf As Range With Worksheets("f") Set plgf = .Range(.Cells(10, 1), .Cells(9, 1).End(xlDown)) End With i = 10 With Worksheets("f2") Do While .Cells(i, 4) <> "" nu = .Cells(i, 4) lgn = .Cells(i, 4).Resize(, 14).Value For j = 1 To plgf.Rows.Count If plgf.Cells(j, 1) = nu Then plgf.Cells(j, 1).Resize(, 14).Value = lgn Exit For End If Next j i = i + 1 Loop End With End Sub
Partager