Comment réduire mon temps machine en diminuant mon programme

kobejul08 Messages postés 113 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 3 octobre 2005 - 24 août 2005 à 17:26
kobejul08 Messages postés 113 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 3 octobre 2005 - 25 août 2005 à 17:19
Bonjour ,


voici un petit programme vb6 qui ouvre un fichier excel et qui copie les lignes de ce fichier excel dans un autre en splitant la date si qq un a une suggestion ça serait super pour réduire le temps vu qu'il y a 2500 lignes a exporter d'un fichier a l'autre et essayer de réduire les ''end if'' Merci


Public monxl As Excel.Application
Public monxl2 As Excel.Application
Public monxl3 As Excel.Application


Public modeCreation As Boolean


Sub Main()


Set monxl = New Excel.Application
Set monxl2 = New Excel.Application
Set monxl3 = New Excel.Application


'monxl3.Workbooks.open "[file://father/SLX/paramLaser.xls \\father\SLX\paramLaser.xls]"
monxl3.Workbooks.Open "X:\JD\paramLaser.xls"
monxl2.Workbooks.Open "C:\EchantillonFichierCommandes.xls"
monxl.Workbooks.Open monxl3.Cells(1, 1).Value



For i = 1 To 15000
If monxl.Cells(i, 1).Value = "" Then
Exit For
End If
Next
For j = 2 To 15000
If monxl2.Cells(j, 2).Value = "" Then
Exit For
End If


monxl.Cells(i, 1).Value = monxl2.Cells(j, 1).Value
monxl.Cells(i, 4).Value = monxl2.Cells(j, 4).Value
monxl.Cells(i, 6).Value = monxl2.Cells(j, 6).Value
monxl.Cells(i, 7).Value = monxl2.Cells(j, 7).Value
monxl.Cells(i, 8).Value = monxl2.Cells(j, 8).Value
monxl.Cells(i, 9).Value = monxl2.Cells(j, 9).Value
monxl.Cells(i, 10).Value = monxl2.Cells(j, 10).Value
monxl.Cells(i, 11).Value = monxl2.Cells(j, 11).Value
monxl.Cells(i, 12).Value = monxl2.Cells(j, 12).Value
monxl.Cells(i, 13).Value = monxl2.Cells(j, 13).Value
monxl.Cells(i, 14).Value = monxl2.Cells(j, 14).Value
monxl.Cells(i, 15).Value = monxl2.Cells(j, 15).Value
monxl.Cells(i, 16).Value = monxl2.Cells(j, 16).Value
monxl.Cells(i, 17).Value = monxl2.Cells(j, 17).Value
monxl.Cells(i, 18).Value = monxl2.Cells(j, 18).Value
monxl.Cells(i, 19).Value = monxl2.Cells(j, 19).Value
monxl.Cells(i, 20).Value = monxl2.Cells(j, 20).Value
monxl.Cells(i, 21).Value = monxl2.Cells(j, 21).Value
monxl.Cells(i, 22).Value = monxl2.Cells(j, 22).Value
monxl.Cells(i, 23).Value = monxl2.Cells(j, 23).Value
'monxl.Cells(i, 1).Value = monxl2.Cells(j, 24).Value
'monxl.Cells(i, 1).Value = monxl2.Cells(j, 25).Value
'monxl.Cells(i, 1).Value = monxl2.Cells(j, 1).Value
'monxl.Cells(i, 1).Value = monxl2.Cells(j, 1).Value
'monxl.Cells(i, 1).Value = monxl2.Cells(j, 1).Value
'monxl.Cells(i, 1).Value = monxl2.Cells(j, 1).Value
'monxl.Cells(i, 1).Value = monxl2.Cells(j, 1).Value


Dim Jdate As Date

monxl.Cells(i, 2).Value = Day(monxl2.Cells(j, 2).Value)
monxl.Cells(i, 3).Value = Month(monxl2.Cells(j, 2).Value)
monxl.Cells(i, 5).Value = Year(monxl2.Cells(j, 2).Value)


