Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre plage

Daroumx

XLDnaute Nouveau
Bonjour le forum,


Voila je cherche à voir si une cellule dans une plage de donnée corresponds à l'une des cellules d'une autre plage de donnée , Sans passer par 2 boucles for each qui prennent un peu trop de temps à mon avis comme j'ai fait ici.

Code:
Dim derl as long
Dim cel As Range
Dim cell As Range
Dim PLAGED1 As Range
derl = Range("A1000000").End(xlup).row
Set PLAGE = Union(Range("AL2:AL" & derl), Range("AN2:AN" & derl), Range("AP2:AP" & derl), Range("AR2:AR" & derl))
For Each cel In Range("N1:AJ1")
For Each cell In PLAGE
If cell = cel Then
cel.Offset((cell.Row - 1), 0).Value = cell.Offset(0, -1).Value
End If
Next cell
Next cel


J'ai essayé avec ce code mais ça me renvoie une erreur

Code:
Dim derl as long
Dim cell As Range
Dim PLAGE_D1 As Range
Dim PLAGE_D2 as Range
derl = Range("A1000000").end(xlup).row
SET PLAGE_D2 = Range("N1:AJ1")
Set PLAGE_D1 = Union(Range("AL2:AL" & derl), Range("AN2:AN" & derl), Range("AP2:AP" & derl), Range("AR2:AR" & derl))
For Each cell In PLAGE_D1
If cell = PLAGE_D2.Cells.Value Then
PLAGE_D2.Cells.Offset((cell.Row - 1), 0).Value = cell.Offset(0, -1).Value
End If
Next cell



Je sais pas si j'ai été bien clair, si vous avez besoin de plus de clarifications je serais là , en vous remerciant d'avance pour votre précieuse aide. ;)
 

Pierrot93

XLDnaute Barbatruc
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Bonjour,

regarde du coté de la méthode "intersect", exemple ci-dessous à adapter à ton projet :
Code:
If Not Intersect(Range("A1"), Range("A1:A10")) Is Nothing Then MsgBox "dans la plage"
bon après midi
@+
 

Daroumx

XLDnaute Nouveau
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Bonjour Pierrot93,


Merci pour ta réponse je n'ai jamais essayé de travailler avec intersect mais ça semble coïncider avec ce que je cherche je vais adapter dès maintenant merci encore pour ta réponse.

A+
;)
 

Daroumx

XLDnaute Nouveau
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Re Pierrot93, le forum,

J'ai pu voir comment la méthode intersect marchait mais finalement ça ne corresponds pas à ce que je cherche.Je crois que je me suis mal expliqué donc je reformule :

J'essaie de voir si la valeur d'une variable "Cell" de type range dans une plage : Union(Range("AL2:AL" & derl), Range("AN2:AN" & derl), Range("AP2:AP" & derl), Range("AR2:AR" & derl)) est égale à la valeur de l'une des cellules de la plage Range("N1:AJ1"). Donc il n'y a pas vraiment d'intersection entre les 2 plages de cellules.

Désolé je me suis mal-exprimé dans mon premier message.Mais ça m'a permis de découvrir la méthode intersect donc merci =).
;)
 

Pierrot93

XLDnaute Barbatruc
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Re,

exemple à finir d'adapter :
Code:
Option Explicit
Sub test()
Dim cell As Range, PLAGE_D1 As Range, PLAGE_D2 As Range, derl As Long, x As Range
derl = Cells(Rows.Count, 1).End(xlUp).Row
Set PLAGE_D2 = Range("N1:AJ1")
Set PLAGE_D1 = Union(Range("AL2:AL" & derl), Range("AN2:AN" & derl), Range("AP2:AP" & derl), Range("AR2:AR" & derl))
For Each cell In PLAGE_D1
    Set x = PLAGE_D2.Find(cell, , xlValues, xlWhole, , , False)
    If Not x Is Nothing Then MsgBox "trouvé en " & x.Address
Next cell
End Sub
 

Daroumx

XLDnaute Nouveau
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Re Pierrot93, le forum,

J'ai essayé avec la méthode find mais vu que c'est la 1ère fois que je l'utilise j'ai un message d'erreur 1004 voici mon code ... pas sur de l'avoir bien appliqué :confused::

