Boucle identification, modification et recopie
Bonjour à tous,
Je rencontre un problème dans la réalisation d'un code pour mon projet et je ne sais plus comment avancer
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".
Grâce à l'aide exceptionnelle d'un membre du forum (qui se reconnaitra et me haïra peut-être pour avoir mal exprimé mon besoin en premier lieu
. 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.
Je vous remercie par avance de votre aide,
Adrien
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
Bonsoir,
Je ne me doutais pas être impliqué dans ton affaire
d'un membre du forum (qui se reconnaitra et me haïra peut-être pour avoir mal exprimé mon besoin en premier lieu
Eh bien non ! puisque je ne pensais pas être concerné, et n'avais pas reconnu la question comme une sur laquelle je me serais penché. Et elle est en effet différente...
Dans ce contexte, je vais donc te donner le point de vue que j'ai eu immédiatement à l'énoncé de ton problème.
Je n'aurais pour ma part qu'une base et une seule de produit, tenue à jour, en conservant éventuellement un historique des modifications-créations s'il s'avère que cela a une utilité. En procédant ainsi, le problème que tu soumets n'a plus aucune raison de se poser !
Cordialement.
MFerrand,
C'est exactement ce que j'avais commencé à faire et proposé initialement à mon tuteur mais celui-ci insiste pour conserver cette configuration
Le fichier sera utilisé par des personnes pas très à l'aise avec la technologie disons et il souhaite une manière facile de supprimer les modifications déclarées au besoin. La suppression me sera facile à faire en soit car il s'agirait de supprimer la ligne dans mon registre des modifications en f2 et appeler la macro ensuite.