IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Boucle de mise à jour incomplète [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Boucle de mise à jour incomplète
    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
    Fichiers attachés Fichiers attachés

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2017
    Messages : 6
    Points : 12
    Points
    12
    Par défaut
    Salut à toi,

    Si j'ai bien compris ce que tu voulais, le code que j'ai bricolé devrait fonctionner.

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    '/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Option Explicit
     
    Sub test()
     
    Dim lastrow As Long
    Dim i As Long, i1 As Long, j As Long, j1 As Long
    Dim table1() As Variant
    Dim numunique As Long
    Dim check As Boolean
    Dim k As Long, k2 As Long
     
    'Nettoyage du tableau mis à jour///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    lastrow = Sheets(3).Range("A9").End(xlDown).Row
     
    Sheets(3).Range("A9", "N" & lastrow).ClearContents
     
    'Copie du tableau initial //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    lastrow = Sheets(1).Range("A9").End(xlDown).Row
    Sheets("f3").Range("A9", "N" & lastrow).Copy
    Sheets("f").Select
    Range("A9").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
     
    'Mise à jour du tableau en fonction des modifs ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    'Création d'une table de données pour faire une recherche
    i1 = Sheets("f").Range("A10").End(xlDown).Row
    j = 10
    ReDim table1(i1)
    For j1 = 1 To UBound(table1)
        table1(j1) = Sheets(3).Cells(j, 1)
        j = j + 1
    Next j1
     
     
    i = 10 'Dans la feuille des modifications, on commence à E10
    While Not IsEmpty(Sheets("f2").Range("E" & i)) 'On boucle pour faire toutes les modifications
        numunique = Sheets("f2").Range("E" & i)
        k = 1
        k2 = 10
        check = False
        Do Until check = True Or k = UBound(table1) 'On passe en revue la table créée pour voir si on a une correspondance
            If table1(k) = numunique Then 'Si un numéro unique modifié correspond, on effectue la modification dans la feuille du tableau final
                Sheets("f").Range("A" & k2, "N" & k2).Value = Sheets("f2").Range("E" & i, "R" & i).Value
                check = True
            End If
        k = k + 1
        k2 = k2 + 1
        Loop
        If k = UBound(table1) Then 'Si aucune correspondance n'a été établie, c'est un nouveau numéro, on met donc en place une nouvelle ligne
            lastrow = Sheets("f").Range("A10").End(xlDown).Row
            lastrow = lastrow + 1
            Sheets("f").Range("A" & lastrow, "N" & lastrow).Value = Sheets("f2").Range("E" & i, "R" & i).Value
        End If
     i = i + 1
     Wend
     
    End Sub
    '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Voilà voila, j'ai refait un code de zéro donc si tu as des questions n'hésitent pas. Je l'ai testé et normalement il marche correctement, il copie la liste initiale, y ajoute les modifications et ajoute les nouvelles références à la suite.

    En espérant que cela te sera utile. A plus!

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour Eldaar,

    Je viens de faire quelques essais et ça m'a l'air vraiment parfait !!
    Merci beaucoup pour ton temps et ton aide, je vais regarder d'un peu plus près le code et reviendrai ici si j'ai quelques questions en attendant je mets le sujet en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Boucle de mise à jour
    Par Fred_rt dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/04/2015, 12h17
  2. [Mise à jour bloquée] problème de maj: boucle perpétuelle
    Par simipi dans le forum Windows Vista
    Réponses: 7
    Dernier message: 08/10/2009, 14h38
  3. Mise à jour d'une valeur dans une boucle
    Par dido_k83 dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/06/2009, 16h35
  4. boucle vba et mise à jour de colonne
    Par jrege75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/12/2008, 23h18
  5. Boucle de mise à jour SQL
    Par ChrisMan dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/05/2007, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo