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

C

Cacou78

Guest
Bonjour, je viens de commencer en VBA, et j'aimerais savoir s'il serait possible d'optimiser ce code en instaurant une boucle for

Range("S2").Select
ActiveCell.FormulaR1C1 = _
"=IF(Data!RC[17]=""OPEN"",IF(Data!RC[32]<>"""","""",Data!RC[23]),"""")"
Range("S2").AutoFill Destination:=Range("S2", Range("S2").End(xlDown))
Range("S:S").NumberFormat = "m/d/yyyy"

Range("X2").Select
ActiveCell.FormulaR1C1 = _
"=IF(Data!RC[12]=""OPEN"",IF(Data!RC[28]<>"""","""",Data!RC[19]),"""")"
Range("X2").AutoFill Destination:=Range("X2", Range("X2").End(xlDown))
Range("X:X").NumberFormat = "m/d/yyyy"

Range("AC2").Select
ActiveCell.FormulaR1C1 = _
"=IF(Data!RC[7]=""OPEN"",IF(Data!RC[24]<>"""","""",Data!RC[15]),"""")"
Range("AC2").AutoFill Destination:=Range("AC2", Range("AC2").End(xlDown))
Range("AC:AC").NumberFormat = "m/d/yyyy"



Merci D'avance
 
Re : Optimisation code

Bonjour Cacou78, bienvenue sur XLD,

On peut toujours écrire ceci :

Code:
Sub Entre()
Dim t, i As Byte
t = Array("S2", "X2", "AC2")
For i = 0 To 2
  Range(t(i)).Select
  ActiveCell.FormulaR1C1 = _
  "=IF(Data!RC[" & 17 - 5 * i & "]=""OPEN"",IF(Data!RC[" & 32 - 4 * i & "]<>"""","""",Data!RC[" & 23 - 4 * i & "]),"""")"
  Range(t(i)).AutoFill Destination:=Range(t(i), Range(t(i)).End(xlDown))
  Range(t(i)).EntireColumn.NumberFormat = "m/d/yyyy"
Next
End Sub

Appelons ça optimisation si vous voulez.

Mais une réelle optimisation c'est de ne rien sélectionner et d'entrer la formule d'un coup dans la plage :

Code:
Sub Entre()
Dim t, i As Byte
t = Array("S2", "X2", "AC2")
For i = 0 To 2
  Range(t(i), Range(t(i)).End(xlDown)).FormulaR1C1 = _
  "=IF(Data!RC[" & 17 - 5 * i & "]=""OPEN"",IF(Data!RC[" & 32 - 4 * i & "]<>"""","""",Data!RC[" & 23 - 4 * i & "]),"""")"
  Range(t(i)).EntireColumn.NumberFormat = "m/d/yyyy"
Next
End Sub

Edit : quel étourdi je fais, j'avais mis EntireRow au lieu de EntireColumn...

A+
 
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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
910
  • Question Question
Microsoft 365 VBA sur outlook
Réponses
14
Affichages
1 K
Réponses
4
Affichages
688
Réponses
10
Affichages
1 K
Réponses
5
Affichages
785
L
Réponses
9
Affichages
1 K
Réponses
1
Affichages
1 K
D
Réponses
4
Affichages
1 K
Dangdang
D
Retour