Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

macro: mettre le turbo !

J

JJ1

Guest
Bonjour à tous,
J'ai une petite macro simple qui fonctionne mais d'une lenteur...!

Le principe est simple: je copie une combinaison de 6 nombres (présentes en colonnes AU:AZ) en AD8:AI8, je temporise pour laisser le temps aux formules de calculer, je fais un test, si OK je copie la combinaison en BB:BG sinon je passe à la suivante.
voici ma macro:

Dim i As Integer, ligne As Integer, a As Integer, j As Integer, b As Integer
On Error Resume Next
For ligne = 1 To 100
a = 0
b = 0
For i = 47 To 52 'AU AZ
a = Cells(ligne, i).Value
Cells(8, i - 17).Value = a 'AD8 à AI8
Next i
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 1
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
If Cells(7, 41).Value < 7 And Cells(9, 36).Value > 0 And Cells(9, 36).Value < 4 And Cells(4, 36).Value < 4 Then
For j = 47 To 52
b = Cells(ligne, j).Value
Cells(ligne, j + 7).Value = b 'BB à BG
Next j
End If
Next ligne

Avez vous une solution pour l'accelerer car elle est vraiment trop lente?
merci et bon dimanche
 

Bebere

XLDnaute Barbatruc
Re : macro: mettre le turbo !

bonjour Jj1,Bof
cela devrait aller + vite
regarde le commentaire
Sub e()
Dim i As Integer, ligne As Integer, a As Integer, j As Integer, b As Integer
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
On Error Resume Next
For ligne = 1 To 100
a = 0
b = 0
For i = 47 To 52 'AU AZ
a = Cells(ligne, i).Value
Cells(8, i - 17).Value = a 'AD8 à AI8
Next i
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 1
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
'Cells(9, 36).Value > 0 And Cells(9, 36).Value < 4?Cells(9, 36).Value > 0 or Cells(9, 36).Value < 4
If Cells(7, 41).Value < 7 And Cells(9, 36).Value > 0 And Cells(9, 36).Value < 4 And Cells(4, 36).Value < 4 Then
For j = 47 To 52
b = Cells(ligne, j).Value
Cells(ligne, j + 7).Value = b 'BB à BG
Next j
End If
Next ligne
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With

End Sub

à bientôt
 
J

JJ1

Guest
Re : macro: mettre le turbo !

Bonsoir, effectivement le temps de calcul est long (1sec) mais je pensais à la structure de la macro (boucles, tests...)
sinon je laisse tel quel.
Bonne soirée
 

JeanMarie

XLDnaute Barbatruc
Re : macro: mettre le turbo !

Bonjour

Tu as sorti la grosse cavalerie pour le calcul du délai de pause, tu as recopié le 2ème exemple de l'aide VBA, pourquoi ne pas utiliser le 3ème, avec Now + TimeValue("00:00:01").

Tu peux aussi copier les valeurs des cellules sans passer par les boucles, ces deux lignes font la même chose.
Range("AD8:AI8").value = Range("AU" & ligne & ":AZ" & ligne).value
Range("BB" & ligne & "BG" & ligne).value = Range("AU" & ligne & ":AZ" & ligne).value

Sur la proposition de Bebere, de passer le mode de calcul en mode manuel, et de laisser la pause à 1 seconde pour le recalcul des formules, sans ordonner un .calculate, les formules ne seront jamais recalculées et la pause est donc inutile.

@+Jean-Marie
 
J

JJ1

Guest
Re : macro: mettre le turbo !

Bonsoir et merci pour vos solutions.
2 questions:
Si j'utilise Range=Range au lieu de For..., que devient mon test IF Cell(...car je n'ai plus la variable i
Est ce plus rapide que la boucle?
La pause est obligatoire car si les cellules ne sont pas recalculées le test ne peut pas se faire.

merci
JJ1
 

JeanMarie

XLDnaute Barbatruc
Re : macro: mettre le turbo !

Bonsoir

Je ne vois pas dans la ligne
If Cells(7, 41).Value < 7 And Cells(9, 36).Value > 0 And Cells(9, 36).Value < 4 And Cells(4, 36).Value < 4 Then
la prise en compte de la variable i, ...

Si tu places une instruction de calculate sur la plage range(....).calculate, je pense que tu pourras supprimer la pause de ta macro.

@+Jean-marie
 

Hellboy

XLDnaute Accro
Re : macro: mettre le turbo !

Bonsoir a tous

Une suggestion:




Autre chose, est-ce que tu as des fonctions dans tes cellules que tu as construitent toi même ?

a+
 
J

JJ1

Guest
Re : macro: mettre le turbo !

Bonsoir et merci

je vais essayer toutes vos soluces ce WE

Dans mon tableau il n'y a que des formules, assez "lourdes" ....vous voyez celles du style envoyées par Monique...(qui font 3 lignes de long !!!)

Bonne soirée
 

Discussions similaires

Réponses
0
Affichages
208
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…