Macro avec fonction recherche

  • Initiateur de la discussion Cyrille68
  • Date de début
C

Cyrille68

Guest
Bonjour,

Je viens de créer une macro : si tu trouves les memes valeurs dans les 2 series alors appliquer le fond gris a la cellule dans la deuxième série.

Dans le test que j'ai fait, les valeurs sont presques toutes les memes et il ne me grise qu'une cellule... la dernière...

Comment faire pour que la recherche se fasse sur toute la série de données ??

Merci pour votre aide

Cyrille

With Worksheets("Resultat").Range("b2:b10")
Set c = .Find(Worksheets("Data").Range("b2:b10").Value, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End Sub
 

Pièces jointes

  • macrorecherche.xls
    29 KB · Affichages: 280
  • macrorecherche.xls
    29 KB · Affichages: 275
  • macrorecherche.xls
    29 KB · Affichages: 270
@

@+Thierry

Guest
Salut Cyrille, le Forum

Donrénavant suite aux innombrables attaques virales de ces derniers jours, je n'ai pas le droit de télécharger les pièces jointes depuis le bureau, donc je ne me base que sur la macro que tu as indiquée...

Si je comprends bien "si tu trouves les mêmes valeurs" tu cherches une occurrence de la valeur complète de la cellule, et dans ce cas Find n'est pas vraiment nécessaire vu qu'il va chercher dans tout ou partie de la String... De plus rentrer une Plage pour Find ne ce fait pas de cette manière.

Je ferai tout simplement comme ceci :

Option Explicit
Option Compare Text 'Si tu ne veux pas de Match Case

Sub Recherche()
Dim PlageSource As Range
Dim PlageCible As Range
Dim CellSource As Range, CellCible As Range

Set PlageSource = ThisWorkbook.Sheets("Data").Range("b2:b10")
Set PlageCible = ThisWorkbook.Sheets("Resultat").Range("b2:b10")

For Each CellSource In PlageSource
For Each CellCible In PlageCible
If CellCible = "" Then GoTo Nexte 'Si tu veux rien si cellule vide
If CellSource = CellCible Then CellCible.Interior.Pattern = xlPatternGray50
Nexte:
Next CellCible
Next CellSource
End Sub


Bonne Fin d'aprèm
@+Thierry
 
@

@Christophe@

Guest
Bonjour Cyrille

Remplace ton code par le code suivant:

Sub recherche()
Dim c As Range
Dim d As Range

For Each c In Worksheets("Resultat").Range("b2:b10")
For Each d In Worksheets("data").Range("b2:b10")
If c.Value = d.Value Then c.Interior.Pattern = xlPatternGray50
Next d
Next c
End Sub


Bonne journée

@Christophe@
 
@

@+Thierry

Guest
Héhéhé Salut @Xtoph@

Même problème, Même solution !! Juste le style est un peu différent et les Options (Pour les Matching des MAJ)... Mais le résultat et le même... (Jusqu'au nom de la macro ;-))

Bon Aprèm à Toi !

@+Thierry
 
C

C@thy

Guest
Bonjour Cyrille sixty-eight,

tout d'abord, pour moi, la meilleure macro consiste à ne pas en écrire, donc tu peux très bien t'en sortir avec un format mise en forme conditionnelle.

Petite question : tes valeurs identiques doivent etre au même endroit dans la plage?

si oui, et si tu veux absolument une macro, essaie ça

For i = 2 To 10
If Worksheets("Resultat").Range("b" & i) = Worksheets("Data").Range("b" & i) Then
Worksheets("Data").Range("b" & i).Interior.Pattern = xlPatternGray50
End If
Next

BipBip.gif
 
J

Jean-Marie

Guest
Bonjour, tout le monde

Voici un code, qui utilise l'instruction CountIf, il y a plus qu'une boucle

Sub Macro1()
Dim CellControle As Range
For Each CellControle In Worksheets("Resultat").Range("b2:b10")
If Application.CountIf(Worksheets("Data").Range("b2:b10"), CellControle) > 0 Then
CellControle.Interior.Pattern = xlPatternGray50
End If
Next
End Sub

Bonne journée à vous tous.

@+Jean-Marie
 

Discussions similaires

Statistiques des forums

Discussions
314 121
Messages
2 106 128
Membres
109 495
dernier inscrit
jerome bonneau