Comparaison 2 colonnes...

  • Initiateur de la discussion Julie75
  • Date de début
J

Julie75

Guest
Bonjour a tous,

je souhaite comparer deux colonnes de donnees A et B, avec 2 boucles for imbriquees (1 pour chaque colonne )et avec des if pour la comparaison. Je souhaite renvoyer une valeur dans une autre, si le if ne detecte pas que l'element x de la colonne A est present dans la colonne B. autrement dit, si l'element x de la colonne A n'existe nulle part dans la colonne B, alors la variable var1 recoit la valeur 1.
par contre si l'element x de la colonne A est present quelque part dans la colonne B (quelque soit la lignes), alors la variable var2 recoit la valeur 2.

La variable x pourra etre utilisee pour stocker temporairement, et une par une, toutes les valeurs des elements de la colonne A.
et par exemple la variable y pourra etre utilisee pour stocker temporairement, et une par une, toutes les valeurs des elements de la colonne b.

j'aimerais une code du genre:
if x 'n'existe nulle part dans' y then
var1=1

Quelqu'un a une idee sur la maniere de coder ceci simplement ?



Merci d'avance pour vos reponses.
bisou et bonne journee.
:eek: :eek:
 
F

flyonets

Guest
Bonjour
Essaie ce code à placer dans un module
en tete de module tu mets
option base 1
Sub Sans_double()
' HARMONISER 2 LISTES SANS DOUBLON AVEC DES ARRAYS
' TRAITEMENT DE 2 COLONNES AVEC TRI CROISSANT
' LES 2 COLONNES SONT DANS UNE MÊME FEUILLE
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Dim Y&, Z&, I&, J&, N&, Flag As Boolean
Dim CombArray() As Variant, Tempo As Variant, Cll As Range
Dim Plage1 As Range, Plage2 As Range, Sortie As Range
With Feuil3
Y = Range('A65536').End(xlUp).Row
Z = Range('B65536').End(xlUp).Row
'RESET DU TRAITEMENT PRECEDENT
Range('F3:F10000').ClearContents
'DÉFINITION DES PLAGES À TRAITER
Set Plage1 = Range('A3:A' & Y)
Set Plage2 = Range('B3:B' & Z)
Set Sortie = Range('F3')

' DIMENSIONNEMENT DU TABLEAU A 2 DIMENSIONS
N = Plage1.Cells.Count + Plage2.Cells.Count
ReDim CombArray(N, 2)

' CHARGEMENT DES 2 LISTES DE VALEURS DANS LE TABLEAU.
For Each Cll In Plage1
I = I + 1
CombArray(I, 1) = Cll.Value
Next Cll
For Each Cll In Plage2
I = I + 1
CombArray(I, 1) = Cll.Value
Next Cll

' BUBBLE SORT TRI CROISSANT DU TABLEAU DES VALEURS.
Flag = False
While Not Flag
Flag = True
For I = 1 To UBound(CombArray) - 1
If CombArray(I, 1) > CombArray(I + 1, 1) Then
Tempo = CombArray(I, 1)
CombArray(I, 1) = CombArray(I + 1, 1)
CombArray(I + 1, 1) = Tempo
Flag = False
Exit For
End If
Next I
Wend

' IDENTIFICATION DES DOUBLONS DANS LE TABLEAU . TRUE = DOUBLONS
'LA DEUXIEME DIMENSION DU TABLEAU FLAGUE LES DOUBLONS EN TRUE
CombArray(1, 2) = False
For I = 1 To UBound(CombArray) - 1
If CombArray(I, 1) = CombArray(I + 1, 1) Then
CombArray(I + 1, 2) = True
Else
CombArray(I + 1, 2) = False
End If
'Debug.Print CombArray(I, 2)
Next I

' RESTITUTION DE LA LISTE SANS DOUBLON DANS LA ZONE SORTIE
' LE CRITERE DE RESTITUTION EST= FALSE
J = 0
For I = 1 To UBound(CombArray)
'If Not CombArray(I, 2) Then
If CombArray(I, 2) = False Then
Sortie.Offset(J, 0).Value = CombArray(I, 1)
J = J + 1
End If
Next I
Cells(5, 8) = J
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Erase CombArray
Set Plage1 = Nothing: Set Plage2 = Nothing: Set Sortie = Nothing
Tempo = 0
.Activate
End With
End Sub
Bonne journée
 
A

AV

Guest
Salut,

S'il s'agit, à partir de 2 listes, d'en faire une sans doublon, plus rapide (surtout s'il y a beaucoup de valeurs) qu'une quelconque boucle et la construction d'un tabeau en mémoire, est la réunion des 2 listes et l'extraction sans doublons par le filtre élaboré

AV [aaa]
 

Gorfael

XLDnaute Barbatruc
Salut à tous
Code:
Sub Macro1()
Dim Flag_Présent As Boolean
Dim X As Long
Dim Y As Long
For X = 1 To Range('A1').End(xlDown).Row
    For Y = 1 To Range('B65535').End(xlUp).Row
        If Cells(X, 1) = Cells(Y, 2) Then
            Flag_Présent = True
            Exit For
        End If
    Next Y
    If Flag_Présent Then
        Flag_Présent = False
    Else
        Cells(X, 3) = 1
    End If
Next X
End Sub
S'il y a quelque chose que tu ne comprends pas, n'hésite pas à demander.
A+

PS Prouver l'existence de quelque chose est toujours plus facile que de prouver la non-existence, d'où la variable Flag_Présent

Message édité par: Gorfael, à: 26/05/2006 10:59
 
A

AV

Guest
Re,

'...PS Prouver l'existence de quelque chose est toujours plus facile que de prouver la non-existence...''

Hum, hum...et si tu nous faisais une démo de cet axiome avec .. Dieu ?

;-)
AV [aaa]
 

Gorfael

XLDnaute Barbatruc
AV écrit:
Re,

'...PS Prouver l'existence de quelque chose est toujours plus facile que de prouver la non-existence...''

Hum, hum...et si tu nous faisais une démo de cet axiome avec .. Dieu ?
;-)
AV [aaa]
salut
Est si tu prouvais qu'il n'existe pas ? Vaste débat philosophique. On peut prouver que, bien hors des lois connues de la nature, l'ornythorinque existe, mais essaies de prouver que les drgons n'existent pas ? C'est sur le fait que tu ne peux pas prouver que dieu n'existe pas que les religions s'appuient.
Mais on est hachement loin d'Excel là, non ,
A+
 

Discussions similaires

Réponses
7
Affichages
388
Réponses
2
Affichages
171

Statistiques des forums

Discussions
312 392
Messages
2 088 004
Membres
103 693
dernier inscrit
vincs