XL 2013 Une macro bien rédigée fait-elle gagner en tps d'exécution?

Halffy

XLDnaute Occasionnel
Bonsoir à tous,

Tout est dit dans l'énoncé du problème: Une macro bien rédigée peut-elle faire gagner des secondes en tps d'exécution?
En effet j'ai rédigé la macro que je vous livre ci-dessous (vous la trouverez également dans le fichier joint), et j'aimerais connaître:

1. si il y a moyen de simplifier sa rédaction? (car dans mon fichier intégral & originel, comprenant environ une vingtaine de macros , elle met 11 secondes pour aboutir)
2. Cela pourrait-il permettre de gagner des secondes lors de son exécution?

Sub Confirmation()
Dim I As Integer

For I = 108 To 160 'Lignes 108 à 160
Cells(I, 69).Font.Name = Wingdings"
Next

For I = 108 To 111
Cells(I, 69).Value = "ï"
Cells(I, 69).Font.ColorIndex = 3 'Couleur Rouge
Next
For I = 112 To 127
Cells(I, 69).Value = "ü"
Cells(I, 69).Font.ColorIndex = 5 'Couleur Bleu
Next
For I = 128 To 130
Cells(I, 69).Value = "ï"
Cells(I, 69).Font.ColorIndex = 3
Next
For I = 131 To 153
Cells(I, 69).Value = "ü"
Cells(I, 69).Font.ColorIndex = 5
Next
For I = 154 To 156
Cells(I, 69).Value = "ï"
Cells(I, 69).Font.ColorIndex = 3
Next
For I = 157 To 157 'Lignes 157
Cells(I, 69).Value = "ü"
Cells(I, 69).Font.ColorIndex = 5
Next
For I = 158 To 160
Cells(I, 69).Value = "ï"
Cells(I, 69).Font.ColorIndex = 3
Next

End Sub

Avec tous mes remerciements /.
 

Pièces jointes

  • Rapido.xlsm
    163 KB · Affichages: 7
Solution
Bonjour Halffy, Dranreb, le forum

étant donné qu'il n'y a pas de test dans vos boucles, on peut aussi procéder comme cela sans boucle et sans tableau pour tout appliquer en 1 fois à partir du moment ou il n'y a pas plus de 30 plages par Union, ou appliquer directement sur l'ensemble des plages concernées si vous les connaissez précisément, comme dans le code confirmation2. Ou bien encore un mix des deux, sans union mais quand même avec des plages recalculées, comme dans le code confirmation3.

Bien cordialement, @+
VB:
Sub Confirmation()
With Union(Cells(108, 69).Range("A1:A" & 4), Cells(128, 69).Range("A1:A" & 13), Cells(154, 69).Range("A1:A" & 3), Cells(158, 69).Range("A1:A" & 3))
    .Value2 = "ï"
    .Font.Name = "Wingdings"...

Dranreb

XLDnaute Barbatruc
Bonsoir.
Sans aucun doute. Cependant cette facon correcte de l'écrire ne peut être appliquée pour d'autres propriétés de cellules que leurs valeurs ou leurs formules telles que leurs couleurs, à moins d'utiliser pour ces dernières la mise en forme conditionnelle.
Dans ce cas la macro écrite ainsi est pratiquement instantanée :
VB:
Sub Confirmation()
   Dim T(), L As Integer
   ReDim T(1 To 53, 1 To 1)
   For L = 1 To 53: T(L, 1) = "ü": Next L
   For L = 1 To 4: T(L, 1) = "ï": Next L
   For L = 21 To 23: T(L, 1) = "ï": Next L
   For L = 47 To 49: T(L, 1) = "ï": Next L
   For L = 51 To 53: T(L, 1) = "ï": Next L
   With [BQ108].Resize(53)
      .Value = T
      .Font.Name = "Wingdings"
      End With
   End Sub
 
Dernière édition:
Bonjour Halffy, Dranreb, le forum

étant donné qu'il n'y a pas de test dans vos boucles, on peut aussi procéder comme cela sans boucle et sans tableau pour tout appliquer en 1 fois à partir du moment ou il n'y a pas plus de 30 plages par Union, ou appliquer directement sur l'ensemble des plages concernées si vous les connaissez précisément, comme dans le code confirmation2. Ou bien encore un mix des deux, sans union mais quand même avec des plages recalculées, comme dans le code confirmation3.

Bien cordialement, @+
VB:
Sub Confirmation()
With Union(Cells(108, 69).Range("A1:A" & 4), Cells(128, 69).Range("A1:A" & 13), Cells(154, 69).Range("A1:A" & 3), Cells(158, 69).Range("A1:A" & 3))
    .Value2 = "ï"
    .Font.Name = "Wingdings"
    .Font.ColorIndex = 3
End With
With Union(Cells(112, 69).Range("A1:A" & 16), Cells(131, 69).Range("A1:A" & 23), Cells(157, 69))
    .Value2 = "ü"
    .Font.Name = "Wingdings"
    .Font.ColorIndex = 5
End With
End Sub
Code:
Sub Confirmation2()
With Range("BQ108:BQ111,BQ128:BQ130,BQ154:BQ156,BQ158:BQ160")
    .Value2 = "ï"
    .Font.Name = "Wingdings"
    .Font.ColorIndex = 3
End With
With Range("BQ112:BQ127,BQ131:BQ153,BQ157")
    .Value2 = "ü"
    .Font.Name = "Wingdings"
    .Font.ColorIndex = 5
End With
End Sub
VB:
Sub Confirmation3()
With Range(Cells(108, 69).Range("A1:A" & 4).Address & "," & Cells(128, 69).Range("A1:A" & 13).Address & "," & Cells(154, 69).Range("A1:A" & 3).Address & "," & Cells(158, 69).Range("A1:A" & 3).Address)
    .Value2 = "ï"
    .Font.Name = "Wingdings"
    .Font.ColorIndex = 3
End With
With Range(Cells(112, 69).Range("A1:A" & 16).Address & "," & Cells(131, 69).Range("A1:A" & 23).Address & "," & Cells(157, 69).Address)
    .Value2 = "ü"
    .Font.Name = "Wingdings"
    .Font.ColorIndex = 5
End With
End Sub
 
Dernière édition:

Halffy

XLDnaute Occasionnel
Bonjour Dranreb,

Après tests dans fichier originel complet, tps d'exécution: immédiat.
Toutefois au regard de mes petites connaissances en VBA, j'avais bien pensé à nommer une cellule "source", afin d'éviter à Excel de scruter les 609 lignes précédentes, mais n'étais pas arrivé à concrétiser; d'où entre autre la construction basique de mon code 😐
Mais avec ton code, il n'y a vraiment pas photo :cool: /

Alors un Grand Merci de ton dévouement, surtout à une heure si tardive, ou si tôt ;)
Je te souhaite une bonne journée,
Sujet résolu /.
 

Halffy

XLDnaute Occasionnel
Bonjour Bernard_XLD,

Bien sûr que non, tu n'est pas transparent ;), mais j'ai reçu ton message alors que je rédigeait une réponse en remerciement à Dranred.

Et donc après l'exécution des codes proposés, je confirme également que tes solutions marchent très très bien également (avec un +1 concernant la prise en charge des couleurs), et vous Remercie donc de vos contributions une nouvelle fois.

Maintenant au regard de mon faible niveau de connaissance VBA, Sub confirmation(2) est beaucoup plus parlant de prime abord pour moi; même si je comprends la solution de Dranred :).
J'ai donc le choix dans l'application des solutions apportées.

Encore Merci à vous, de votre temps,
Bien cordialement, et bonne journée à tous les 2 /.

 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 920
Membres
101 840
dernier inscrit
SamynoT