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 ) j'ai pu réaliser 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.

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
10test-3.xlsm (189.44 Ko)

Bonsoir,

Je ne me doutais pas être impliqué dans ton affaire n'ayant pas reconnu de code produit par mes soins ! Mais ayant eu la curiosité de vérifier, puis en regardant de plus près, il y a effectivement un bout de code que j'ai produit à l'origine, sans doute modifié puisque tu disais l'avoir fait, dans ton assemblage (plutôt mal fait car il ne suffit pas de mettre des fragments de code d'origines diverses pour faire une macro équilibrée...)

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.

Someone ?

Rechercher des sujets similaires à "boucle identification modification recopie"