XL 2016 Comparer les valeurs d'une plage de cellule à une ligne .

album40

XLDnaute Nouveau
Bonsoir le forum

J'ai une feuille Excel sur laquelle
J'aimerais comparer les valeurs des cellules ("B5:K19") aux valeurs des cellules ("B2:K2").
Ensuite copier ces valeurs (ligne par ligne) qui répondent à mes critères ( de comparaison) dans les cellules ("N5:W19").
Critères de Choix des valeurs : Les valeurs ("B5:K5") seront choisi si
Valeurs ("B5:K19") = Valeurs ("B2:K2")
Valeurs ("B5:K19") = Valeurs ("B2:K2") +1
Valeurs ("B5:K19") = Valeurs ("B2:K2") -1


Je prend l'exemple réel de la Cellule B5=105 comparer aux cellules ("B2:K2")
j'ai le résultat (105) dans les cellules ("N5:W5")


J'ai insérer un code mais je n'arrive pas à l'adapter à tous les cellules ("B2:K2)
aidez moi SVP.
 

Pièces jointes

  • EXO 1.xlsm
    20.2 KB · Affichages: 17

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @album40 :),

Inutile d'invoquer du VBA, une simple formule en N5 basée sur un SOMMEPROD suffit.
Cette formule sera à recopier vers la droite et vers le bas jusqu'en W19.

Comme apparemment c'est un exercice, je vous laisse un peu chercher la formule ;) :
VB:
=SI(SOMMEPROD( (B5 >= (xxx-1) ) * (B5 <= (xxx+1) ) ) > zzz ; B5; "")
Il suffit de trouver xxx et zzz...

Pour la même chose en VBA:
il suffira de placer la formule ci-dessus dans les cellules N5:W19 puis de transformer les résultats de ces formules en valeurs.
Code:
Sub CelluleOK()
   With Feuil1
      .Range("n5").FormulaLocal = "=SI(SOMMEPROD( (B5 >= (xxx-1) ) * (B5 <= (xxx+1) ) ) > zzz ; yyy ; """")"
      .Range("n5").Copy
      .Range("n5:w19").PasteSpecial xlPasteFormulas
      .Range("n5:w19") = Range("n5:w19").Value
   End With
End Sub
 
Dernière édition:

Jacky67

XLDnaute Barbatruc
Bonsoir le forum

J'ai une feuille Excel sur laquelle
J'aimerais comparer les valeurs des cellules ("B5:K19") aux valeurs des cellules ("B2:K2").
Ensuite copier ces valeurs (ligne par ligne) qui répondent à mes critères ( de comparaison) dans les cellules ("N5:W19").
Critères de Choix des valeurs : Les valeurs ("B5:K5") seront choisi si
Valeurs ("B5:K19") = Valeurs ("B2:K2")
Valeurs ("B5:K19") = Valeurs ("B2:K2") +1
Valeurs ("B5:K19") = Valeurs ("B2:K2") -1


Je prend l'exemple réel de la Cellule B5=105 comparer aux cellules ("B2:K2")
j'ai le résultat (105) dans les cellules ("N5:W5")


J'ai insérer un code mais je n'arrive pas à l'adapter à tous les cellules ("B2:K2)
aidez moi SVP.
Bonjour,
Une proposition sans VBA en PJ

**Hello mapomme
 

Pièces jointes

  • EXO 1 v1.xlsm
    17.4 KB · Affichages: 5

Jacky67

XLDnaute Barbatruc
Bonsoir @album40 :),

Inutile d'invoquer du VBA, une simple formule en N5 basée sur un SOMMEPROD suffit.
Cette formule sera à recopier vers la droite et vers le bas jusqu'en W19.

Comme apparemment c'est un exercice, je vous laisse un peu chercher la formule ;) :
VB:
=SI(SOMMEPROD( (B5 >= (xxx-1) ) * (B5 <= (xxx+1) ) ) > zzz ; B5; "")
Il suffit de trouver xxx et zzz...

Pour la même chose en VBA:
il suffira de placer la formule ci-dessus dans les cellules N5:W19 puis de transformer les résultats de ces formules en valeurs.
Code:
Sub CelluleOK()
   With Feuil1
      .Range("n5").FormulaLocal = "=SI(SOMMEPROD( (B5 >= (xxx-1) ) * (B5 <= (xxx+1) ) ) > zzz ; yyy ; """")"
      .Range("n5").Copy
      .Range("n5:w19").PasteSpecial xlPasteFormulas
      .Range("n5:w19") = Range("n5:w19").Value
   End With
End Sub

Hello mapomme
Ou encore :) :)
VB:
Sub comparai2nbresJJ()
    [n5:w19].Formula = "=IF(OR(COUNTIF($B$2:$K$2,B5),COUNTIF($B$2:$K$2,b5+1),COUNTIF($B$2:$K$2,b5-1)),b5,"""")"
    [n5:w19].Value = [n5:w19].Value
End Sub
Code:
🥴
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Je veux identifier à quelle moment il faut utiliser les codes VBA ou formules.


Pour ma formule en N5 (fichier .xlsx):
VB:
=SI(SOMMEPROD( (B5 >= ($B$2:$K$2-1)) * (B5 <= ($B$2:$K$2+1))  )>0;B5;"")

Pour le code (dans module1 du fichier .xlsm) :
Code:
Sub CelluleOK()
   With Feuil1
      .Range("n5").FormulaLocal = "=SI(SOMMEPROD( (B5 >= ($B$2:$K$2-1)) * (B5 <= ($B$2:$K$2+1))  )>0;B5;"""")"
      .Range("n5").Copy
      .Range("n5:w19").PasteSpecial xlPasteFormulas
      .Range("n5:w19") = Range("n5:w19").Value
   End With
End Sub

Je veux identifier à quelle moment il faut utiliser les codes VBA ou formules.
Il n'y a pas de réponse nette. C'est en fonction de la difficulté à trouver une formule ou non, de son penchant 'naturel' à élaborer des formules ou concevoir du code. Dans certain situations, le VBA est interdit par l'administrateur au sein de l'entreprise.
Si vous parcourez le forum, vous vous rendrez compte que les solutions pour une même question sont à la fois par formules pour certains répondants et par VBA pour d'autres répondants.

nota : bonsoir @Jacky67 :)😊
nota : bonne-nuit @Staple1600 😴😴😴
 

Pièces jointes

  • album40- EXO 1- v1.xlsm
    18.9 KB · Affichages: 3
  • album40- EXO 1- v1.xlsx
    15.4 KB · Affichages: 4
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

=>Jacky67
Ou encore
VB:
Sub comparai2nbresJJ()
[n5:w19] = "=IF(OR(COUNTIF($B$2:$K$2,B5),COUNTIF($B$2:$K$2,b5+1),COUNTIF($B$2:$K$2,b5-1)),b5,"""")"
[n5:w19] = [n5:w19].Value
End Sub
NB: C'est juste parce j'avais besoin d'écrire une dernière fois du VBA avant d'aller au dodo ;)
(C'est un rituel: un petit coup de VBA, un petit coup de dentifrice, un petit pissou et sous la couette
Pas d'inquiétude: oui, je me lave bien les mains après la miction, et je dors avec mon masque
(Ca m'entraine pour le prochain confinement)
 

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 867
Membres
103 007
dernier inscrit
salma_hayek