Comparaison de colonnes deux à deux

Bonsoir

j'ai ecris le petit bout de code suivant qui consiste à verifier l'existence d'une cellule contenant les meme caractères , cette verification

se fait sur les colonnes , 2,5,8,11,14,17,20 en comparant a chaque fois deux colonnes c'est à dire (2 et 5) (2 et 8) (2 et 11) ..etc jusqu'a

(17 et 20) , si entre deux plages un caractère existe deux fois alors il est effacé de la seconde plage : exemple si je compare 2 et 8 et

qu'en colonne 2 et en colonne 8 je trouve le mot : TABLE , alors TABLE est effacé de la colonne 8.

voila mon bout de code , mais excel l'execute en tournant indefiniment en rond :

Sub compare()

Dim k, j As Integer
Dim X, Y As Range

For k = 0 To 6
For j = 0 To 6

For Each X In Cells(12, 2 + 3 * k).resize(100, 1)
For Each Y In Cells(12, 2 + 3 * j).resize(100, 1)
If X = Y Then
Y.ClearContents
Else
MsgBox " rien à supprimer"
End If
Next
Next
Next
Next
End Sub

Voyez vous une manière plus elegante de reprendre mon code ? Merci à vous .

Bonsoir

A tester

Sub compare()
Dim K As Integer, J As Integer
Dim X As Range, Y As Range
Dim Colonnes

  '  2,5,8,11,14,17,20
  Colonnes = Array(2, 5, 8, 11, 14, 17, 20)
  For K = 0 To UBound(Colonnes) - 1
    For J = K + 1 To UBound(Colonnes)
      ' Pour savoir
      ' Range("U" & Rows.Count).End(xlUp).Offset(1, 0) = ":" & Colonnes(K) & " - " & Colonnes(J)
      For Each X In Cells(12, Colonnes(K)).Resize(100, 1)
        If X <> "" Then
          For Each Y In Cells(12, Colonnes(J)).Resize(100, 1)
            If X = Y Then
              Y.ClearContents
            Else
              MsgBox " rien à supprimer entre les colonnes " & Colonnes(K) & " et " & Colonnes(J)
            End If
          Next Y
        End If
      Next X
    Next J
  Next K
End Sub

Merci Banzai !! ... en tout cas j'aurai jamais fais mieux


..j'ai pu tester ton code , mais on ne sort pas de la boucle et le msgbox est repetitif , merci quand meme

Bonjour

J'ai fait cette macro en m'inspirant de la tienne

N'ayant rien de bien concret pour tester je n'ai fait qu'un test rapide

La macro se termine (peut être long)

Joins un fichier pour tester en y indiquant ce qu'il faut faire

Fais des exemples

Bonjour,

A tester pour les résultats, mais la boucle n'est plus sans fin.

Option Explicit
Public Sub compare()
Dim k As Byte, j As Byte
Dim X As Range, Y As Range
    Application.ScreenUpdating = False
    For k = 0 To 6
        For j = 1 To 6
            '  2,5,8,11,14,17,20
            For Each X In Cells(12, 2 + 3 * k).Resize(100, 1)
                ' 5,8,11,14,17,20
                For Each Y In Cells(12, 2 + 3 * j).Resize(100, 1)
                    If X <> "" And X = Y Then
                        Y.ClearContents
                    End If
                Next Y
            Next X
        Next j
    Next k
End Sub

Merci Jean Eric , ca à l'air de bien fonctionner , une question cependant , pouquoi les variable j et k sont des bytes plutot que des integer ?

... j'ai du ajouter une petite ligne à ton code Jean eric de sorte de ne pas avoir le cas k=j en introduisant

Option Explicit
Public Sub compare()
Dim k As Byte, j As Byte
Dim X As Range, Y As Range
    Application.ScreenUpdating = False
    For k = 0 To 6
        For j = 1 To 6
   if k <> j then 
            '  2,5,8,11,14,17,20
           For Each X In Cells(12, 2 + 3 * k).Resize(100, 1)
                ' 5,8,11,14,17,20
               For Each Y In Cells(12, 2 + 3 * j).Resize(100, 1)
                    If X <> "" And X = Y Then
                        Y.ClearContents
                    End If
                Next Y
            Next X
end if 
        Next j
    Next k
End Sub

et ca marche parfaitement , merci à vous deux

Re,

Tout simplement parce que j et k sont compris entre 0 et 6, et qu'une variable déclarée en byte, autorise les valeurs comprises entre 0 et 255.

En fait, je n'ai pas de réponse adaptée, vu le contexte de la macro.

Cdlt.

Rechercher des sujets similaires à "comparaison colonnes deux"