[VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Staple1600

XLDnaute Barbatruc
Bonsoir à tous


Je sollicite votre aide pour essayer d'améliorer un code VBA utilisé pour mettre en forme un grand nombre de cellules.

Je vous invite à regarder la pièce jointe pour tester et j'espère que vos propositions réduiront le temps d'exécution de la macro

(qui sur mon PC domestique s'exécute en 3 secondes)

Merci à tous ceux qui s'arrêteront dans ce fil.
 
Solution
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re


Bravo pour cette piste JNP


Ca marche !

Code:
Sub test_ok()
Dim sFrag As String, sStart As String, sEnd As String
sStart = "<HTML><body>Ce <b>mot</b> est en gras.<p>" & "Ce " & "<u>mot</u> est souligné.<p>"
sFrag = "Ce " & "<FONT COLOR=RED>mot</FONT> est en rouge.<p>" & "Ce " & "<i>mot</i> est en italique.<p>"
sEnd = "<b><i><u><font color=green>Ce format est vert, gras, italique et souligné !</font></u></i></b></body><HTML>"
PutHTMLClipboard sFrag, sStart, sEnd
ActiveSheet.Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"
End Sub

EDITION: Maintenant ca va être coton pour créer les strings
(car évidemment chaque cellule de la colonne...

pierrejean

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re
@ JNP
Desolé mais je tourne encore sous Office 2000 et je ne parviens pas a obtenir quoi que ce soit des Settext Getformat ou autre
@ Staple
Je n'ai pas non plus d'explication quant aux differences de temps d'execution sinon en evoquant d'eventuelles taches de fond executées par l'ordinateur
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re


Bravo pour cette piste JNP


Ca marche !

Code:
Sub test_ok()
Dim sFrag As String, sStart As String, sEnd As String
sStart = "<HTML><body>Ce <b>mot</b> est en gras.<p>" & "Ce " & "<u>mot</u> est souligné.<p>"
sFrag = "Ce " & "<FONT COLOR=RED>mot</FONT> est en rouge.<p>" & "Ce " & "<i>mot</i> est en italique.<p>"
sEnd = "<b><i><u><font color=green>Ce format est vert, gras, italique et souligné !</font></u></i></b></body><HTML>"
PutHTMLClipboard sFrag, sStart, sEnd
ActiveSheet.Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"
End Sub

EDITION: Maintenant ca va être coton pour créer les strings
(car évidemment chaque cellule de la colonne B contiendra des valeurs différences)

Je ne suis pas sur que le clipboard n' explose pas avant , subissant un tel traitement ;)
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re :),
Chez moi, j'ai été obligé de transformer les <p> en <br>, mais effectivement, j'avais trouvé aussi ce code.
Maintenant, reste à cumuler, comme tu dis, et voir si c'est plus rapide...
Bonne journée :cool:
 

pierrejean

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re

Version tres tres rapide mais .......
Noter le nom du bouton
 

Pièces jointes

  • testOptimize.zip
    59.2 KB · Affichages: 58
  • testOptimize.zip
    59.2 KB · Affichages: 60
  • testOptimize.zip
    59.2 KB · Affichages: 56

JNP

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re :),
A partir du code deniché par JNP et du 1er essai de Staple
Dommage !!! (on avait beaucoup d'espoir)
Je passe de 7 à 3.5 secondes, c'est quand même 50% de gagné... C'est déjà pas mal...
Mais, sonnez trompettes, ci-joint le fichier amélioré, en passant par un fichier TXT (écriture sur C: ), je descends à une moyenne en dessous des 0.9 secondes :D!!!
Je sais pas si on arrivera à mieux, mais je pense que Jean-Marie sera content :p.
Bonne journée :cool:
 

Pièces jointes

  • CollerHTML.xls
    168.5 KB · Affichages: 135

pierrejean

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re

Les puristes remarqueront 2 petits details que je n'ai pas su corriger:
1) les mots en couleurs ont le soulignement qui affecte l'espace
2) le double espace entre MOT4 et MOT5 n'est pas respecté

Néanmoins un grand BRAVO a JNP
 

JNP

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re :),
Néanmoins un grand BRAVO a JNP
C'est gentil, mais j'estime que le résultat est surtout dû à une bonne collaboration entre nous tous, le mélange des codes en est la preuve ;).
Je suis juste content que la piste du HTML était bonne. De plus, il faudra que je me penche dessus car en même temps que PutHTMLClipboard, j'ai aussi rapatrié GetHTMLClipboard, ce qui devrait permettre de donner une solution élégante à ce fil pour récupérer direct la présentation dans la cellule et l'envoyer en corps de mail.
Bonne fin de journée :cool:
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Bonsoir à tous

Bravo à tous, à JNP pour son approche nouvelle

En cherchant des infos sur PutHTMLClipboard

J'ai trouvé ce code (voir classeur joint)

et là j'ai un peu de mal à adapter le code des macros suivantes
Code:
Public Sub Copy(Table() As Variant)
Code:
Sub rth()
J'ai donc besoin que vous veniez une dernière fois à ma rescousse
car j'ai du mal à mettre dans des tableaux le contenu des cellules et le code HTML.

(Et je suis curieux de voir s'il est plus rapide de passer par des Arrays comme c'est le cas du code de ce classeur ou de passer par un fichier texte comme JNP ;) (bravo à toi) )

pierrejean:
2) le double espace entre MOT4 et MOT5 n'est pas respecté
comme je l'ai dis lus bas ce n'est pas une contrainte , c'est une erreur de saisie de ma part (il n'y a pas qu'un seul espace entre chaque mot puisque la chaine sera créée par macro)

PS: je vais voir si je peux m'aider du code de JNP pour modifier le code de cette dernière pièce jointe
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re

Houps désolé :eek:, je n'avais pas vu la pièce jointe de pierrejean avec le HTML

Le Bravo initial va donc à Pierrejean
Le Bravo suivant va donc à JNP pour son passage par un fichier texte.

En mixant avec la façon de faire du fichier exemple que j'ai joint

(donc en utilisant Join et les Arrays ), ne peut on pas améliorer le temps d'exécution ?

J'essaie mais je sèche pour le moment.
 

JNP

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re :),
sachant que si tu exécutes la macro sans le copier/coller, tu descends à 0.15 secondes de moyenne, je ne penses pas qu'on arrivera à optimiser beaucoup plus...
Mais bon :p.
Bon courage :cool:
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Bonsoir JNP, le fil, le forum

Je ne comprends pas ta réponse.

Je pensais qu'en splitant le contenu des cellules dans un Array
et qu'en suivant la logique mise en œuvre dans le dernier fichier exemple
que j'ai joint , on pouvait éviter de passer un fichier texte

Dans l'exemple cité, il y a bien un copié/collé non ?

Les données sont créés à la volée et mises dans un Array
puis copier dans le clipboard (cf . Sub Copy(Table() As Variant))
puis coller (et ce trés rapidement) dans le classeur (cf. rth)

Mon problème est que je n'arrive pas à fusionner vos codes (celui de pierrejean et le tien) avec cet exemple trouvé sur le net.

Peut-être que ROGER2327 (qui excelle en tableaux) repassera par ici m'éclairer de ses lumières ;) , car je sèche toujours "lamentablement". :eek:
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : [VBA] Optimiser macro pour utilisation sur PC ancien (Array vs Boucles)

Re :),
Au départ, j'avais tout chargé en String, mais j'ai explosé le String (c'est ma femme qui va être contente :D...).
Peut-être qu'un tableau sera plus résistant :p...
Mais ce que je voulait dire, c'est que le dépeçage, codage et écrivage du TXT (c'est rien, c'est l'âge...) ne dure qu'un dixième de seconde. Le reste du temps, c'est l'envoi dans le presse papier, et surtout le déversement du presse-papier dans les cellules... D'où mon septicisme sur une optimisation importante.
J'espère que c'est plus clair :rolleyes:.
Bonne soirée Jean-Marie :cool:
 

Statistiques des forums

Discussions
312 247
Messages
2 086 590
Membres
103 247
dernier inscrit
bottxok