1 votes

Trouver les doublons, mettre à jour la base de données avec la valeur minimale dans Excel

`Sub Update_data()

Dim Bk1 As Workbook 
Dim Bk2 As Workbook 
Dim Rng1 As Range 

Workbooks("Book1").Activate 'indicate wb name1 here
Set Bk1 = ActiveWorkbook 
Workbooks("Book2").Activate 'indicate wb name2 here
Set Bk2 = ActiveWorkbook 

Bk1.Activate 
Set Rng1 = Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 2)) 

Rng1.Copy 
Cells(1, 26).PasteSpecial Paste:=xlPasteValues 
Cells(1, 26).AutoFilter 
ActiveWorkbook.ActiveSheet.AutoFilter.Sort.SortFields.Add Key:=Rng1.Offset(0, 25), SortOn:=xlSortOnValues, Order:=xlAscending 
Cells(1, 26).AutoFilter 

Rng1.Offset(0, 25).RemoveDuplicates Columns:=1, Header:=xlYes 
Rng1.Offset(1, 25).NumberFormat = "m/d/yyyy" 

Dim i As Integer 

For i = 2 To Cells(Rows.Count, 26).End(xlUp).Row 
    Dim x As String 
    x = Cells(i, 26).Value 
    Bk2.Activate 
    Dim y As Integer 
    On Error Resume Next 
    y = WorksheetFunction.Match(x, Bk2.Worksheets(1).Columns(1)) 
    Bk2.Worksheets(1).Cells(y, 2) = Bk1.Worksheets(1).Cells(i, 27) 

    Bk1.Activate 
Next i 

Rng1.Offset(0, 25).ClearContents`

Veuillez m'aider avec une macro VBA pour réaliser ce qui suit.

J'ai deux classeurs - classeur 1 et classeur 2.

Le WB 1 est l'endroit où les données sont saisies. WB 2 est la base de données. (Il n'y a pas de doublons dans ce WB).

A partir de WB1 S'il y a des doublons dans la colonne A, vérifiez si les valeurs correspondantes dans la colonne B sont la valeur minimale des doublons.

Ensuite, copiez les cellules A et B correspondantes dans lesquelles B a la valeur minimale avec les autres données de la colonne A et B et faites correspondre la colonne A de WB1 avec la colonne A de WB2 ; si une correspondance est trouvée, collez la valeur minimale trouvée parmi les doublons de la colonne B de WB1 dans la colonne B de WB2 avec les autres données originales des colonnes A et B de WB1.

J'ai pu réaliser ce qui précède avec le code ci-joint créé par MAX,

mais j'ai trouvé une petite erreur en testant. Si le WB 2 (base de données) est dans l'ordre croissant, alors la macro fonctionne bien, mais si le WB 2 (base de données) n'est pas dans l'ordre ou mélangé, alors il laisse certaines des cellules vides dans la colonne B du WB 2.

J'ai également essayé d'entrer des données sans doublons dans WB1 (capture de données col A) et il est retourné avec des données incorrectes (date - col B) dans WB 2.

J'ai joint l'image d'exemple pour votre examen.

[ [https://www.dropbox.com/s/0vq76uvzs2rav3q/NIHL%20data%20Capturesample.xls?dl=0\]](https://www.dropbox.com/s/0vq76uvzs2rav3q/NIHL%20data%20Capturesample.xls?dl=0])

0voto

agtoever Points 6124

Comme @teylyn l'a déjà expliqué dans les commentaires, nous ne sommes pas un service d'écriture de code. Et pour ajouter à cela, votre code est un désordre. Je vais essayer de vous donner quelques conseils et j'espère vous encourager à réécrire votre code vous-même.

  • Dim est utilisé pour déclarer des variables. Mettez tous les Dim les déclarations en haut de page.

  • Essayez de comprendre ce que fait votre code, et supprimez tout code en double, non fonctionnel ou répétitif.

  • Lisez la documentation Microsoft Technet des fonctions que vous utilisez. Pour le Match fonction, il est clairement indiqué :

    "La fonction MATCH trouvera la plus grande valeur inférieure ou égale à la valeur. égale à la valeur. Vous devez vous assurer de trier votre tableau par ordre croissant. croissant."

  • Mettez des commentaires au-dessus de chaque section de votre code (toutes les 3 à 8 lignes de code), en expliquant ce qu'elle fait.

  • N'utilisez pas .Activate pour passer d'un classeur à l'autre. Comme vous avez défini deux Workbook vous pouvez accéder aux données de la feuille par l'intermédiaire de WorkbookObject.Range(<etc.>) . Cela rend votre code beaucoup plus rapidement, et il masque le changement de classeur pour l'utilisateur qui appuie sur le bouton.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X