comparaisons colonnes

obyone

XLDnaute Occasionnel
bonjour,

je souhaites comparer 2 colonnes à l'aide du "bouton 2", si sur la ligne les 2 colonnes sont identique alors msg "aucune mise à jour" si différent msg "mise à jour à effectuer" et copie de la 1ère case de la colonne sur la "feuil2".
et ceux ci pour un tableau de plus de 300 entrées.

voici ma macro mais elle ne fonctionne pas comme je veux.

Code:
Sub Bouton2_Clic()
Dim col_A As Range
Dim col_B As Range
 
With Worksheets("Feuil1")
    Set col_A = .Range("A2")
    Set col_B = .Range("B2")
    For i = 2 To .Cells(1, 2).End(xlDown).Row 'derniere cellule renseignée de la colonne, nécessite que toutes les cellules soient remplies
    For j = 2 To .Cells(2, 2).End(xlDown).Row
 
    If .Cells(i, 1) = .Cells(j, 1) Then
 
      MsgBox "aucune mise à jour"
    Else
    
    Sheets("feuil1").Cells(i, 1) = Sheets("feuil2").Cells(j, 1)
    MsgBox "mise à jour à effectuer"
 
    End If
  Next
Next
End With
 
End Sub

merci de voter aide
oby1
 

Pièces jointes

  • comparaison.xlsm
    22.5 KB · Affichages: 33
  • comparaison.xlsm
    22.5 KB · Affichages: 26

vgendron

XLDnaute Barbatruc
Re : comparaisons colonnes

Hello

corrige avec ce code
PS: dans le cas ou Noms et anciens noms ne correspondent pas.. dans ta macro, tu vas chercher une info en feuille 2.. laquelle est vide
dans le code ci dessous, je recopie l'ancien nom vers Noms..

Code:
Sub Bouton2_Clic()
Dim col_A As Range
Dim col_B As Range
 
With Worksheets("Feuil1").Range("Tableau3") 'Tableau3 étant le nom de la table Feuil1
Maj = False
    For i = 1 To .Rows.Count
        If .Item(i, 1) <> .Item(i, 2) Then
            Maj = True
            .Item(i, 1) = .Item(i, 2)
        End If
    Next i
    
    If Maj Then MsgBox ("Une mise à jour a été faite")
End With
End Sub
 

obyone

XLDnaute Occasionnel
Re : comparaisons colonnes

bonjour merci de ta réponse mais ce n'est pas ce que je souhaitais,
si la colonne A est différente de la colonne B alors on copie la colonne A dans le "tableau1" sur la "feuil2"
merci
 

Pièces jointes

  • comparaison.xlsm
    21.3 KB · Affichages: 35
  • comparaison.xlsm
    21.3 KB · Affichages: 35

gosselien

XLDnaute Barbatruc
Re : comparaisons colonnes

Bonjour,

à vue de nez....(avec le code de vgendron que je salue)

Code:
Sub Bouton2_Clic()
Dim col_A As Range
Dim col_B As Range
Dim ws2 As Worksheet
Set ws2 = Sheets("feuil2")
With Worksheets("Feuil1").Range("Tableau3") 'Tableau3 étant le nom de la table Feuil1
Maj = False
    For i = 1 To .Rows.Count
        If .Item(i, 1) <> .Item(i, 2) Then
          .Item(i, 2).Copy ws2.[A65550].End(xlUp)(2)
        End If
    Next i
    'If Maj Then MsgBox ("Une mise à jour a été faite")
End With
End Sub
 

vgendron

XLDnaute Barbatruc
Re : comparaisons colonnes

Avec ceci alors...
Code:
Sub Bouton2_Clic()

With Worksheets("Feuil1").Range("Tableau3") 'Tableau3 étant le nom de la table Feuil1
Maj = False
    For i = 1 To .Rows.Count
        If .Item(i, 1) <> .Item(i, 2) Then
            Maj = True
            nb = Range("Tableau1").Rows.Count + 1
            'on ajoute une ligne au tableau de la feuille 2 "Tableau1"
            Sheets("Feuil2").ListObjects("Tableau1").Resize Range("A1:C" & nb + 1)
            Range("Tableau1").Item(Range("Tableau1").Rows.Count, 1) = .Item(i, 2)
            Range("Tableau1").Item(Range("Tableau1").Rows.Count, 2) = .Item(i, 3)
            Range("Tableau1").Item(Range("Tableau1").Rows.Count, 3) = "Maj Done"
        End If
    Next i
   
    If Maj Then MsgBox ("Une mise à jour a été faite")
End With
End Sub
 

vgendron

XLDnaute Barbatruc
Re : comparaisons colonnes

Avec juste une petite modif pour avoir la ligne vide en BAS du tableau

Code:
Sub Bouton2_Clic()

With Worksheets("Feuil1").Range("Tableau3") 'Tableau3 étant le nom de la table Feuil1
Maj = False
    For i = 1 To .Rows.Count
        If .Item(i, 1) <> .Item(i, 2) Then
            Maj = True
            nb = Range("Tableau1").Rows.Count + 1
            
            Range("Tableau1").Item(Range("Tableau1").Rows.Count, 1) = .Item(i, 2)
            Range("Tableau1").Item(Range("Tableau1").Rows.Count, 2) = .Item(i, 3)
            Range("Tableau1").Item(Range("Tableau1").Rows.Count, 3) = "Maj Done"
'on ajoute une ligne au tableau de la feuille 2 "Tableau1"
            Sheets("Feuil2").ListObjects("Tableau1").Resize Range("A1:C" & nb + 1)
        End If
    Next i
   
    If Maj Then MsgBox ("Une mise à jour a été faite")
End With
End Sub
 

jp14

XLDnaute Barbatruc
Re : comparaisons colonnes

Bonjour

Un code qui utilise des tableaux pour améliorer le temps de réponse.
Le nombre de données est indiférent.


Code:
Option Explicit

Sub Bouton2_Clic()
Dim ColA As Range, ColB As Range, Colc As Range
Dim MontabA As Variant, MontabB As Variant, MontabC As Variant, Diff As Boolean
Dim Dl1 As Long, i As Long, j As Long, Msg As String
With Worksheets("Feuil1")
    Dl1 = .Range("a:b").SpecialCells(xlCellTypeLastCell).Row
    Set ColA = .Range("A2:A" & Dl1)
    Set ColB = .Range("B2:B" & Dl1)
    Set Colc = Sheets("feuil2").Range("A2:B" & Dl1)
    MontabA = ColA.Value
    MontabB = ColB.Value
    MontabC = Colc.Value
    Diff = False
    Dl1 = 0
    For i = LBound(MontabA) To UBound(MontabA)
            If MontabA(i, 1) <> MontabB(i, 1) Then

            Diff = True
            MontabC(i, 1) = MontabA(i, 1)
            MontabC(i, 2) = MontabB(i, 1)
            If Dl1 = 0 Then Dl1 = i + 1
        End If
    Next i
 End With
Colc.Value = MontabC
If Diff = False Then
    Msg = "Pas de mise à jour"
Else
    Msg = "Mise à jour à faire dans la feuille 2 a la ligne : " & Dl1
End If

Call MsgBox(Msg, vbInformation, Application.Name)

End Sub


A tester

JP
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : comparaisons colonnes

et pourquoi tu ne pourrais pas mettre le else??
il suffit de respecter la syntaxe if then else: va voir dans l'aide VBA pour plus de détail

Code:
 If Maj Then 
    MsgBox ("Une mise à jour a été faite")
else MsgBox ("Aucune Mise à jour")
end if

Hello Gosselien,. je n'avais pas vu tes posts
et hello Jp
 

obyone

XLDnaute Occasionnel
Re : comparaisons colonnes

bonjour, donc la macro suivante fonctionne

Code:
Sub Bouton2_Clic()

With Worksheets("Feuil1").Range("Tableau3")
Maj = False
    For i = 1 To .Rows.Count
        If .Item(i, 1) <> .Item(i, 3) Then
            Maj = True
            nb = Range("MAJ").Rows.Count + 1
           
            Range("MAJ").Item(Range("MAJ").Rows.Count, 2) = .Item(i, 1)
            Range("MAJ").Item(Range("MAJ").Rows.Count, 4) = .Item(i, 3)
            Range("MAJ").Item(Range("MAJ").Rows.Count, 3) = .Item(i, 2)
            Range("MAJ").Item(Range("MAJ").Rows.Count, 5) = .Item(i, 4)
            

            Sheets("MAJ").ListObjects("MAJ").Resize Range("A1:E" & nb + 1)
        
        End If
    Next i
    
    For i = 1 To .Rows.Count
         If .Item(i, 2) <> .Item(i, 4) Then
            Maj = True
            nb = Range("MAJ").Rows.Count + 1
           
            Range("MAJ").Item(Range("MAJ").Rows.Count, 2) = .Item(i, 1)
            Range("MAJ").Item(Range("MAJ").Rows.Count, 4) = .Item(i, 3)
            Range("MAJ").Item(Range("MAJ").Rows.Count, 3) = .Item(i, 2)
            Range("MAJ").Item(Range("MAJ").Rows.Count, 5) = .Item(i, 4)
            

            Sheets("MAJ").ListObjects("MAJ").Resize Range("A1:E" & nb + 1)
        
        End If
    Next i
   
    If Maj Then
    MsgBox ("Mise à jour à faire")
    Else: MsgBox ("Aucune Mise à jour")
    End If
End With
End Sub

le probleme est que si le nom et la date change il me le copie 2 fois. de plus il va aussi me le copier s'il est déjà dans le tableau "MAJ", j'aimerais donc vérifier s'il la ligne n'est pas déjà dans le tableau avant de le copier.

mais je ne sais pas vers quelle formule m'orienter?

cordialement.
Oby1
 

Pièces jointes

  • comparaison.xlsm
    24.2 KB · Affichages: 24
  • comparaison.xlsm
    24.2 KB · Affichages: 32

Discussions similaires

Réponses
5
Affichages
235

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg