Cellules en double dans des lignes différentes

SDS

XLDnaute Nouveau
Bonjour,

Voici ma demande : Comment affiché en N et 0 les lignes en double, je m'explique, de A à E chaque cellules à un chiffres ou un nombre, parfois un ligne ce ressemble à 3 ou 4 cellules près. Donc j'aimerais trouvé une solution pour qu'en N soit indiqué les lignes ayant en point commun 3 chiffres ou nombres par rapport à une autre ligne et en O le même principe mais pour 4 chiffres ou nombres. De F à M sont intégré d'autre données.

Bien que mon Excel et la version 2004 et sur Mac, je ne pense pas que vos réponses soit incompatibles avec cette version.

Vous en remerciant
 

Pièces jointes

  • Comparaison I.xls
    29.5 KB · Affichages: 31

Grand Chaman Excel

XLDnaute Impliqué
Re : Cellules en double dans des lignes différentes

Bonjour SDS et bienvenue sur le forum,
Un essai :
VB:
'Hypothèse que les nombres dans A et E sont en ordre croissant.

Sub LignesEnDouble3()
   Dim Dict
   Dim ar
   Dim i As Integer, j As Integer
   Dim Temp As String
   
   ar = Sheets(1).Cells(1).CurrentRegion.Value
   Set Dict = CreateObject("Scripting.Dictionary")
   

   For i = 2 To UBound(ar, 1)
      For j = 1 To 3
         Temp = ar(i, j) & Chr(2) & ar(i, j + 1) & Chr(2) & ar(i, j + 2)
         If Not Dict.exists(Temp) Then
            Dict.Add Temp, i
         Else
            Sheets(1).Cells(i, 13) = "3 en commun"
         End If
      Next j
   Next i
End Sub


Sub LignesEnDouble4()
   Dim Dict
   Dim ar
   Dim i As Integer, j As Integer
   Dim Temp As String
   
   ar = Sheets(1).Cells(1).CurrentRegion.Value
   Set Dict = CreateObject("Scripting.Dictionary")
   

   For i = 2 To UBound(ar, 1)
      For j = 1 To 2
         Temp = ar(i, j) & Chr(2) & ar(i, j + 1) & Chr(2) & ar(i, j + 2) & ar(i, j + 3)
         If Not Dict.exists(Temp) Then
            Dict.Add Temp, i
         Else
            Sheets(1).Cells(i, 14) = "4 en commun"
         End If
      Next j
   Next i
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Cellules en double dans des lignes différentes

Bonjour SDS, Grand Chaman Excel,

Un essai avec deux fonctions personnalisées. L'une indique si la ligne comporte exactement xNbrCommun nombres en commun avec une ou plusieurs autres lignes, l'autre indique les numéros de lignes avec exactement xNbrCommun nombres en commun.
.
  1. Function LigneCommune(xligne As Range, xtablo As Range, xNbrCommun) as Boolean
  2. Function LigneCommuneN(xligne As Range, xtablo As Range, xNbrCommun) as string

  • où xligne est la plage de la ligne à comparer
  • où xtablo est la plage du tableau de comparaison
  • où xNbrCommunes le nombre de valeurs communes


Le code dans module1:
VB:
Function LigneCommune(xligne As Range, xtablo As Range, xNbrCommun) As Boolean
Dim tablo, ligne, i&, j&, k&, k2&, i1&, j1&, Nbr&, tot&, sauf&
Application.Volatile
ligne = xligne.Value
tablo = xtablo.Value
sauf = xligne.Row - xtablo.Row + 1
k2 = UBound(tablo)
i1 = UBound(tablo, 2): j1 = UBound(ligne, 2)
For k = 1 To k2
  If k <> sauf Then
    Nbr = 0
    i = 1: j = 1
    Do While i <= i1 And j <= j1
      Select Case Sgn(tablo(k, i) - ligne(1, j))
        Case -1
          i = i + 1
        Case 0
          Nbr = Nbr + 1
          i = i + 1: j = j + 1
        Case 1
          j = j + 1
      End Select
    Loop
    If Nbr = xNbrCommun Then
      LigneCommune = True
      Exit Function
    End If
  End If
Next k

End Function

Function LigneCommuneN(xligne As Range, xtablo As Range, xNbrCommun) As String
Dim tablo, ligne, i&, j&, k&, k2&, i1&, j1&, Nbr&, tot&, sauf&
Application.Volatile
ligne = xligne.Value
tablo = xtablo.Value
sauf = xligne.Row - xtablo.Row + 1
k2 = UBound(tablo)
i1 = UBound(tablo, 2): j1 = UBound(ligne, 2)
For k = 1 To k2
  If k <> sauf Then
    Nbr = 0
    i = 1: j = 1
    Do While i <= i1 And j <= j1
      Select Case Sgn(tablo(k, i) - ligne(1, j))
        Case -1
          i = i + 1
        Case 0
          Nbr = Nbr + 1
          i = i + 1: j = j + 1
        Case 1
          j = j + 1
      End Select
    Loop
    If Nbr = xNbrCommun Then
      LigneCommuneN = LigneCommuneN & "," & k + xtablo.Row - 1
    End If
  End If
Next k
If Left(LigneCommuneN, 1) = "," Then LigneCommuneN = Mid(LigneCommuneN, 2)
End Function

Nota: les nombres dans chaque ligne du tableau doivent être en ordre croisant.
 

Pièces jointes

  • Comparaison lignes tableau v1.xls
    52.5 KB · Affichages: 37
Dernière édition:

SDS

XLDnaute Nouveau
Re : Cellules en double dans des lignes différentes

Bonsoir,

Cette réponse bien que pertinente, n'est pas ce que je recherche. En fait chaque lignes comporte soit des chiffres ou des nombres croissant. Ma question porte sur les suites communes, en exemple si 3 (chiffres ou nombres) ce retrouve sur plusieurs lignes l'indiqué en N et idem pour 4 (chiffres ou nombres) en O.

En espérant avoir été clair...

Vous en remerciant.


Cordialement
 

Discussions similaires