Macro vba

Résolu/Fermé
jj341 Messages postés 10 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 2 juillet 2021 - Modifié le 1 juil. 2021 à 10:05
Mike-31 Messages postés 18176 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 28 janvier 2023 - 2 juil. 2021 à 21:16
Bonjour,

Je suis débutant et je démarre avec vba, j'ai un document avec deux feuilles, deux liste à des dates différentes.
J'ai réussi à mettre en place une macro me permettant de vérifier une colonne dans les deux feuilles et de copier les lignes qui sont absentes dans l'une des deux.

Sub MAJ()
Dim c As Range
Sheets("MAJ").Range("a2:m" & Rows.Count).Clear
With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
With Sheets("Liste")
For Each c In .Range("c2.C" & .Cells(.Rows.Count, 2).End(xlUp).Row)
If IsError(Application.Match(c, Sheets("Liste N-1").[C:C], 0)) Then
.Rows(c.Row).Copy Sheets("MAJ").Range("a" & Sheets("MAJ").Cells(Sheets("MAJ").Rows.Count, 1).End(xlUp).Row + 1)
End If
Next
End With
With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
End Sub


Maintenant, je souhaiterais mettre en place une macro qui vérifie dans une colonne les cellules identiques et vérifie s'il existe des différences dans les lignes des cellules doublons. S'il existe des différences, j'aimerais que la maccro recopie la ligne sur une nouvelle feuille et au mieux qu'elle colorie les cellules qui auraient changées.

Merci d'avance
A voir également:

7 réponses

Mike-31 Messages postés 18176 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 28 janvier 2023 5 033
Modifié le 2 juil. 2021 à 16:32
Re,

normal, Range("C") ne veut rien dire puisque tu détermines le colonne C mais pas la ligne.
En fait tu devrais par exemple écrire Range("C2") pour faire référence à une adresse bien précise.
Il en est de même pour les lignes suivantes
Range("F"
ou
Range("P" etc ...
A+
Mike-31

Je suis responsable de ce que je dis, pas de ce que tu comprends...
1
Mike-31 Messages postés 18176 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 28 janvier 2023 5 033
Modifié le 1 juil. 2021 à 10:13
Bonjour,

comme cela

Sub Archivage()
Sheets(Range("F8").Value).Activate
End Sub


mais tu peux utiliser la syntaxe événementielle
Private Sub Worksheet_Change(ByVal Target As Range)

si en F8 tu installes par exemple une liste de validation

ou encore avec un clic droit en F8 pour déclencher le code avec
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

ou avec un double clic en F8
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
A+
Mike-31

Je suis responsable de ce que je dis, pas de ce que tu comprends...
0
J'ai recopier la macro et un message d'erreur apparaît lors de l’exécution :

Erreur d’exécution '9'
L'indice n'appartient pas à la sélection
0
jj341 Messages postés 10 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 2 juillet 2021
Modifié le 1 juil. 2021 à 10:27
Merci pour ton retour Mike-31, je vais essayer cette solution.

Par contre je ne suis pas l'auteur de l'autre sujet et la problématique n'est pas la même.

Encore merci pour ton aide et bonne journée! :)
0
jj341 Messages postés 10 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 2 juillet 2021
2 juil. 2021 à 16:12
J'ai retravaillé la macro qui est la suivante:

Sub MAJ()
'
' MAJ Macro
'
If Sheets("Liste").Range("C").Value = Sheets("Liste N-1").Range("C").Value Then
Range("F", Sheets("Liste")).Value = Range("F", Sheets("Liste N-1")).Value
Range("P", Sheets("Liste")).Value = Range("P", Sheets("Liste N-1")).Value
Range("AF", Sheets("Liste")).Value = Range("AF", Sheets("Liste N-1")).Value
Range("AL", Sheets("Liste")).Value = Range("AL", Sheets("Liste N-1")).Value
Range("BZ", Sheets("Liste")).Value = Range("BZ", Sheets("Liste N-1")).Value
Else
Rows(c.Row).Copy Sheets("MAJ").Range("a" & Sheets("MAJ").Cells(Sheets("MAJ").Rows.Count, 1).End(xlUp).Row + 1)
End If
End Sub

Cependant la ligne en gras pose problème, auriez-vous une idée?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jj341 Messages postés 10 Date d'inscription mardi 31 mars 2009 Statut Membre Dernière intervention 2 juillet 2021
Modifié le 2 juil. 2021 à 16:55
Merci de ton retour mais ça ne marche toujours pas, une autre ligne est surlignée en jaune.

Sub MAJ()
'
' MAJ Macro
'
If Sheets("Liste").Range("C2").Value = Sheets("Liste N-1").Range("C2").Value Then
Range("F2", Sheets("Liste")).Value = Range("F2", Sheets("Liste N-1")).Value
Range("P2", Sheets("Liste")).Value = Range("P2", Sheets("Liste N-1")).Value
Range("AF2", Sheets("Liste")).Value = Range("AF2", Sheets("Liste N-1")).Value
Range("AL2", Sheets("Liste")).Value = Range("AL2", Sheets("Liste N-1")).Value
Range("BZ2", Sheets("Liste")).Value = Range("BZ2", Sheets("Liste N-1")).Value
Else
Rows(c.Row).Copy Sheets("MAJ").Range("a" & Sheets("MAJ").Cells(Sheets("MAJ").Rows.Count, 1).End(xlUp).Row + 1)
End If
End Sub
0
Mike-31 Messages postés 18176 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 28 janvier 2023 5 033
Modifié le 2 juil. 2021 à 17:05
Re,

il faut commencer par identifier l'onglet puis l'adresse cellule
If Sheets("Liste").Range("C2").Value = Sheets("Liste N-1").Range("C2").Value Then
dans le code remplace les virgules par des points

et idem pour les lignes suivantes


A+
Mike-31

Je suis responsable de ce que je dis, pas de ce que tu comprends...
0
Mike-31 Messages postés 18176 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 28 janvier 2023 5 033
2 juil. 2021 à 21:16
Re,

en attendant d'en savoir plus sur ton projet

Sub MAJ()
'
If Sheets("Liste").Range("C2").Value = Sheets("Liste N-1").Range("C2").Value Then
Sheets("Liste").Range("F2").Value = Sheets("Liste N-1").Range("F2").Value
Sheets("Liste").Range("P2").Value = Sheets("Liste N-1").Range("P2").Value
Sheets("Liste").Range("AF2").Value = Sheets("Liste N-1").Range("AF2").Value
Sheets("Liste").Range("AL2").Value = Sheets("Liste N-1").Range("AL2").Value
Sheets("Liste").Range("BZ2").Value = Sheets("Liste N-1").Range("BZ2").Value
Else

'par contre tu peux expliquer ce que tu veux faire avec cette ligne
'Rows(c.Row).Copy Sheets("MAJ").Range("a" & Sheets("MAJ").Cells(Sheets("MAJ").Rows.Count, 1).End(xlUp).Row + 1)



End If
End Sub

0