Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 !

momo2394

XLDnaute Occasionnel
Bonjour

Serait-il possible de raccourcir cette formule
Merci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Cells(17, 10) = Cells(17, 9) - Cells(17, 5)
Cells(18, 10) = Cells(18, 9) - Cells(18, 5)
Cells(19, 10) = Cells(19, 9) - Cells(19, 5)
Cells(20, 10) = Cells(20, 9) - Cells(20, 5)
Cells(21, 10) = Cells(21, 9) - Cells(21, 5)
Cells(22, 10) = Cells(22, 9) - Cells(22, 5)

Cells(26, 10) = Cells(26, 9) - Cells(26, 5)
Cells(27, 10) = Cells(27, 9) - Cells(27, 5)
Cells(28, 10) = Cells(28, 9) - Cells(28, 5)
Cells(29, 10) = Cells(29, 9) - Cells(29, 5)
Cells(30, 10) = Cells(30, 9) - Cells(30, 5)
Cells(31, 10) = Cells(31, 9) - Cells(31, 5)
Cells(32, 10) = Cells(32, 9) - Cells(32, 5)

Cells(34, 10) = Cells(34, 9) - Cells(34, 5)

Cells(36, 10) = Cells(36, 9) - Cells(36, 5)

Cells(38, 10) = Cells(38, 9) - Cells(38, 5)
Cells(39, 10) = Cells(39, 9) - Cells(39, 5)

Cells(54, 10) = Cells(54, 9) - Cells(54, 5)


End Sub
 
Re : Cells

Bonjour


Pourquoi ne pas utiliser de formules ?


Si vraiment tu veux un macro, alors essaie ceci
Code:
Range(Cells(17, 10), Cells(22, 10)).FormulaR1C1 = "=RC[-1]-RC[-5]"
à la place de:
Code:
Cells(17, 10) = Cells(17, 9) - Cells(17, 5)
Cells(18, 10) = Cells(18, 9) - Cells(18, 5)
Cells(19, 10) = Cells(19, 9) - Cells(19, 5)
Cells(20, 10) = Cells(20, 9) - Cells(20, 5)
Cells(21, 10) = Cells(21, 9) - Cells(21, 5)
Cells(22, 10) = Cells(22, 9) - Cells(22, 5)

Je te laisse adapter pour le reste
 
Dernière édition:
Re : Cells

Bonjour à tous
Essayez ceci :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim prm, i, j
   prm = Array(Array(17, 6, 1), Array(26, 7, 1), Array(34, 3, 2), Array(39, 2, 15))
   For i = LBound(prm) To UBound(prm)
      For j = 0 To prm(i)(1) - 1
         Cells(prm(i)(0), 10).Offset(prm(i)(2) * j, 0) = Cells(prm(i)(0), 9).Offset(prm(i)(2) * j, 0) - Cells(prm(i)(0), 5).Offset(prm(i)(2) * j, 0)
      Next j
   Next i
End Sub[/B][/COLOR]
ROGER2327
#4129


Dimanche 8 Absolu 138 (Absinthe, ci devant Saint Alfred, ST)
29 Fructidor An CCXVIII
2010-W37-3T11:49:31Z
 
Re : Cells

Bonsoir

momo2394

Ça fait plaisir d'être transparent 🙄
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("J17:J22,J26:J32,J34,J36,J38:J39").FormulaR1C1 = "=RC[-1]-RC[-5]"
End Sub
 
Dernière édition:
Re : Cells

Re...
(...)
pourrai tu me decortiquer la formule avec explication
pour que je puisse comprendre et surtout apprendre
(...)
Rien de plus simple pour une procédure élémentaire.

On constate que toutes les formules de votre procédure sont identiques au numéro de ligne près.
L'idée qui en découle est d'écrire une unique formule dans laquelle le numéro de ligne serait un paramétre :

Cells(n°_de_ligne, 10) = Cells(n°_de_ligne, 9) - Cells(n°_de_ligne, 5)

Ce qui pourrait donner :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim prm, i, j
   prm = Array(17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 32, 34, 36, 38, 39, 54)
   For i = LBound(prm) To UBound(prm)
      Cells(prm(i), 10) = Cells(prm(i), 9) - Cells(prm(i), 5)
   Next i
End Sub[/B][/COLOR]

Toutefois, l'écriture du tableau prm peut-être fastidieuse s'il y a beaucoup de lignes à traiter.
Or, en observant de plus près vos formules, on constate l'existence de blocs de lignes : faire le calcul pour chaque ligne de 17 à 22 (soit 6 lignes), puis de 26 à 32 (soit 7 lignes), puis de 2 en 2 lignes de 34 à 38 (soit 3 lignes), enfin de 15 en 15 lignes de 39 à 54 (soit 2 lignes).
Ce qui donne l'idée d'écrire la formule pour la première ligne de chaque groupe, puis de lui appliquer le décalage voulu autant de fois que nécessaire :

Cells(n°_de_1ère_ligne_du groupe, 10).Offset(n * décalage) = Cells(n°_de_1ère_ligne_du groupe, 9).Offset(n * décalage) - Cells(n°_de_1ère_ligne_du groupe, 5).Offset(n * décalage)

où n prend successivement les valeurs 0, 1, 2,..., nb_de_lignes_du_groupe -1.

Pour ce faire, on remplace 17, 18, 19, 20, 21, 22 par Array(17, 6, 1), c'est-à-dire Array(n°_de_1ère_ligne_du groupe, nb_de_lignes_du_groupe, décalage). Idem pour les autres groupes.

D'où la procédure :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim prm, i, j
   prm = Array(Array(17, 6, 1), Array(26, 7, 1), Array(34, 3, 2), Array(39, 2, 15))
   For i = LBound(prm) To UBound(prm)
      For j = 0 To prm(i)(1) - 1
         Cells(prm(i)(0), 10).Offset(prm(i)(2) * j, 0) = Cells(prm(i)(0), 9).Offset(prm(i)(2) * j, 0) - Cells(prm(i)(0), 5).Offset(prm(i)(2) * j, 0)
      Next j
   Next i
End Sub[/B][/COLOR]

Quod erat demonstrandum.

Bon courage !​
ROGER2327
#4131


Dimanche 8 Absolu 138 (Absinthe, ci devant Saint Alfred, ST)
29 Fructidor An CCXVIII
2010-W37-3T19:57:47Z

____________________________
P.s. : Bonjour Staple1600.
 
Dernière édition:
- 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
9
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…