Recherche accélérateur de macro ;-)

Le
garnote
Bonjour, Bonjour,

Le mathématicien Émile Fourrey a déjà posé le problème
suivant : Si l'on inscrit à la suite les uns des autres, à partir
de 1 et dans leur ordre naturel les nombres entiers, quel
sera le 552 715 ième chiffre de la liste ?
(12345678910111213141516)
On peut résoudre ce problème sans programmation
mais j'ai voulu utiliser une macro qui me permettrait
de connaître le n ième chiffre de cette liste.
J'ai formaté A1 en texte et j'y entre le n ième chiffre
que je veux trouver.
Pour n = 552 715, ma macro prend 1 min 42 sec.
Peut-on la modifier pour la rendre plus rapide ?
Contient-elle des incongruités ?
Quelle peut bien être la valeur limite de n ?

Public Sub Fourrey()
Dim n As String
Dim i As Long
Dim suite As String
Dim L As Long
t0 = Timer
n = Range("A1").Value
Do Until L >= CLng(n)
i = i + 1
suite = suite & i
L = Len(suite)
Loop
MsgBox Mid(suite, n, 1) & vbLf & Format((Timer - t0) / 60, "0.00") & "
min"
End Sub

Serge
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LSteph
Le #20050351
Bonjour Serge,

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel
As Boolean)
Cancel = True
Dim n As Long
Dim i As Long
Dim x As Long
Dim t0 As Double
t0 = Timer
n = CLng([a1])
Application.ScreenUpdating = False
x = 0
Do While x < n
i = i + 1
x = x + Len(CStr(i))

Loop
MsgBox "x=" & x _
& vbLf & "i=" & i _
& vbLf & n & vbLf _
& Mid(CStr(i), Len(CStr(i)) - (x - n), 1) _
& vbLf & Format((Timer - t0) / 60, "0.00") & " Min "
End Sub

'lSteph

On 2 sep, 18:33, "garnote"
Bonjour, Bonjour,

Le mathématicien Émile Fourrey a déjà posé le problème
suivant : Si l'on inscrit à la suite les uns des autres, à partir
de 1 et dans leur ordre naturel les nombres entiers, quel
sera le 552 715 ième chiffre de la liste ?
(12345678910111213141516...)
On peut résoudre ce problème sans programmation
mais j'ai voulu utiliser une macro qui me permettrait
de connaître le n ième chiffre de cette liste.
J'ai formaté A1 en texte et j'y entre le n ième chiffre
que je veux trouver.
Pour n = 552 715, ma macro prend 1 min 42 sec.
Peut-on la modifier pour la rendre plus rapide ?
Contient-elle des incongruités ?
Quelle peut bien être la valeur limite de n ?

Public Sub Fourrey()
    Dim n As String
    Dim i As Long
    Dim suite As String
    Dim L As Long
    t0 = Timer
    n = Range("A1").Value
    Do Until L >= CLng(n)
        i = i + 1
        suite = suite & i
        L = Len(suite)
    Loop
    MsgBox Mid(suite, n, 1) & vbLf & Format((Timer - t0) / 60, "0.00" ) & "
min"
End Sub

Serge


garnote
Le #20052621
Salut Stéphane,

De la dynamite ;-)
Ingénieux et hyper rapide !

Merci bien,
Serge


"LSteph"
Bonjour Serge,

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel
As Boolean)
Cancel = True
Dim n As Long
Dim i As Long
Dim x As Long
Dim t0 As Double
t0 = Timer
n = CLng([a1])
Application.ScreenUpdating = False
x = 0
Do While x < n
i = i + 1
x = x + Len(CStr(i))

Loop
MsgBox "x=" & x _
& vbLf & "i=" & i _
& vbLf & n & vbLf _
& Mid(CStr(i), Len(CStr(i)) - (x - n), 1) _
& vbLf & Format((Timer - t0) / 60, "0.00") & " Min "
End Sub

'lSteph

On 2 sep, 18:33, "garnote"
Bonjour, Bonjour,

Le mathématicien Émile Fourrey a déjà posé le problème
suivant : Si l'on inscrit à la suite les uns des autres, à partir
de 1 et dans leur ordre naturel les nombres entiers, quel
sera le 552 715 ième chiffre de la liste ?
(12345678910111213141516...)
On peut résoudre ce problème sans programmation
mais j'ai voulu utiliser une macro qui me permettrait
de connaître le n ième chiffre de cette liste.
J'ai formaté A1 en texte et j'y entre le n ième chiffre
que je veux trouver.
Pour n = 552 715, ma macro prend 1 min 42 sec.
Peut-on la modifier pour la rendre plus rapide ?
Contient-elle des incongruités ?
Quelle peut bien être la valeur limite de n ?

Public Sub Fourrey()
Dim n As String
Dim i As Long
Dim suite As String
Dim L As Long
t0 = Timer
n = Range("A1").Value
Do Until L >= CLng(n)
i = i + 1
suite = suite & i
L = Len(suite)
Loop
MsgBox Mid(suite, n, 1) & vbLf & Format((Timer - t0) / 60, "0.00") & "
min"
End Sub

Serge


LSteph
Le #20058521
;-) Tu avais déjà presque tout écrit, je me suis contenté de te
libérer de cette lourde chaine!

On 3 sep, 16:45, "garnote"
Salut Stéphane,

De la dynamite ;-)
Ingénieux et hyper rapide !

Merci bien,
Serge

"LSteph"
Bonjour Serge,

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel
As Boolean)
Cancel = True
    Dim n As Long
    Dim i As Long
    Dim x As Long
    Dim t0 As Double
    t0 = Timer
    n = CLng([a1])
    Application.ScreenUpdating = False
    x = 0
    Do While x < n
        i = i + 1
        x = x + Len(CStr(i))

    Loop
    MsgBox "x=" & x _
    & vbLf & "i=" & i _
    & vbLf & n & vbLf _
    & Mid(CStr(i), Len(CStr(i)) - (x - n), 1) _
    & vbLf & Format((Timer - t0) / 60, "0.00") & " Min "
End Sub

'lSteph

On 2 sep, 18:33, "garnote"


> Bonjour, Bonjour,

> Le mathématicien Émile Fourrey a déjà posé le problème
> suivant : Si l'on inscrit à la suite les uns des autres, à partir
> de 1 et dans leur ordre naturel les nombres entiers, quel
> sera le 552 715 ième chiffre de la liste ?
> (12345678910111213141516...)
> On peut résoudre ce problème sans programmation
> mais j'ai voulu utiliser une macro qui me permettrait
> de connaître le n ième chiffre de cette liste.
> J'ai formaté A1 en texte et j'y entre le n ième chiffre
> que je veux trouver.
> Pour n = 552 715, ma macro prend 1 min 42 sec.
> Peut-on la modifier pour la rendre plus rapide ?
> Contient-elle des incongruités ?
> Quelle peut bien être la valeur limite de n ?

> Public Sub Fourrey()
> Dim n As String
> Dim i As Long
> Dim suite As String
> Dim L As Long
> t0 = Timer
> n = Range("A1").Value
> Do Until L >= CLng(n)
> i = i + 1
> suite = suite & i
> L = Len(suite)
> Loop
> MsgBox Mid(suite, n, 1) & vbLf & Format((Timer - t0) / 60, "0.00") & "
> min"
> End Sub

> Serge- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Publicité
Poster une réponse
Anonyme