If monxl.Cells(i, 3).Value = "" Then
Exit For
Else
End If

If monxl.Cells(i, 3).Value = 1 Then
monxl.Cells(i, 3) = "janvier"
End If
If monxl.Cells(i, 3).Value = 2 Then
monxl.Cells(i, 3) = "février"
End If
If monxl.Cells(i, 3).Value = 3 Then
monxl.Cells(i, 3) = "mars"
End If
If monxl.Cells(i, 3).Value = 4 Then
monxl.Cells(i, 3) = "avril"
End If
If monxl.Cells(i, 3).Value = 5 Then
monxl.Cells(i, 3) = "mai"
End If
If monxl.Cells(i, 3).Value = 6 Then
monxl.Cells(i, 3) = "juin"
End If
If monxl.Cells(i, 3).Value = 7 Then
monxl.Cells(i, 3) = "juillet"
End If
If monxl.Cells(i, 3).Value = 8 Then
monxl.Cells(i, 3) = "août"
End If
If monxl.Cells(i, 3).Value = 9 Then
monxl.Cells(i, 3) = "septembre"
End If
If monxl.Cells(i, 3).Value = 10 Then
monxl.Cells(i, 3) = "octobre"
End If
If monxl.Cells(i, 3).Value = 11 Then
monxl.Cells(i, 3) = "novembre"
End If
If monxl.Cells(i, 3).Value = 12 Then
monxl.Cells(i, 3) = "décembre"
End If




i = i + 1
Next



monxl.ActiveWorkbook.Save


End Sub

6 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
24 août 2005 à 18:03
tu peux utiliser la syntaxe CASE pour remplacer ta serie de IF...

exemple

select case monxl.Cells(i, 3).Value
case is 1 :
monxl.Cells(i, 3) = "janvier"
case is 2 :
monxl.Cells(i, 3) = "février"
...
case else
'gestion d'erreur : mois non reconnu
end select

je pense que ca sera plus rapide et plus lisible, mais vu que ca n'est pas dans une boucle, je pense que le gain de temps ne sera pas enorme.

quelle partie de ton programme prend du temps ?
0
kobejul08 Messages postés 113 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 3 octobre 2005
25 août 2005 à 10:50
surtout la dernière partie avec tout les end if
sinon au dessus c'est pas mal non plus ...
as tu une idée d'une boucle que je pourrais faire?
Merci
0
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
25 août 2005 à 11:30
pkoi veux tu faire une boucle.

a quel endroit ?


personnellement au lieu de copier cellule par celluel comme tu le fais, j'aurai copié la ligne entiére, pour ensuite travailler sur les cellules a modifier.


ca serait beaucour plus simple


mais je ne suis pas sur de bien comprendre,


pour moi ton code ne traite qu'une ligne ?!?
0
kobejul08 Messages postés 113 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 3 octobre 2005
25 août 2005 à 13:08
i = i + 1

non il fait chaque fois plus 1
et si tu as une meilleur idée pour la fluidité dis le moi
ou explique sur quelle base partir je parle de code là!!
Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 3
25 août 2005 à 16:15
autant pour moi je n'avais pas vu que la deuxieme boucle allait jusqu'a la fin :)

donc effectivement, je pense que ce qui peut etre long c de swapper d'un fichier a l'autre a chaque fois et de copier cellule par cellule

moi je serait toi, je ferai ca :
1 - recherhe de la premiere ligne ou copier les info dans le classeur cible
2 - recherche de la plage de cellule a copier dans le classeur source
3 - copie de toute la plage d'un seul coup
4 - boucle de traitement des cellules contenant des dates dans le classeur cible.

en copiant tou d'un seul tu va gagner bcp de temps

combien de temps ca met actuellement ?
0
kobejul08 Messages postés 113 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 3 octobre 2005
25 août 2005 à 17:19
sais tu me décrire ça en code stp?
et pour l'intant pour 1600 lignes excel ça met genre 10min -)
0
Rejoignez-nous