Macro comparaison colonne et ajout ou suppression

jchap02

XLDnaute Nouveau
Bonjour,

Je cherche à faire une comparaison de données entre deux colonnes à l’aide d’une macro mais vu mon niveau de connaissance en VBA, c’est plus que difficile.
J’explique en détails :
Dans un classeur j’ai deux feuilles « Commande » et « Suivi Commande ».
A partir de la colonne « N° Commande » de la feuille « Suivi Commande » je souhaite vérifier si les différents numéros de commande sont présents dans la colonne « N° Commande » de la feuille « Commande ».
1.Si le numéro de commande est trouvé sur les deux feuilles alors on ne fait rien.
2.Si le numéro de commande n’est pas trouvé sur la feuille « Commande » alors on supprime la ligne correspondante au numéro de commande dans la feuille « Suivi Commande »
3. Si un numéro de commande est présent sur la feuille « Commande » et pas sur la feuille « Suivi Commande » alors on doit ajouter en bas du tableau de la feuille « Suivi Commande » une nouvelle ligne reprenant tous les détails de la commande.
J’espère avoir été suffisamment clair.
Merci d’avance pour votre aide.
 

jp14

XLDnaute Barbatruc
Re : Macro comparaison colonne et ajout ou suppression

Bonjour et bienvenue sur le forum

Peux-tu déposer ta feuille avec des données non confidentielles que tu as. Avec tes explications, il faut la recréer (alors qu'elle existe).....

JP
 

jchap02

XLDnaute Nouveau
Re : Macro comparaison colonne et ajout ou suppression

Bonjour JP et merci pour ton aide.
Le fichier est en pièce jointe.
Pour être un peu plus précis :
Il faut vérifier que les numéros de commande situés dans la colonne H de la feuille « Suivi Commande », sont présents ou pas dans la colonne J de la feuille « Commande ».
Si c’est le cas alors il ne faut rien faire.
Si un des numéros de commande de la feuille « Suivi Commande » n’est plus dans la feuille « Commande » alors il faut supprimer la ligne entière de la commande en question dans la feuille « Suivi Commande ».
Ensuite il faut rapatrier les nouvelles commandes dans « Suivi Commande », c'est-à-dire :
Tous les numéros de commandes de la feuille « Commande » qui ne sont pas présents dans « Suivi Commande », il faudrait ajouter une nouvelle ligne en bas du tableau de la feuille « Suivi Commande » qui recopie les données de la feuille « Commande ».
J’espère que c’est un peu plus clair.
Encore merci pour ton aide.
 

Pièces jointes

  • Classeur exemple.xlsx
    11.4 KB · Affichages: 75
  • Classeur exemple.xlsx
    11.4 KB · Affichages: 84
  • Classeur exemple.xlsx
    11.4 KB · Affichages: 85

jp14

XLDnaute Barbatruc
Re : Macro comparaison colonne et ajout ou suppression

Bonsoir

Ci dessous le code qui permet de faire le travail demandé.
A tester
Code:
Option Explicit


Sub travdem()
Dim Cellule1 As Range
Dim Cellule2 As Range
Dim plage2 As Range
Dim Nomfeuille1 As String
Dim Nomfeuille2 As String
Dim Col1 As String, Col2 As String
Dim I As Long
'parametre
' pour boucler sur la colonne 1
Nomfeuille1 = "Suivi Commande"
Nomfeuille2 = "Commande"
Col1 = "H"
Col2 = "J"
With Sheets(Nomfeuille2)
Set plage2 = .Range(Col2 & "2:" & Col2 & .Range(Col2 & .Rows.Count).End(xlUp).Row)
End With

With Sheets(Nomfeuille1)

For Each Cellule1 In .Range(Col1 & "2:" & Col1 & .Range(Col1 & .Rows.Count).End(xlUp).Row)

Set Cellule2 = plage2.Find(Cellule1, LookIn:=xlValues)
If Not Cellule2 Is Nothing Then
'Si c’est le cas alors il ne faut rien faire.
Else
'Si un des numéros de commande de la feuille « Suivi Commande » n’est plus dans la feuille « Commande » alors il faut supprimer la ligne entière de la commande en question dans la feuille « Suivi Commande ».
    Cellule1 = ""
End If
Next Cellule1

For I = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
    If .Range(Col1 & I) = "" Then .Rows(I).Delete Shift:=xlUp
Next I


End With


' on modifie la recherche
With Sheets(Nomfeuille1)
Set plage2 = .Range(Col1 & "2:" & Col1 & .Range(Col1 & .Rows.Count).End(xlUp).Row)
End With



With Sheets(Nomfeuille2)

For Each Cellule1 In .Range(Col2 & "2:" & Col2 & .Range(Col2 & .Rows.Count).End(xlUp).Row)

Set Cellule2 = plage2.Find(Cellule1, LookIn:=xlValues)
If Not Cellule2 Is Nothing Then

Else
I = Sheets(Nomfeuille1).Range("h" & Sheets(Nomfeuille1).Rows.Count).End(xlUp).Row + 1
Sheets(Nomfeuille1).Range("a" & I) = .Range("b" & Cellule1.Row)
Sheets(Nomfeuille1).Range("b" & I) = .Range("c" & Cellule1.Row)
Sheets(Nomfeuille1).Range("c" & I) = .Range("d" & Cellule1.Row)
Sheets(Nomfeuille1).Range("d" & I) = .Range("D" & Cellule1.Row)
Sheets(Nomfeuille1).Range("e" & I) = .Range("E" & Cellule1.Row)
Sheets(Nomfeuille1).Range("f" & I) = .Range("g" & Cellule1.Row)
Sheets(Nomfeuille1).Range("g" & I) = .Range("i" & Cellule1.Row)
Sheets(Nomfeuille1).Range("h" & I) = .Range("j" & Cellule1.Row)
Sheets(Nomfeuille1).Range("k" & I) = .Range("H" & Cellule1.Row)
Sheets(Nomfeuille1).Range("r" & I) = .Range("R" & Cellule1.Row)

    
End If
Next Cellule1

End With
End Sub


JP
 

Discussions similaires

Réponses
2
Affichages
546

Statistiques des forums

Discussions
312 115
Messages
2 085 456
Membres
102 891
dernier inscrit
cocowild