Calcul trop lente

Le
Guy72
Bonjour,
Peut-on éviter de se servir de la macro "convertir" (elle est trop lente),
même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?
Merci de votre aide.
http://cjoint.com/?mwp62Z5gqN
--
Cordialement
Guy
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Caetera
Le #20819281
"Guy72"
Peut-on éviter de se servir de la macro "convertir" (elle est trop lente),
même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?



******************
sub xxxxxx()
application.calculation = xlManual
'les instructions
application.calculation = xlAutomatic
end sub

Etc
michdenis
Le #20819381
Bonjour,

Quel est l'utilité de cette macro dans ton application ?

'------------------------------
Sub convertir()
For Each c In Range([A9], [J490].End(xlUp))
If Val(c.Value) <> 0 Then c.Value = Val(c.Value)
Next c
End Sub
'------------------------------




"Guy72"
Bonjour,
Peut-on éviter de se servir de la macro "convertir" (elle est trop lente),
même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?
Merci de votre aide.
http://cjoint.com/?mwp62Z5gqN
--
Cordialement
Guy
Guy72
Le #20819421
Bonjour michdenis,
L'utilité, c'est qu'après avoir utilisé le code précédent, tout est en texte
et je ne peut pas utiliser mes formules de la ligne 5.
--
Cordialement
Guy

"michdenis"
Bonjour,

Quel est l'utilité de cette macro dans ton application ?

'------------------------------
Sub convertir()
For Each c In Range([A9], [J490].End(xlUp))
If Val(c.Value) <> 0 Then c.Value = Val(c.Value)
Next c
End Sub
'------------------------------




"Guy72" discussion :

Bonjour,
Peut-on éviter de se servir de la macro "convertir" (elle est trop lente),
même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?
Merci de votre aide.
http://cjoint.com/?mwp62Z5gqN
--
Cordialement
Guy



michdenis
Le #20819801
Essaie cette macro à la place :

'---------------------------------------------
Sub test()
Dim ModeCalcul As String
Application.ScreenUpdating = False
ModeCalcul = Application.Calculation
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
With Worksheets("Récap")
With .Range("A9:J490")
.Replace ".", ","
x = .Value
For a = 1 To UBound(x, 1)
For b = 1 To UBound(x, 2)
If IsNumeric(x(a, b)) Then
x(a, b) = CDbl(x(a, b))
End If
Next
Next
.NumberFormat = "General"
.Value = x
End With
End With
Application.Calculation = ModeCalcul
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
'---------------------------------------------



"Guy72" #0Gz#
Bonjour michdenis,
L'utilité, c'est qu'après avoir utilisé le code précédent, tout est en texte
et je ne peut pas utiliser mes formules de la ligne 5.
--
Cordialement
Guy

"michdenis"
Bonjour,

Quel est l'utilité de cette macro dans ton application ?

'------------------------------
Sub convertir()
For Each c In Range([A9], [J490].End(xlUp))
If Val(c.Value) <> 0 Then c.Value = Val(c.Value)
Next c
End Sub
'------------------------------




"Guy72" discussion :

Bonjour,
Peut-on éviter de se servir de la macro "convertir" (elle est trop lente),
même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?
Merci de votre aide.
http://cjoint.com/?mwp62Z5gqN
--
Cordialement
Guy



Guy72
Le #20820051
Bonjour Caetera
Ok ça fonctionne et merci
--
Cordialement
Guy

"Caetera"
"Guy72"
Peut-on éviter de se servir de la macro "convertir" (elle est trop
lente), même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?



******************
sub xxxxxx()
application.calculation = xlManual
'les instructions
application.calculation = xlAutomatic
end sub

Etc



Guy72
Le #20820041
ça fonctionne.
Merci.
--
Cordialement
Guy

"michdenis" %
Essaie cette macro à la place :

'---------------------------------------------
Sub test()
Dim ModeCalcul As String
Application.ScreenUpdating = False
ModeCalcul = Application.Calculation
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
With Worksheets("Récap")
With .Range("A9:J490")
.Replace ".", ","
x = .Value
For a = 1 To UBound(x, 1)
For b = 1 To UBound(x, 2)
If IsNumeric(x(a, b)) Then
x(a, b) = CDbl(x(a, b))
End If
Next
Next
.NumberFormat = "General"
.Value = x
End With
End With
Application.Calculation = ModeCalcul
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
'---------------------------------------------



"Guy72" discussion :
#0Gz#
Bonjour michdenis,
L'utilité, c'est qu'après avoir utilisé le code précédent, tout est en
texte
et je ne peut pas utiliser mes formules de la ligne 5.
--
Cordialement
Guy

"michdenis"
Bonjour,

Quel est l'utilité de cette macro dans ton application ?

'------------------------------
Sub convertir()
For Each c In Range([A9], [J490].End(xlUp))
If Val(c.Value) <> 0 Then c.Value = Val(c.Value)
Next c
End Sub
'------------------------------




"Guy72" discussion :

Bonjour,
Peut-on éviter de se servir de la macro "convertir" (elle est trop
lente),
même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?
Merci de votre aide.
http://cjoint.com/?mwp62Z5gqN
--
Cordialement
Guy






LE TROLL
Le #20820031
Bonjour,

Je regardais un peu, mais je ne connais pas vbA...

Eh oui, la lenteur, c'est bien la la limite d'Excel, le mode interprété
avec affichage à ses limites...
Déjà, pourquoi tu utilises des directives de fichiers assembleur
Microsoft, alors qu'elle existe en VB(a) ?

pointeur = FreeFile
Open "cheminnom_fichier.txt" For Input As pointeur
Line Input #pointeur, variable_texte

Tu sembles demander l'ouverture (je crois), de n'importe quel fichier
texte avec l'extension "txt" (*.txt)...
Pourquoi il n'est pas nommé ?
Car si on rajoute un fichier texte qui n'a rien à voir, il va se trouver
ouvert éventuellement, ou s'il y a deux fichiers, il se passe quoi ?

Sinon, je ne sais pas non plus pourquoi lire un fichier, alors que tu as
déjà un fichier, celui d'Excel (peut être est-ce pour l'exemple) ?

Pour aller plus vite :

-1-
Si je comprends un peu, ce qui n'est pas certain, tu modifies le format
d'affichage de certaines données, mais ceci en effet, tu peux le faire en
mémoire, notamment s'il n'y en a que 1000, en chargeant tout dans une
variable indicée, puis en effectuant le formatage, la conversion, puis en
réaffichant tout. Donc, si ça provient d'un fichier texte externe, ça doit
se faire avant l'affichage, évidemment, puis on affiche seulement le
résultat, jamais de calculs visuels d'importance.

-2-
Autre possibilité de gagner de la vitesse, c'est de ne pas afficher la
feuille au moment de la conversion, un objet avec la propriété visible =
False va toujours plus vite ! Si ça dure longtemps, tu mets un amuse-oil
(pendant de l'amuse-gueule) pour faire patienter, un message avec un
compteur (ça ralentit quand même... le compteur, mais moins)...

Ben, avec ces deux mesures tu devrais gagner de la vitesse, toutefois tu
semble avoir une bonne maîtrise de la chose, alors tu devrais peut être le
faire en VB ou vbNet afin que ça devienne une fusée...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.




Sub Traitement()
'
' Macro1 Macro
' Macro enregistrée le 16/12/2009 par FORCET
'
If Workbooks("Météo 2010.xls").Sheets("Récap").Range("A9") <> "" Then
Workbooks("Météo 2010.xls").Sheets("Récap").Range("A9", "K" &
Workbooks("Météo
2010.xls").Sheets("Récap").Range("A65535").End(xlUp).Row).ClearContents
End If
ChDrive ("C")
ChDir (ThisWorkbook.Path)
Fichier = Application.GetOpenFilename("(*.txt),")
Workbooks.OpenText Filename:= _
Fichier, _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited,
TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:úlse, _
Comma:úlse, Space:úlse, Other:=True, FieldInfo:=Array(Array(1,
2), _
Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2),
Array(7, 2), Array(8, 2), _
Array(9, 2), Array(10, 2), Array(11, 2), Array(12, 2)),
TrailingMinusNumbers:=True
Fichier = ActiveWorkbook.Name
Feuille = ActiveSheet.Name
i = 3
Do While i <
Workbooks(Fichier).Sheets(Feuille).Range("K65536").End(xlUp).Row + 1
If Format(Workbooks(Fichier).Sheets(Feuille).Range("K" & i),
"hh:mm:ss") = "00:01:00" Then: Exit Do
i = i + 1
Loop
Workbooks(Fichier).Sheets(Feuille).Range("A" & i, "K" &
Workbooks(Fichier).Sheets(Feuille).Range("K65536").End(xlUp).Row).Copy
Workbooks("Météo
2010.xls").Sheets("Récap").Range("A65535").End(xlUp).Offset(1, 0)
Workbooks(Fichier).Close SaveChanges:úlse
'
ChDrive ("C")
ChDir (ThisWorkbook.Path)
Fichier = Application.GetOpenFilename("(*.txt),")
Workbooks.OpenText Filename:= _
Fichier, _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited,
TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:úlse, _
Comma:úlse, Space:úlse, Other:=True, FieldInfo:=Array(Array(1,
2), _
Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2),
Array(7, 2), Array(8, 2), _
Array(9, 2), Array(10, 2), Array(11, 2), Array(12, 2)),
TrailingMinusNumbers:=True
Fichier = ActiveWorkbook.Name
Feuille = ActiveSheet.Name
i = 2
Do While i <
Workbooks(Fichier).Sheets(Feuille).Range("K65536").End(xlUp).Row + 1
If Format(Workbooks(Fichier).Sheets(Feuille).Range("K" & i), "hh:mm:ss")
= "23:58:00" Then: Exit Do
i = i + 1
Loop
Workbooks(Fichier).Sheets(Feuille).Range("A3", "K" & i).Copy
Workbooks("Météo
2010.xls").Sheets("Récap").Range("A65535").End(xlUp).Offset(1, 0)
Workbooks(Fichier).Close SaveChanges:úlse
End Sub

Sub convertir()
For Each c In Range([A9], [J490].End(xlUp))
If Val(c.Value) <> 0 Then c.Value = Val(c.Value)
Next c
End Sub












"Guy72" news:
Bonjour,
Peut-on éviter de se servir de la macro "convertir" (elle est trop lente),
même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?
Merci de votre aide.
http://cjoint.com/?mwp62Z5gqN
--
Cordialement
Guy



Guy72
Le #20820451
Bonjour,
Je demande l'ouverture de deux fichiers ".txt", là j'ai une fenêtre qui me
propose tous les fichiers, et je choisis ceux que je veux.
(Voir fichier joint) dans message "Récupération partielle de données" avec
le résultat de FFO le 17/12/2009 à 12:56, car moi, je n'y connais rien en
VBA.
Mais, le code qui a été fait me les laisse en texte et dans ce cas, je ne
peux pas faire de formule, d'ou la conversion.
--
Cordialement
Guy

"LE TROLL"
Bonjour,

Je regardais un peu, mais je ne connais pas vbA...

Eh oui, la lenteur, c'est bien la la limite d'Excel, le mode interprété
avec affichage à ses limites...
Déjà, pourquoi tu utilises des directives de fichiers assembleur
Microsoft, alors qu'elle existe en VB(a) ?

pointeur = FreeFile
Open "cheminnom_fichier.txt" For Input As pointeur
Line Input #pointeur, variable_texte

Tu sembles demander l'ouverture (je crois), de n'importe quel fichier
texte avec l'extension "txt" (*.txt)...
Pourquoi il n'est pas nommé ?
Car si on rajoute un fichier texte qui n'a rien à voir, il va se trouver
ouvert éventuellement, ou s'il y a deux fichiers, il se passe quoi ?

Sinon, je ne sais pas non plus pourquoi lire un fichier, alors que tu
as déjà un fichier, celui d'Excel (peut être est-ce pour l'exemple) ?

Pour aller plus vite :

-1-
Si je comprends un peu, ce qui n'est pas certain, tu modifies le format
d'affichage de certaines données, mais ceci en effet, tu peux le faire en
mémoire, notamment s'il n'y en a que 1000, en chargeant tout dans une
variable indicée, puis en effectuant le formatage, la conversion, puis en
réaffichant tout. Donc, si ça provient d'un fichier texte externe, ça doit
se faire avant l'affichage, évidemment, puis on affiche seulement le
résultat, jamais de calculs visuels d'importance.

-2-
Autre possibilité de gagner de la vitesse, c'est de ne pas afficher la
feuille au moment de la conversion, un objet avec la propriété visible =
False va toujours plus vite ! Si ça dure longtemps, tu mets un amuse-oil
(pendant de l'amuse-gueule) pour faire patienter, un message avec un
compteur (ça ralentit quand même... le compteur, mais moins)...

Ben, avec ces deux mesures tu devrais gagner de la vitesse, toutefois
tu semble avoir une bonne maîtrise de la chose, alors tu devrais peut être
le faire en VB ou vbNet afin que ça devienne une fusée...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.




Sub Traitement()
'
' Macro1 Macro
' Macro enregistrée le 16/12/2009 par FORCET
'
If Workbooks("Météo 2010.xls").Sheets("Récap").Range("A9") <> "" Then
Workbooks("Météo 2010.xls").Sheets("Récap").Range("A9", "K" &
Workbooks("Météo
2010.xls").Sheets("Récap").Range("A65535").End(xlUp).Row).ClearContents
End If
ChDrive ("C")
ChDir (ThisWorkbook.Path)
Fichier = Application.GetOpenFilename("(*.txt),")
Workbooks.OpenText Filename:= _
Fichier, _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited,
TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:úlse, _
Comma:úlse, Space:úlse, Other:=True, FieldInfo:=Array(Array(1,
2), _
Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2),
Array(7, 2), Array(8, 2), _
Array(9, 2), Array(10, 2), Array(11, 2), Array(12, 2)),
TrailingMinusNumbers:=True
Fichier = ActiveWorkbook.Name
Feuille = ActiveSheet.Name
i = 3
Do While i <
Workbooks(Fichier).Sheets(Feuille).Range("K65536").End(xlUp).Row + 1
If Format(Workbooks(Fichier).Sheets(Feuille).Range("K" & i),
"hh:mm:ss") = "00:01:00" Then: Exit Do
i = i + 1
Loop
Workbooks(Fichier).Sheets(Feuille).Range("A" & i, "K" &
Workbooks(Fichier).Sheets(Feuille).Range("K65536").End(xlUp).Row).Copy
Workbooks("Météo
2010.xls").Sheets("Récap").Range("A65535").End(xlUp).Offset(1, 0)
Workbooks(Fichier).Close SaveChanges:úlse
'
ChDrive ("C")
ChDir (ThisWorkbook.Path)
Fichier = Application.GetOpenFilename("(*.txt),")
Workbooks.OpenText Filename:= _
Fichier, _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited,
TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:úlse, Tab:=True,
Semicolon:úlse, _
Comma:úlse, Space:úlse, Other:=True, FieldInfo:=Array(Array(1,
2), _
Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2),
Array(7, 2), Array(8, 2), _
Array(9, 2), Array(10, 2), Array(11, 2), Array(12, 2)),
TrailingMinusNumbers:=True
Fichier = ActiveWorkbook.Name
Feuille = ActiveSheet.Name
i = 2
Do While i <
Workbooks(Fichier).Sheets(Feuille).Range("K65536").End(xlUp).Row + 1
If Format(Workbooks(Fichier).Sheets(Feuille).Range("K" & i),
"hh:mm:ss") = "23:58:00" Then: Exit Do
i = i + 1
Loop
Workbooks(Fichier).Sheets(Feuille).Range("A3", "K" & i).Copy
Workbooks("Météo
2010.xls").Sheets("Récap").Range("A65535").End(xlUp).Offset(1, 0)
Workbooks(Fichier).Close SaveChanges:úlse
End Sub

Sub convertir()
For Each c In Range([A9], [J490].End(xlUp))
If Val(c.Value) <> 0 Then c.Value = Val(c.Value)
Next c
End Sub












"Guy72" news:
Bonjour,
Peut-on éviter de se servir de la macro "convertir" (elle est trop
lente), même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?
Merci de votre aide.
http://cjoint.com/?mwp62Z5gqN
--
Cordialement
Guy






Modeste
Le #20821371
Bonsour® Guy72 avec ferveur ;o))) vous nous disiez :

Bonjour,
Peut-on éviter de se servir de la macro "convertir" (elle est trop
lente), même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?
Merci de votre aide.
http://cjoint.com/?mwp62Z5gqN



c'est ta macro elle-même qui impose la conversion au mode texte !!!!!

FieldInfo:=Array(Array(1, 2), _
Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2), Array(8, 2), _
Array(9, 2), Array(10, 2), Array(11, 2), Array(12, 2))

pour les pressions
Array(1,2) ===> texte (excel considére comme du texte)
Array(1,1) ===> général (excel détecte si c'est du numérique)

pour la colonne 12
Array(12,4) ===> Excel lit : Jour-Mois-Année et convertit en date numerique (40168!/12/2009)


1=xlGeneralFormat Général
2=xlTextFormat Texte
3=xlMDYFormat Format de date Mois-Jour-Année
4=xlDMYFormat Format de date Jour-Mois-Année
5=xlYMDFormat Format de date Année-Mois-Jour
6=xlMYDFormat Format de date Mois-Année-Jour
7=xlDYMFormat Format de date Jour-Année-Mois
8=xlYDMFormat Format de date Année-Jour-Mois
9=xlEMDFormat Date EMD
0=xlSkipColumn Non distribuée
LE TROLL
Le #20822981
Bonjour Modeste,

C'est toi qui a fait le code alors... mais pourquoi ne mets-tu pas de
code VB pour les fichiers ?

Je crois que tu fais du VB ou du vbNet toi, non ?

Cordialement et bonnes fêtes ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Modeste" news:uD%23a%
Bonsour® Guy72 avec ferveur ;o))) vous nous disiez :

Bonjour,
Peut-on éviter de se servir de la macro "convertir" (elle est trop
lente), même si je la mets dans le code?
Peut être imbriquer dans le code du autre façon ?
Merci de votre aide.
http://cjoint.com/?mwp62Z5gqN



c'est ta macro elle-même qui impose la conversion au mode texte !!!!!

FieldInfo:=Array(Array(1, 2), _
Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2),
Array(7, 2), Array(8, 2), _
Array(9, 2), Array(10, 2), Array(11, 2), Array(12, 2))

pour les pressions
Array(1,2) ===> texte (excel considére comme du texte)
Array(1,1) ===> général (excel détecte si c'est du numérique)

pour la colonne 12
Array(12,4) ===> Excel lit : Jour-Mois-Année et convertit en date numerique
(40168!/12/2009)


1=xlGeneralFormat Général
2=xlTextFormat Texte
3=xlMDYFormat Format de date Mois-Jour-Année
4=xlDMYFormat Format de date Jour-Mois-Année
5=xlYMDFormat Format de date Année-Mois-Jour
6=xlMYDFormat Format de date Mois-Année-Jour
7=xlDYMFormat Format de date Jour-Année-Mois
8=xlYDMFormat Format de date Année-Jour-Mois
9=xlEMDFormat Date EMD
0=xlSkipColumn Non distribuée
Publicité
Poster une réponse
Anonyme