Augmenter la rapidité d'un macro

Myst

XLDnaute Occasionnel
Bonjour
Quelqu'un aurait il le temps de jeter un œil dans le fichier joint et de trouver un moyen d’accélérer l'écriture des données de l'userform2 vers la page "Base" actuellement 12 secondes son nécessaire après avoir cliquer sur le bouton valider ,première demande
Dans l'UserForm2 il y a 3 ComboBox(1 ,2 et 3) et 1 TextBox56 situés au dessus du multipage qui affiche un message s'ils ne sont pas remplis ,il faudrait qu'ils passent en rouge lorsque le message s'affiche pour indique ou il manque quelque chose et repasse en blanc après la saisie ,deuxième demande
merci
 

Pièces jointes

  • AUDIT.xlsm
    146.7 KB · Affichages: 59

Paf

XLDnaute Barbatruc
Re : Augmenter la rapidité d'un macro

Bonjour à tous

peut-être un léger mieux en supprimant les déterminations à répétition de la première ligne libre et les Sheets("Base").activate .

A tester
Dans Private Sub CommandButton2_Click()
Code:
With Sheets("Base")   ' attention ne pas oublier le  [COLOR="#0000FF"][B].[/B][/COLOR] devant chaque range
 num = Sheets("Base").Range("A100000").End(xlUp).Row + 1 ' on détermine une fois
'code de saisie de la page 1

 .Range("A" & num).Value = "Jour"
 .Range("B" & num).Value = "Semaine"
 .Range("C" & num).Value = "EQ"
 .Range("D" & num).Value = "Code"
 .Range("E" & num).Value = ""
 .Range("F" & num).Value = "EXTRUDEUSE"
 .Range("G" & num).Value = ""
 .Range("H" & num).Value = "Cible"
 .Range("I" & num).Value = "Tolérance"
 .Range("J" & num).Value = "Valeur"
 .Range("K" & num).Value = "Actions correctives"
 .Range("L" & num).Value = "Valeur après réglage"

'code de saisie de la page 1 - 1e ligne'
 num = num + 1
 
 .Range("A" & num).Value = ComboBox1.Value
...
....

terminer par End with juste avant Unload Me

Si ce n'était pas assez rapide, il faudrait essayer de passer par un tableau ( écriture plus rapide) et coller le tableau dans la feuille.

A voir

A+
 

Myst

XLDnaute Occasionnel
Re : Augmenter la rapidité d'un macro

Bonsoir Paf
j'ai fait les modifications mais cela ne change pas grand chose ,le temps d’exécution reste quasi identique
A+
Myst
 

Pièces jointes

  • AUDIT V2.xlsm
    145.6 KB · Affichages: 45
  • AUDIT V2.xlsm
    145.6 KB · Affichages: 57
  • AUDIT V2.xlsm
    145.6 KB · Affichages: 58

Dranreb

XLDnaute Barbatruc
Re : Augmenter la rapidité d'un macro

Bonsoir.
Pour gagner du temps, tout préparer dans un tableau de Variant et l'écrire par son affectation, en une seule instruction, à la propriété Value de toute la plage à garnir. Parce que c'est à peine plus long que chacune des affectation à une cellule individuelle.
 

Paf

XLDnaute Barbatruc
Re : Augmenter la rapidité d'un macro

Re et bonsoir Dranreb


alors, la seconde solution préconisée:

Code:
'code de saisie de la page 1
Dim Montableau(1 To 53, 1 To 12)
With Sheets("base")
 num = .Range("A65000").End(xlUp).Row + 1

 Montableau(num, 1) = "Jour"
 Montableau(num, 2) = "Semaine"
 Montableau(num, 3) = "EQ"
 Montableau(num, 4) = "Code"
 Montableau(num, 5) = ""
 Montableau(num, 6) = "EXTRUDEUSE"
 Montableau(num, 7) = ""
 Montableau(num, 8) = "Cible"
 Montableau(num, 9) = "Tolérance"
 Montableau(num, 10) = "Valeur"
 Montableau(num, 11) = "Actions correctives"
 Montableau(num, 12) = "Valeur après réglage"

'code de saisie de la page 1 - 1e ligne'
num = num + 1
 Montableau(num, 1) = ComboBox1.Value
 Montableau(num, 2) = ComboBox2.Value
...
...

et finir par

Code:
...
...
 .Cells(num, 1).Resize(UBound(Montableau, 1), UBound(Montableau, 2)) = Montableau
 End With
 
 Unload Me
 
 End Sub


Heu... Bon courage

A+
 

Myst

XLDnaute Occasionnel
Re : Augmenter la rapidité d'un macro

Bonjour Dranreb et Paf
J'ai tout rectifié comme conseillé par Paf ,fait quelques modifications ci-dessous et l'enregistrement est maintenant fait a la vitesse de la lumière
Un grand merci a vous deux

Dim Montableau(1 To 63, 1 To 12)
With Sheets("base")
num = 1
Montableau(num, 1) = ""
num = num + 1
Montableau(num, 1) = "Jour"
Montableau(num, 2) = "Semaine"
Montableau(num, 3) = "EQ"
Montableau(num, 4) = "Code"
Montableau(num, 5) = ""
Montableau(num, 6) = "EXTRUDEUSE"
Montableau(num, 7) = ""
Montableau(num, 8) = "Cible"
Montableau(num, 9) = "Tolérance"
Montableau(num, 10) = "Valeur"
Montableau(num, 11) = "Actions correctives"
Montableau(num, 12) = "Valeur après réglage"
...

ET JE FINI PAR :
num = .Range("F100000").End(xlUp).Row + 1
.Cells(num, 1).Resize(UBound(Montableau, 1), UBound(Montableau, 2)) = Montableau
End With
Unload Me
End Sub
 

Statistiques des forums

Discussions
312 115
Messages
2 085 455
Membres
102 891
dernier inscrit
cocowild