XL 2016 vba - simplification d'un code

  • Initiateur de la discussion Initiateur de la discussion douguy
  • 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 !

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
 
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
 
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

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.
 
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
 
- 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

Retour