Comparer deux listes, copier et garder valeurs Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
D
Danny74100
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 30 décembre 2015
Version d'Excel : 2016

Message par Danny74100 » 24 mai 2017, 11:27

Bonjour à tous,

J'ai deux listes, une modifiée manuellement en ajoutant des commentaires et une mise en forme ("Plan"). L'autre est une liste "brute" sans commentaires qui est importée d'une BDD ("Buffer").

L'idée est de mettre à jour la liste Plan en copiant la liste Buffer qui est régulièrement modifiée (dates) en gardant les commentaires dans les colonnes A,B,K,L,M. Chaque n°ordre est unique.

Je pensais faire comme ça :

Import de la liste à jour dans "buffer"
Ajouter les commentaires des colonnes A,B,K,L,M en fonction de chaque n°ordre dans "Buffer"
Supprimer les données dans "Plan" et copier les nouvelles données depuis "Buffer"
Lancer macro surligner
Lancer macro MiseEnPage


Est-ce que vous pensez que c'est faisable ?
Merci d'avance
Planning.xlsm
(21.85 Kio) Téléchargé 13 fois
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'669
Appréciations reçues : 346
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 24 mai 2017, 13:13

Bonjour

Un essai à tester.
Je ne m'y suis pas pris comme tu l'expliques.

Je passe toutes les lignes de la feuille Buffer et je regarde dans la feuille Plan s'il existe en colonne D le même numéro d'ordre.

Si on trouve ce numéro, on copie dans Buffer la ligne de la colonne A à la colonne J et on copie ça sur la ligne de même numéro dans la feuille Plan.

Si dans la feuille Plan il n'y a pas ce numéro, c'est qu'il est nouveau. On colle e alors la plage copiée à la suite.

Cela te convient-il ?
Bye !
Planning v1.xlsm
(31.92 Kio) Téléchargé 37 fois
D
Danny74100
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 30 décembre 2015
Version d'Excel : 2016

Message par Danny74100 » 24 mai 2017, 13:28

Salut merci de ta réponse rapide.


"Je passe toutes les lignes de la feuille Buffer et je regarde dans la feuille Plan s'il existe en colonne D le même numéro d'ordre."

Pour cette partie cela me convient.
Après se serai plutôt :

Si on trouve ce numéro, on copie les colonnes A:B et K:M de la feuille Plan pour les coller dans Buffer.
Après on supprime toutes les données de la feuille Plan A6:M et on les remplace par les données de la feuille Buffer.

Merci de ton aide :mrgreen:
D
Danny74100
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 30 décembre 2015
Version d'Excel : 2016

Message par Danny74100 » 24 mai 2017, 14:46

ça devrait être quelque chose de cette forme ça a l'air de marcher :mrgreen:
Sub MettreAjour()

    Set fb = Sheets("Buffer")
    Set fp = Sheets("Plan")
    
    
    For lnB = 6 To fb.Range("D" & Rows.Count).End(xlUp).Row
       
        For lnP = 6 To fp.Range("D" & Rows.Count).End(xlUp).Row
            If fb.Range("D" & lnB) = fp.Range("D" & lnP) Then
                lgn = lnP
                fp.Range("A" & lnP & ":B" & lnP).Copy
                fb.Range("A" & lnB & ":B" & lnB).PasteSpecial
                fp.Range("K" & lnP & ":M" & lnP).Copy
                fb.Range("K" & lnB & ":M" & lnB).PasteSpecial
                
                'fp.Range("A6:M").ClearContents
                'fb.Range("A6:M").Copy fp.Range("A6")
            End If
        Next lnP
     Next lnB
End Sub
g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'669
Appréciations reçues : 346
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 24 mai 2017, 15:28

Alors, si ça marche comme tu veux, pourquoi chercher plus loin ?
Bye !
D
Danny74100
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 30 décembre 2015
Version d'Excel : 2016

Message par Danny74100 » 24 mai 2017, 15:44

Du coup ça me donne ça c'est possible de l'optimiser (réduire le nb de lignes)?
Sub MettreAjour()

    Set fb = Sheets("Buffer")
    Set fp = Sheets("Plan")
    Application.ScreenUpdating = False
    
    For lnB = 6 To fb.Range("D" & Rows.Count).End(xlUp).Row
       
        For lnP = 6 To fp.Range("D" & Rows.Count).End(xlUp).Row
            If fb.Range("D" & lnB) = fp.Range("D" & lnP) Then
                lgn = lnP
                fp.Range("A" & lnP & ":B" & lnP).Copy
                fb.Range("A" & lnB & ":B" & lnB).PasteSpecial
                fp.Range("K" & lnP & ":M" & lnP).Copy
                fb.Range("K" & lnB & ":M" & lnB).PasteSpecial
            End If
        Next lnP
     Next lnB
     
    With fp
    fp.Activate
    DerL = Range("D" & Rows.Count).End(xlUp).Row
    DerC = Cells(5, Cells.Columns.Count).End(xlToLeft).Column
    
    Set Plage = Range(Cells(6, 1), Cells(DerL, DerC))
        Plage.Select
        Selection.EntireRow.Delete
        Range("A1").Select
    End With
        
    With fb
    fb.Activate
    DerL = Range("D" & Rows.Count).End(xlUp).Row
    DerC = Cells(5, Cells.Columns.Count).End(xlToLeft).Column
    
    Set Plage = Range(Cells(6, 1), Cells(DerL, DerC))
        Plage.Select
        Selection.Copy fp.Range("A6")
        Selection.EntireRow.Delete
        fp.Activate
        
    End With
                  
End Sub

g
gmb
Fanatique d'Excel
Fanatique d'Excel
Messages : 12'669
Appréciations reçues : 346
Inscrit le : 4 avril 2013
Version d'Excel : 2016

Message par gmb » 24 mai 2017, 18:18

Non, désolé, je ne vois pas.
Bye !
D
Danny74100
Jeune membre
Jeune membre
Messages : 18
Inscrit le : 30 décembre 2015
Version d'Excel : 2016

Message par Danny74100 » 25 mai 2017, 10:52

D'accord merci de ton aide !
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message