Comparer une cellule par rapport a une plage

  • Initiateur de la discussion Initiateur de la discussion BIROULIG
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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🙂
 
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
 
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
663
P
Réponses
4
Affichages
1 K
P
J
Réponses
22
Affichages
3 K
jui42
J
Réponses
1
Affichages
1 K
M
Réponses
7
Affichages
1 K
Menstru LH
M
M
Réponses
2
Affichages
7 K
Magicdog36
M
G
Réponses
1
Affichages
855
Retour