Code:
Sub test()
Application.ScreenUpdating = False
Dim PlageRECH As Range
Dim derl As Long
Dim PlageBase As Range
Dim cell As Range
derl = Range("A1000000").End(xlUp).Row
Set PlageRECH = Union(Range("AL2:AL" & derl), Range("AN2:AN" & derl), Range("AP2:AP" & derl), Range("AR2:AR" & derl))
Set PLAGEVALRECHERCHE = Range("N1:AJ1")
For Each cell In Range("N2:AJ" & derl)
cell = PlageRECH.Find(PLAGEVALRECHERCHE.Value, , , xlWhole, xlByRows, xlNext).Offset(0, -1)
Next
End Sub


Merci encore pour ton aide.
 

Daroumx

XLDnaute Nouveau
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Re Pierrot93,

Désolé je viens de voir ton message, finalement je n'arrive pas à reproduire le même résultat avec une méthode find qu'avec ce code même si je trouve qu'il met un peu de temps environ 2 min je vais chercher encore plus je te remercie pour ton aide.

Voici le code que j'utilise pour l'instant :

Code:
Sub test()

dim derl as long
Dim cel As Range
Dim cell As Range
Dim PLAGE As Range
derl = Range("A1000000").End(xlup).row
Set PLAGE = Union(Range("AL2:AL" & derl), Range("AN2:AN" & derl), Range("AP2:AP" & derl), Range("AR2:AR" & derl))
For Each cel In Range("N1:AJ1")
For Each cell In PLAGE
If cell.value = cel.value Then
cel.Offset((cell.Row - 1), 0).Value = cell.Offset(0, -1).Value
End If
Next cell
Next cel
end sub

Bonne fin de journée
 

Pierrot93

XLDnaute Barbatruc
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Re,

regarde ceci, pas pas sur de l'action que tu veux faire si valeur trouvée :
Code:
Option Explicit
Sub test()
Dim cell As Range, PLAGE_D1 As Range, PLAGE_D2 As Range, derl As Long, x As Range
derl = Cells(Rows.Count, 1).End(xlUp).Row
Set PLAGE_D2 = Range("N1:AJ1")
Set PLAGE_D1 = Union(Range("AL2:AL" & derl), Range("AN2:AN" & derl), Range("AP2:AP" & derl), Range("AR2:AR" & derl))
For Each cell In PLAGE_D1
    Set x = PLAGE_D2.Find(cell, , xlValues, xlWhole, , , False)
    If Not x Is Nothing Then x.Offset((cell.Row - 1), 0).Value = cell.Offset(0, -1).Value
Next cell
End Sub

A noter, je suis resté sur tespremiers noms de variables....
 

Daroumx

XLDnaute Nouveau
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Re Pierrot93,


Je viens de tester ça marche et ça donne le même résultat en 42 secondes mille mercis pas trop compris comment ça fonctionne je vais tester étape par étape pour mieux comprendre encore merci !

A+
 

Pierrot93

XLDnaute Barbatruc
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Re,

tu peux peut être accélérer le code ainsi :
Code:
Option Explicit
Sub test()
Dim cell As Range, PLAGE_D1 As Range, PLAGE_D2 As Range, derl As Long, x As Range
With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    .EnableEvents = False
    derl = Cells(Rows.Count, 1).End(xlUp).Row
    Set PLAGE_D2 = Range("N1:AJ1")
    Set PLAGE_D1 = Union(Range("AL2:AL" & derl), Range("AN2:AN" & derl), Range("AP2:AP" & derl), Range("AR2:AR" & derl))
    For Each cell In PLAGE_D1
        Set x = PLAGE_D2.Find(cell, , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then x.Offset((cell.Row - 1), 0).Value = cell.Offset(0, -1).Value
    Next cell
    .EnableEvents = True
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
End With
 

Daroumx

XLDnaute Nouveau
Re : Voir si une cellule dans une plage corresponds à l'une des cellules d'une autre

Bonjour pierrot93 , le forum

wow ça met environ 12 sec c'est grâce à? :


Code:
With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
    .EnableEvents = False
[/CODE

en tout cas mille mercis :D
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 082
Membres
103 457
dernier inscrit
fab2614