temps d'une macro

  • Initiateur de la discussion Tonio
  • Date de début
T

Tonio

Guest
Bonjour à tous,

J'importe des données d'un serveur sur une page excel, environ 20 colonnes sur 300 lignes. Est-il possible de raccourcir le temps d'execution de cette macro ?
voici ma macro :

Dim P As String, f As String, S As String
Dim A As String
Dim C As Long, R As Long, i As Long

P = "\\hf14-001\APPLI_IMMEUBLES"
f = "Immeubles.xls"
S = "ImmeublesCaisses"
'Vérifie l'existence du fichier, ajoute les séparateurs manquants
If (Right(P, 1) <> "\") Then P = P & "\"
If (Dir(P & f) <> "") Then
range("A1").CurrentRegion.ClearContents
i = 0
Application.ScreenUpdating = False

sheets("Import données").Select

For R = 1 To 318
For C = 1 To 79
If C = 5 Then C = 15
If C = 20 Then C = 22
If C = 26 Then C = 29
If C = 31 Then C = 37
If C = 38 Then C = 40
If C = 41 Then C = 64
If C = 66 Then C = 78

i = i + 1
Cells(R, C) = GetValue(P, f, S, Cells(R, C).Address)
Next C
Next R
Application.ScreenUpdating = True

Meci à vous !!!
 
F

F.Launay

Guest
Bonsoir,
une petite macro de messagerie avec le choix du type de message
Au debut de la macro principal
mettre
dim t as double
T=timer

Private Sub Messagerie()
Dim txt As String, ie As Object, durée As Long, choix As Integer,
Select Case choix
Case choix = 1 'False Ou 1
txt = WorksheetFunction.Substitute(txt, Chr(13), "<BR>")
txt = WorksheetFunction.Substitute(txt, Chr(10), "<BR>")
txt = "<FONT SIZE=8 color='blue'>TRAITEMENT TERMINE <CENTER>" & txt & "</CENTER></FONT>"
Set ie = CreateObject("internetexplorer.application")
ie.Navigate ("about:Message")
ie.Width = 600
ie.Height = 100
ie.Top = 150
ie.Left = 150
ie.document.write txt
ie.addressbar = False
ie.MenuBar = False
ie.StatusBar = False
ie.Toolbar = False
ie.Visible = True
durée = 1.30
Application.Wait Now + durée / 36000
ie.Quit
Case Else
MsgBox " Terminé " & CStr(DERLIGN) & " cellules testées en " & Format(Timer - T, "##.00") & " secondes"
End Select
End Sub
en espérant que ça te conviennes
 
L

Lord Nelson

Guest
Salut,

Essaies ceci, peut-être :

For R = 1 To 318
C = 0
Do
C = C + 1
Select Case C
Case 5: C = 15
Case 20: C = 22
Case 26: C = 29
Case 31: C = 37
Case 38: C = 40
Case 41: C = 64
Case 66: C = 78
Case Else
End Select
Cells(R, C) = GetValue(P, f, S, Cells(R, C).Address)
Loop While C < 80
Next R

Si cela reste lent, ce qui me paraît probable, il faudra voir du côté de GetValue.

A+
LN
 
T

Tonio

Guest
Bonjour à vous deux !!!!

Une petite question F.Launay, ta macro sert-elle juste à controler le temps ou elle le modifie?
Quant à toi Lord Nelson, malgré tes efforts, cela reste toujours aussi lent. Peut-tu m'expliquer comment modifier la GetValue ?

Merci beaucoup bon Week-end !!
 
L

Lord Nelson

Guest
Salut,

La procédure GetValue ouvre un fichier, lit une valeur et ferme le fichier. C'est très bien mais dans ta boucle, tu l'appelles environ 12000 fois !
Il serait plus efficace d'ouvrir le classeur une fois, d'y lire toutes les données dont tu as besoin et de le refermer.
Cela ne devrait pas prendre plus de 3 ou 4 secondes.

A+
LN
 
T

Tonio

Guest
Merci Lord !!

Je vois ce que tu veux dire mais je sais pas comment m'y prendre, j'ai essayé en enregistrant la macro, mais elle ne comprend pas où aller chercher les données, et oui je suis un des nombreux débutant sur ce forum !!
Si tu pouvais me donner un p'tit coup de pouce !!

Merci
 
L

Lord Nelson

Guest
Salut Tonio,

Tu trouveras en pièce jointe une nouvelle macro à tester (sans utiliser GetValue mais WorksBooks.Open).

A+
LN
 

Pièces jointes

  • Importation.zip
    9.4 KB · Affichages: 15
  • Importation.zip
    9.4 KB · Affichages: 14
  • Importation.zip
    9.4 KB · Affichages: 14

Discussions similaires

Réponses
9
Affichages
257
Réponses
1
Affichages
191
Réponses
5
Affichages
404

Statistiques des forums

Discussions
314 195
Messages
2 107 029
Membres
109 738
dernier inscrit
cedrebey