Comparer une cellule par rapport a une plage

BIROULIG

XLDnaute Nouveau
Bonjour, Débutant VBA

J'aimerai savoir s'il est possible de réduire le code suivant (je n'ai mis que 4 test dans l'exemple ):

If (Range("B39").Offset(0, C) = Range("C39") Or Range("B39").Offset(0, C) = Range("E39") Or Range("B39").Offset(0, C) = Range("F39") Or Range("B39").Offset(0, C) = Range("G39")) Then OFSET = 4 Else OFSET = 3

trugarez
 

Paritec

XLDnaute Barbatruc
Re : Comparer une cellule par rapport a une plage

Bonjour Biroulig, le forum
si tu avais mis tout le code on pourrait peut-être comprendre mais là c'est quoi OFSET ????
If (Range("B39").Offset(0, C) = Range("C39") et là le C est égal à quoi ???
Bref si c'est pour comparer B39 à C39 tu mets if range("B39")=range("C39) or etc
a te relire
a+
Papou:)
 

Gael

XLDnaute Barbatruc
Re : Comparer une cellule par rapport a une plage

Bonjour Biroulig, Paritec, le forum,

Tu peux utiliser dans ce cas une instruction "Select case". Le code peut être par exemple:

VB:
Select Case Range("B39").Offset(0, C)
Case Range("C39"), Range("E39"), Range("F39"), Range("G39"), Range("H39"), Range("I39")
OFSET = 4
Case Else
OFSET = 3
End Select

S'il y a plus de cellules à comparer, tu peux enchainer plusieurs "Case":

VB:
Select Case Range("B39").Offset(0, C)
Case Range("C39"), Range("E39"), Range("F39"), Range("G39"), Range("H39"), Range("I39")
OFSET = 4
Case Range("J39"), Range("K39"), Range("L39"), Range("M39"), Range("N39"), Range("O39")
Case Else
OFSET = 3
End Select

Sinon, tu peux utiliser une plage de cellules avec une boucle "for each"

VB:
Dim cel As Range
OFSET = 3
For Each cel In Range("E39:O39")
If cel.Value = Range("B39").Offset(0, C) Then OFSET = 4
Next cel
End Sub

@+

Gael
 

BIROULIG

XLDnaute Nouveau
Re : Comparer une cellule par rapport a une plage

Désolé pour les infos manquantes, je ne l'avais pas vu.J'y ferai plus attention à l'avenir. Sinon "ofset" et "C" sont des variables qui me servent à décaler un renvoie de cellule car l'extrait de code est dans 3 boucles en cascade. Mais la réponse à Gaël avec "select case" s'adapte bien.
Merci BIROULIG
 

BIROULIG

XLDnaute Nouveau
Re : Comparer une cellule par rapport a une plage

Merci pour ta réponse Nickel! Mais j'aimerais une précision sur l'exemple n°2 avec "select case" Pourquoi tu le mets sur 2 lignes il y a une nuance que je n'ai pas saisi ou s'est pour être lisible?
kenavo ar vechall BIROULIG
 

Gael

XLDnaute Barbatruc
Re : Comparer une cellule par rapport a une plage

Bonjour Biroulig, bonjour à tous,

J'ai mis sur deux lignes pour que ce soit plus lisible, d'ailleurs j'ai oublié de mettre après le deuxième Case "OFSET=4". C'était aussi pour mieux montrer l'enchaînement des instructions Case, car on peut en mettre autant qu'il est nécessaire et finir sur un Case Else qui s'exécutera si aucun des Case précédents n'a abouti.

On peut bien sûr mettre plusieurs instructions ou un lancement de macro pour chaque Case:

VB:
Select Case Variable
Case 1
inst1
inst2
case 2, 3, 4
Macro1
Case 5,6
Macro2
Case Else
Inst1
Inst2
Inst2
end select

@+

Gael
 

Discussions similaires

Haut Bas