/ / Comparer les plages dans Excel VBA

Comparer les plages dans Excel VBA

Ci-dessous, nous examinerons un programme en Excel VBA cette compare sélectionné aléatoirement gammes et met en évidence les cellules qui sont uniques. Si vous ne connaissez pas encore les zones, nous vous recommandons vivement de lire d'abord cet exemple.

Situation:

Comparer les plages dans Excel VBA

Remarque: la seule valeur unique dans cet exemple est la valeur 3, car toutes les autres valeurs apparaissent dans au moins une zone supplémentaire. Pour sélectionner la plage ("B2: B7, D3: E6, D8: E9"), maintenez la touche Ctrl enfoncée et sélectionnez chaque zone.

Placez un bouton de commande sur votre feuille de calcul et ajoutez les lignes de code suivantes:

1. Dans un premier temps, nous déclarons quatre objets Range et deux variables de type Integer.

Dim rangeToUse As Range, singleArea As Range, cell1 As Range, cell2 As Range, i As Integer, j As Integer

2. Nous initialisons l'objet Range RangeToUse avec la plage sélectionnée.

Set rangeToUse = Selection

3. Ajoutez la ligne qui modifie la couleur d'arrière-plan de toutes les cellules en "Pas de remplissage". Ajoutez également la ligne qui supprime les bordures de toutes les cellules.

Cells.Interior.ColorIndex = 0
Cells.Borders.LineStyle = xlNone

4. Informez l'utilisateur lorsqu'il ne sélectionne qu'une zone.

If Selection.Areas.Count <= 1 Then
      MsgBox "Please select more than one area."
Else


End If

Les lignes de code suivantes (en 5, 6 et 7) doivent être ajoutées entre Else et End If.

5. Colorez les cellules des zones sélectionnées.

rangeToUse.Interior.ColorIndex = 38

6. Border chaque zone.

For Each singleArea In rangeToUse.Areas
    singleArea.BorderAround ColorIndex:=1, Weight:=xlThin
Next singleArea

7. Le reste de ce programme se présente comme suit.

For i = 1 To rangeToUse.Areas.Count
    For j = i + 1 To rangeToUse.Areas.Count
        For Each cell1 In rangeToUse.Areas(i)
            For Each cell2 In rangeToUse.Areas(j)
                If cell1.Value = cell2.Value Then
                    cell1.Interior.ColorIndex = 0
                    cell2.Interior.ColorIndex = 0
                End If
            Next cell2
        Next cell1
    Next j
Next i

Explication: Cela peut sembler un peu difficile, mais ce n’est pas si difficile. rangeToUse.Areas.Count est égal à 3, de sorte que les deux premières lignes de code se réduisent à Pour i = 1 à 3 et Pour j = i + 1 à 3. Pour i = 1, j = 2, Excel VBA compare toutes les valeurs de la première zone à toutes les valeurs de la deuxième zone.Pour i = 1, j = 3, Excel VBA compare toutes les valeurs de la première zone à toutes les valeurs de la troisième zone. i = 2, j = 3, Excel VBA compare toutes les valeurs de la deuxième zone à toutes les valeurs de la troisième zone. Si les valeurs sont identiques, la couleur d'arrière-plan des deux cellules est définie sur "Pas de remplissage", car elles ne sont pas uniques. .

Résultat lorsque vous cliquez sur le bouton de commande de la feuille:

Comparer les résultats

Lisez aussi: