Comparer deux classeurs pour les mettre à jour

missybreizh

XLDnaute Nouveau
Bonjour,

Après pas mal de recherche sur le forum, je ne trouve pas vraiment de solution à mon problème.
J'ai un fichier avec plusieurs onglets. j'ai une macro qui me permet de copier les lignes du premier onglet vers d'autres onglets en fonction de différents mots clés.
J'ai deux problèmes:
Problème 1: c'est que lorsque je relance la macro, elle copie une seconde fois les données, alors qu'elles sont déja présentes.
Problème 2: je voudrais que lorsque je fais une modification sur le premier onglet, les modifications se répercutent sur tous les autres onglets.

Je pensais, grâce à un identifiant sur chaque ligne, faire une comparaison entre les lignes du premier onglet et celles des autres onglets; puis remplacer la ligne si les deux ne correspondent pas par celle du premier onglet.

Je ne sais pas si je suis très claire, mais je n'arrive pas à m'en sortir... Je tourne en rond, et j'aurais vraiment besoin d'un coup de main. Peut etre que ma façon de voir les choses ne correspond pas mais si vous avez une idée, je suis preneuse!

J'ai mis mon fichier en PJ pour aider à la compréhension.

Merci beaucoup d'avance pour votre aide, et merci au forum pour les infos que j'y ai déjà trouvé!
 

Pièces jointes

  • Fichier Céline.xlsm
    69.7 KB · Affichages: 87

JNP

XLDnaute Barbatruc
Re : Comparer deux classeurs pour les mettre à jour

Bonjour Céline et bienvenue :),
Euh, vachement chiadée ta macro :p...
A mon avis, laisse tomber les index, contente toi de relancer la macro si nécessaire :rolleyes:...
A condition de supprimer la colonne d'index et que tes onglets soient nommés en majuscule :
Code:
Sub Macro2()
Dim Feuille As Worksheet, I As Integer
With Sheets("TRACKER")
    For Each Feuille In ThisWorkbook.Worksheets
        If Feuille.Name <> "TRACKER" Then
            Feuille.Cells.Clear
            .Rows(1).Copy Feuille.Rows(1)
        End If
    Next Feuille
    On Error Resume Next
    For I = 2 To .Range("A" & Rows.Count).End(xlUp).Row
        .Rows(I).Copy Sheets(Trim(UCase(.Cells(I, 4)))).Range("A" & Sheets(Trim(UCase(.Cells(I, 4)))).Range("A" & Rows.Count).End(xlUp).Row + 1).EntireRow
        .Rows(I).Copy Sheets(Trim(UCase(.Cells(I, 5)))).Range("A" & Sheets(Trim(UCase(.Cells(I, 5)))).Range("A" & Rows.Count).End(xlUp).Row + 1).EntireRow
        .Rows(I).Copy Sheets(Trim(UCase(.Cells(I, 6)))).Range("A" & Sheets(Trim(UCase(.Cells(I, 6)))).Range("A" & Rows.Count).End(xlUp).Row + 1).EntireRow
    Next I
    On Error GoTo 0
End With
End Sub
Bises et bon courage :cool:
 

missybreizh

XLDnaute Nouveau
Re : Comparer deux classeurs pour les mettre à jour

Bonjour JNP

Et bien, je ne sais pas quoi dire! C'est génial! Merci beaucoup, tu as résolu tous mes problèmes en une macro de quelques lignes!!
Je suis impressionnée, et je me dis que faut vraiment que je bosse le sujet!

Merci en tout cas! C'est génial!
 

missybreizh

XLDnaute Nouveau
Re : Comparer deux classeurs pour les mettre à jour

Re
Juste une petite question, si je veux que certaines feuilles du classeur ne soient pas impactées par la macro, comment je fais?
(En fait je veux ajouter 3 feuilles avant et pour le moment, ca remplace le contenu forcément lol).
Merci de ta réponse.
 

JNP

XLDnaute Barbatruc
Re : Comparer deux classeurs pour les mettre à jour

Re :),
La partie qui évite Tracker est celle-ci
Code:
        If Feuille.Name <> "TRACKER" Then
            Feuille.Cells.Clear
            .Rows(1).Copy Feuille.Rows(1)
        End If
donc soit tu complète le test
Code:
        If Feuille.Name <> "TRACKER" And Feuille.Name <> "Toto" And Feuille.Name <> "Titi" Then
            Feuille.Cells.Clear
            .Rows(1).Copy Feuille.Rows(1)
        End If
soit si tu as beaucoup d'exclusion, tu utilises un Select Case à la place du If
Code:
        Select Case Feuille.Name
            Case "TRACKER", "Toto", "Titi", "Tutu"    'etc.
            Case Else
                Feuille.Cells.Clear
                .Rows(1).Copy Feuille.Rows(1)
        End Select
Bises :cool:
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin