Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calcul trop lente

12 réponses
Avatar
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

10 réponses

1 2
Avatar
Caetera
"Guy72" a écrit dans le message de news:

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
Avatar
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" a écrit dans le message de groupe de 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
Avatar
Guy72
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" a écrit dans le message de news:

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" a écrit dans le message de groupe de
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



Avatar
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" a écrit dans le message de groupe de 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" a écrit dans le message de news:

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" a écrit dans le message de groupe de
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



Avatar
Guy72
Bonjour Caetera
Ok ça fonctionne et merci
--
Cordialement
Guy

"Caetera" <EtiennePloufCahé@wanadoo.fr> a écrit dans le message de news:

"Guy72" a écrit dans le message de news:

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



Avatar
Guy72
ça fonctionne.
Merci.
--
Cordialement
Guy

"michdenis" a écrit dans le message de news:
%
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" a écrit dans le message de groupe de
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" a écrit dans le message de news:

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" a écrit dans le message de groupe de
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






Avatar
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" a écrit dans le message de
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



Avatar
Guy72
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" <le a écrit dans le message de news:

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" a écrit dans le message de
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






Avatar
Modeste
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
Avatar
LE TROLL
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" a écrit dans le message de
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
1 2