XL 2016 vba - simplification d'un code

douguy

XLDnaute Junior
bonjour à tous et bonne année !!!

j'ai ce code qui me permet de récrire une formule dans une cellule en fonction d'un besoin avec un togglebutton!
Je pense qu'on peut le simplifier pour accélérer le processus (sachant que je dois récrire 24 plages au total)
mais je ne sais pas comment faire !!
Des idées ?

Bon week end à tous

Range("i21").FormulaLocal = "=SI((B21="""");"""";INDEX(CHAMPS_INDIV;EQUIV(B21;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("i21").AutoFill Destination:=Range("I21:I51"), Type:=xlFillValues
Range("w21").FormulaLocal = "=SI((p21="""");"""";INDEX(CHAMPS_INDIV;EQUIV(p21;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("w21").AutoFill Destination:=Range("w21:w51"), Type:=xlFillValues
Range("AK21").FormulaLocal = "=SI((AD21="""");"""";INDEX(CHAMPS_INDIV;EQUIV(AD21;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("AK21").AutoFill Destination:=Range("AK21:AK51"), Type:=xlFillValues
Range("AY21").FormulaLocal = "=SI((AR21="""");"""";INDEX(CHAMPS_INDIV;EQUIV(AR21;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("AY21").AutoFill Destination:=Range("AY21:AY51"), Type:=xlFillValues
Range("BM21").FormulaLocal = "=SI((BF21="""");"""";INDEX(CHAMPS_INDIV;EQUIV(BF21;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("BM21").AutoFill Destination:=Range("BM21:BM51"), Type:=xlFillValues
Range("CA21").FormulaLocal = "=SI((BT21="""");"""";INDEX(CHAMPS_INDIV;EQUIV(BT21;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("CA21").AutoFill Destination:=Range("CA21:CA51"), Type:=xlFillValues
Range("i58").FormulaLocal = "=SI((B58="""");"""";INDEX(CHAMPS_INDIV;EQUIV(B58;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("i58").AutoFill Destination:=Range("I58:I88"), Type:=xlFillValues
Range("w58").FormulaLocal = "=SI((p58="""");"""";INDEX(CHAMPS_INDIV;EQUIV(p58;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("w58").AutoFill Destination:=Range("w58:w88"), Type:=xlFillValues
Range("AK58").FormulaLocal = "=SI((AD58="""");"""";INDEX(CHAMPS_INDIV;EQUIV(AD58;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("AK58").AutoFill Destination:=Range("AK58:AK88"), Type:=xlFillValues
Range("AY58").FormulaLocal = "=SI((AR58="""");"""";INDEX(CHAMPS_INDIV;EQUIV(AR58;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("AY58").AutoFill Destination:=Range("AY58:AY88"), Type:=xlFillValues
Range("BM58").FormulaLocal = "=SI((BF58="""");"""";INDEX(CHAMPS_INDIV;EQUIV(BF58;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("BM58").AutoFill Destination:=Range("BM58:BM88"), Type:=xlFillValues
Range("CA58").FormulaLocal = "=SI((BT58="""");"""";INDEX(CHAMPS_INDIV;EQUIV(BT58;DATE_INDIV;0);EQUIV(DATE1;SAISIE_INDIV;0)))"
Range("CA58").AutoFill Destination:=Range("CA58:CA88"), Type:=xlFillValues
 

Dranreb

XLDnaute Barbatruc
Bonsoir.

Votre classeur ne porte pas le code cité dans votre poste #1, lequel semble pouvoir s'écrire comme ça :
VB:
Dim C As Long
For C = 0 To 10
   Range("I21:I51").Offset(, 14 * C).FormulaR1C1 = _
      "=IF(RC[-7]="""","""",INDEX(CHAMPS_INDIV,MATCH(RC[-7],DATE_INDIV,0),MATCH(DATE1,SAISIE_INDIV,0)))"
   Next C
 

douguy

XLDnaute Junior
bonjour DRANREB

Merci pour votre réponse.
Je suis trop novice en VBA (vous l'aurez surement compris en voyant le code que j'ai pondu :) )
du coup je ne maîtrise pas du tout le concept de boucle.

Je joins un fichier d'exemple exactement comme ce dont j'ai besoin.
j'ai juste plus de plages dans le fichier final.

Merci pour l'aide !

bonne journée
 

Pièces jointes

  • demo.xlsm
    20.6 KB · Affichages: 24

Dranreb

XLDnaute Barbatruc
Bonjour.
Qu'est ce que vous ne comprenez pas dans les boucles For/Next ?
Vous pourriez quand appliquer le principe de mettre la FormulaR1C1 sur toute la plage au lieu de la mettre seulement sur la 1ère cellule et de faire un AutoFill derrière.
 

Dranreb

XLDnaute Barbatruc
VB:
Private Sub ToggleButton1_Click()
Dim C As Long
If ToggleButton1.Value Then
   ToggleButton1.Caption = "pouette"
   For C = 0 To 7 Step 3
      Range("B2:B10,B12:B20").Offset(, C).FormulaR1C1 = "=1+1"
      Range("C2:C10,C12:C20").Offset(, C).FormulaR1C1 = "=2+1"
      Next C
Else
   ToggleButton1.Caption = "toupp"
   For C = 0 To 7 Step 3
      Range("B2:B10,B12:B20").Offset(, C).FormulaR1C1 = "=4+4"
      Range("C2:C10,C12:C20").Offset(, C).FormulaR1C1 = "=5+4"
      Next C
   End If
End Sub
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa