| Non ; puisque ça marche avec 800 lignes
Ce n'est pas une question de lignes!
Quand tu définis une variable comme étant un tableau
Exemple : Dim MyVar()
Par désign, le paramètre 2 de la fonction "Match" ne peut pas
fonctionner si la variable "MyVar()" contient plus que 5000 et 6000
entrées pour la version Excel 2000. Cela s'est accru avec les versions
suivantes, mais je ne peux pas te donner la limite pour chacune des
versions.
Exemple :
x = Application.Match(V, MyVar,0)
Cela est problématique si la valeur recherchée est par exemple
le 7001 entrée dans le tableau MyVar.
Si tu veux connaître le nombre d'éléments limites de la fonction Ma tch
de ta version Excel, tu peux exécuter cette macro une fois.
(Cette procédure n'est pas très rapide à l'exécution...)
'-----------------------------------
Sub test()
Dim GestionErreur As String
Dim A As Long, x As Long, MyVar()
On Error Resume Next
For A = 1 To Rows.Count
ReDim Preserve MyVar(1 To A)
MyVar(A) = A
DoEvents
x = Application.Match(A, MyVar, 0)
On Error GoTo GestionErreur
Next
MsgBox "Aucune limite trouvée à la fonction ""Match""."
Exit Sub
GestionErreur:
Err.Clear
MsgBox "Dernière valeur traitée par la procédure est : " & A -1 & " ."
End Sub
'-----------------------------------
Pour Excel 2010, fonction s'arrête de retourner la valeur au-delà de
la position dans la variable "Tableau" MyVar est de : 65536. Cela est
bien en deçà du nombre de lignes dans une feuille du classeur 2010.
MichD
---------------------------------------------------------------
| Non ; puisque ça marche avec 800 lignes
Ce n'est pas une question de lignes!
Quand tu définis une variable comme étant un tableau
Exemple : Dim MyVar()
Par désign, le paramètre 2 de la fonction "Match" ne peut pas
fonctionner si la variable "MyVar()" contient plus que 5000 et 6000
entrées pour la version Excel 2000. Cela s'est accru avec les versions
suivantes, mais je ne peux pas te donner la limite pour chacune des
versions.
Exemple :
x = Application.Match(V, MyVar,0)
Cela est problématique si la valeur recherchée est par exemple
le 7001 entrée dans le tableau MyVar.
Si tu veux connaître le nombre d'éléments limites de la fonction Ma tch
de ta version Excel, tu peux exécuter cette macro une fois.
(Cette procédure n'est pas très rapide à l'exécution...)
'-----------------------------------
Sub test()
Dim GestionErreur As String
Dim A As Long, x As Long, MyVar()
On Error Resume Next
For A = 1 To Rows.Count
ReDim Preserve MyVar(1 To A)
MyVar(A) = A
DoEvents
x = Application.Match(A, MyVar, 0)
On Error GoTo GestionErreur
Next
MsgBox "Aucune limite trouvée à la fonction ""Match""."
Exit Sub
GestionErreur:
Err.Clear
MsgBox "Dernière valeur traitée par la procédure est : " & A -1 & " ."
End Sub
'-----------------------------------
Pour Excel 2010, fonction s'arrête de retourner la valeur au-delà de
la position dans la variable "Tableau" MyVar est de : 65536. Cela est
bien en deçà du nombre de lignes dans une feuille du classeur 2010.
MichD
---------------------------------------------------------------
| Non ; puisque ça marche avec 800 lignes
Ce n'est pas une question de lignes!
Quand tu définis une variable comme étant un tableau
Exemple : Dim MyVar()
Par désign, le paramètre 2 de la fonction "Match" ne peut pas
fonctionner si la variable "MyVar()" contient plus que 5000 et 6000
entrées pour la version Excel 2000. Cela s'est accru avec les versions
suivantes, mais je ne peux pas te donner la limite pour chacune des
versions.
Exemple :
x = Application.Match(V, MyVar,0)
Cela est problématique si la valeur recherchée est par exemple
le 7001 entrée dans le tableau MyVar.
Si tu veux connaître le nombre d'éléments limites de la fonction Ma tch
de ta version Excel, tu peux exécuter cette macro une fois.
(Cette procédure n'est pas très rapide à l'exécution...)
'-----------------------------------
Sub test()
Dim GestionErreur As String
Dim A As Long, x As Long, MyVar()
On Error Resume Next
For A = 1 To Rows.Count
ReDim Preserve MyVar(1 To A)
MyVar(A) = A
DoEvents
x = Application.Match(A, MyVar, 0)
On Error GoTo GestionErreur
Next
MsgBox "Aucune limite trouvée à la fonction ""Match""."
Exit Sub
GestionErreur:
Err.Clear
MsgBox "Dernière valeur traitée par la procédure est : " & A -1 & " ."
End Sub
'-----------------------------------
Pour Excel 2010, fonction s'arrête de retourner la valeur au-delà de
la position dans la variable "Tableau" MyVar est de : 65536. Cela est
bien en deçà du nombre de lignes dans une feuille du classeur 2010.
MichD
---------------------------------------------------------------
J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type
Faut-il changer le Pos As Long ?
J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type
Faut-il changer le Pos As Long ?
J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type
Faut-il changer le Pos As Long ?
>J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type Faut-il changer le Pos As
Long ?
A mon avis, Excel est à court de mémoire. Utilise plutôt la macro de mon
post de 15:41:05.
Daniel
>
J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type Faut-il changer le Pos As
Long ?
A mon avis, Excel est à court de mémoire. Utilise plutôt la macro de mon
post de 15:41:05.
Daniel
>J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type Faut-il changer le Pos As
Long ?
A mon avis, Excel est à court de mémoire. Utilise plutôt la macro de mon
post de 15:41:05.
Daniel
"DanielCo" a écrit dans le message de news:
kqcrpb$et5$>J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type Faut-il changer le Pos As
Long ?
A mon avis, Excel est à court de mémoire. Utilise plutôt la macro de mon
post de 15:41:05.
Daniel
Il y a un malentendu, j'ai justement testé la macro de 15:41
celle d'hier ramait , j'ai attendu un bon moment et j'ai abandonné
--- news://freenews.netfront.net/ - complaints: ---
"DanielCo" <dcolardelleZZZ@free.fr> a écrit dans le message de news:
kqcrpb$et5$1@speranza.aioe.org...
>
J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type Faut-il changer le Pos As
Long ?
A mon avis, Excel est à court de mémoire. Utilise plutôt la macro de mon
post de 15:41:05.
Daniel
Il y a un malentendu, j'ai justement testé la macro de 15:41
celle d'hier ramait , j'ai attendu un bon moment et j'ai abandonné
--- news://freenews.netfront.net/ - complaints: news@netfront.net ---
"DanielCo" a écrit dans le message de news:
kqcrpb$et5$>J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type Faut-il changer le Pos As
Long ?
A mon avis, Excel est à court de mémoire. Utilise plutôt la macro de mon
post de 15:41:05.
Daniel
Il y a un malentendu, j'ai justement testé la macro de 15:41
celle d'hier ramait , j'ai attendu un bon moment et j'ai abandonné
--- news://freenews.netfront.net/ - complaints: ---
Sûr que c'est beaucoup plus long. J'ai repris la première version en
scindant le traitement par paquets de 100 lignes. Si c'est encore trop,
on pourra diminuer :
Sub Compte()
Dim Tabl, Item, Txt As String, C As Range, Ligne As Long, Ctr, Dico
As Object
Dim Result() As Long
Application.ScreenUpdating = False
Sheets(2).[A:B].ClearContents
Tabl = Array("'", "(", ")", ".", ";") 'etc.
For Each Item In Tabl
[A:A].Replace Item, " "
Next Item
Set Dico = CreateObject("Scripting.Dictionary")
For i = 1 To Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row Step 100
With Sheets(1)
Txt = ""
Dico.RemoveAll
ReDim Result(0)
Ctr = -1
For Each C In .Range(.Cells(i, 1), .Cells(i + 99, 1).End(xlUp))
Txt = Txt & " " & C.Value
Next C
Txt = Right(Txt, Len(Txt) - 1)
Tabl = Split(Txt, " ")
For Each Item In Tabl
If Item <> "" Then
If Not Dico.exists(Item) Then
Dico.Add Item, Item
Ctr = Ctr + 1
ReDim Preserve Result(Ctr)
Result(Ctr) = Result(Ctr) + 1
Else
Pos = Application.Match(Item, Dico.items, 0)
Result(Pos - 1) = Result(Pos - 1) + 1
End If
End If
Next Item
End With
With Sheets(2)
For x = 0 To Dico.Count - 1
Ligne = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Var = Dico.items
If Not IsNumeric(Application.Match(Var(x), .[A:A], 0)) Then
.Cells(Ligne, 1) = Var(x)
.Cells(Ligne, 2) = Result(x)
Else
Ligne = Application.Match(Var(x), .[A:A], 0)
.Cells(Ligne, 2) = .Cells(Ligne, 2) + 1
End If
Next x
End With
Next i
Application.ScreenUpdating = True
End Sub
Daniel"DanielCo" a écrit dans le message de news:
kqcrpb$et5$>J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type Faut-il changer le
Pos As Long ?
A mon avis, Excel est à court de mémoire. Utilise plutôt la macro de
mon post de 15:41:05.
Daniel
Il y a un malentendu, j'ai justement testé la macro de 15:41
celle d'hier ramait , j'ai attendu un bon moment et j'ai abandonné
--- news://freenews.netfront.net/ - complaints: ---
Sûr que c'est beaucoup plus long. J'ai repris la première version en
scindant le traitement par paquets de 100 lignes. Si c'est encore trop,
on pourra diminuer :
Sub Compte()
Dim Tabl, Item, Txt As String, C As Range, Ligne As Long, Ctr, Dico
As Object
Dim Result() As Long
Application.ScreenUpdating = False
Sheets(2).[A:B].ClearContents
Tabl = Array("'", "(", ")", ".", ";") 'etc.
For Each Item In Tabl
[A:A].Replace Item, " "
Next Item
Set Dico = CreateObject("Scripting.Dictionary")
For i = 1 To Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row Step 100
With Sheets(1)
Txt = ""
Dico.RemoveAll
ReDim Result(0)
Ctr = -1
For Each C In .Range(.Cells(i, 1), .Cells(i + 99, 1).End(xlUp))
Txt = Txt & " " & C.Value
Next C
Txt = Right(Txt, Len(Txt) - 1)
Tabl = Split(Txt, " ")
For Each Item In Tabl
If Item <> "" Then
If Not Dico.exists(Item) Then
Dico.Add Item, Item
Ctr = Ctr + 1
ReDim Preserve Result(Ctr)
Result(Ctr) = Result(Ctr) + 1
Else
Pos = Application.Match(Item, Dico.items, 0)
Result(Pos - 1) = Result(Pos - 1) + 1
End If
End If
Next Item
End With
With Sheets(2)
For x = 0 To Dico.Count - 1
Ligne = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Var = Dico.items
If Not IsNumeric(Application.Match(Var(x), .[A:A], 0)) Then
.Cells(Ligne, 1) = Var(x)
.Cells(Ligne, 2) = Result(x)
Else
Ligne = Application.Match(Var(x), .[A:A], 0)
.Cells(Ligne, 2) = .Cells(Ligne, 2) + 1
End If
Next x
End With
Next i
Application.ScreenUpdating = True
End Sub
Daniel
"DanielCo" <dcolardelleZZZ@free.fr> a écrit dans le message de news:
kqcrpb$et5$1@speranza.aioe.org...
>
J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type Faut-il changer le
Pos As Long ?
A mon avis, Excel est à court de mémoire. Utilise plutôt la macro de
mon post de 15:41:05.
Daniel
Il y a un malentendu, j'ai justement testé la macro de 15:41
celle d'hier ramait , j'ai attendu un bon moment et j'ai abandonné
--- news://freenews.netfront.net/ - complaints: news@netfront.net ---
Sûr que c'est beaucoup plus long. J'ai repris la première version en
scindant le traitement par paquets de 100 lignes. Si c'est encore trop,
on pourra diminuer :
Sub Compte()
Dim Tabl, Item, Txt As String, C As Range, Ligne As Long, Ctr, Dico
As Object
Dim Result() As Long
Application.ScreenUpdating = False
Sheets(2).[A:B].ClearContents
Tabl = Array("'", "(", ")", ".", ";") 'etc.
For Each Item In Tabl
[A:A].Replace Item, " "
Next Item
Set Dico = CreateObject("Scripting.Dictionary")
For i = 1 To Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row Step 100
With Sheets(1)
Txt = ""
Dico.RemoveAll
ReDim Result(0)
Ctr = -1
For Each C In .Range(.Cells(i, 1), .Cells(i + 99, 1).End(xlUp))
Txt = Txt & " " & C.Value
Next C
Txt = Right(Txt, Len(Txt) - 1)
Tabl = Split(Txt, " ")
For Each Item In Tabl
If Item <> "" Then
If Not Dico.exists(Item) Then
Dico.Add Item, Item
Ctr = Ctr + 1
ReDim Preserve Result(Ctr)
Result(Ctr) = Result(Ctr) + 1
Else
Pos = Application.Match(Item, Dico.items, 0)
Result(Pos - 1) = Result(Pos - 1) + 1
End If
End If
Next Item
End With
With Sheets(2)
For x = 0 To Dico.Count - 1
Ligne = .Cells(Rows.Count, 1).End(xlUp).Row + 1
Var = Dico.items
If Not IsNumeric(Application.Match(Var(x), .[A:A], 0)) Then
.Cells(Ligne, 1) = Var(x)
.Cells(Ligne, 2) = Result(x)
Else
Ligne = Application.Match(Var(x), .[A:A], 0)
.Cells(Ligne, 2) = .Cells(Ligne, 2) + 1
End If
Next x
End With
Next i
Application.ScreenUpdating = True
End Sub
Daniel"DanielCo" a écrit dans le message de news:
kqcrpb$et5$>J'ai arrêté la subtest à 25000
Il s'est planté à la ligne 2434 du fichier
sur la ligne de code : .Cells(Pos, 2) = .Cells(Pos, 2) + 1
Erreur d'exécution 13, incompatibilité de type Faut-il changer le
Pos As Long ?
A mon avis, Excel est à court de mémoire. Utilise plutôt la macro de
mon post de 15:41:05.
Daniel
Il y a un malentendu, j'ai justement testé la macro de 15:41
celle d'hier ramait , j'ai attendu un bon moment et j'ai abandonné
--- news://freenews.netfront.net/ - complaints: ---
A priori, c'est le ReDim Preserve qui va manger beaucoup de temps
en cas de boucle longue : chaque ReDim Preserve va réallouer de la
mémoire et aussi recopier les données dans la nouvelle plage de mémoire
(équivalent de c "realloc")
A priori, c'est le ReDim Preserve qui va manger beaucoup de temps
en cas de boucle longue : chaque ReDim Preserve va réallouer de la
mémoire et aussi recopier les données dans la nouvelle plage de mémoire
(équivalent de c "realloc")
A priori, c'est le ReDim Preserve qui va manger beaucoup de temps
en cas de boucle longue : chaque ReDim Preserve va réallouer de la
mémoire et aussi recopier les données dans la nouvelle plage de mémoire
(équivalent de c "realloc")
Intéressant, je ferais un essai. Pour le moment, ce n'est pas une
question de temps mais de mémoire.
Daniel
Intéressant, je ferais un essai. Pour le moment, ce n'est pas une
question de temps mais de mémoire.
Daniel
Intéressant, je ferais un essai. Pour le moment, ce n'est pas une
question de temps mais de mémoire.
Daniel
j'ai attendu plus d'un quart d'heure et j'ai arrêté.
Pour hier soir, je précise que le code s'est planté sur la ligne de code :
.Cells(Pos, 2) = .Cells(Pos, 2) + 1 msg = erreur 13
et qu'il a saisi 2434 mots avec leur nombre dans le Feuil2
j'ai attendu plus d'un quart d'heure et j'ai arrêté.
Pour hier soir, je précise que le code s'est planté sur la ligne de code :
.Cells(Pos, 2) = .Cells(Pos, 2) + 1 msg = erreur 13
et qu'il a saisi 2434 mots avec leur nombre dans le Feuil2
j'ai attendu plus d'un quart d'heure et j'ai arrêté.
Pour hier soir, je précise que le code s'est planté sur la ligne de code :
.Cells(Pos, 2) = .Cells(Pos, 2) + 1 msg = erreur 13
et qu'il a saisi 2434 mots avec leur nombre dans le Feuil2
Le mercredi 26 juin 2013 11:54:07 UTC+2, DanielCo a écrit :Intéressant, je ferais un essai. Pour le moment, ce n'est pas une
question de temps mais de mémoire.
Daniel
j'ai attendu plus d'un quart d'heure et j'ai arrêté.
Pour hier soir, je précise que le code s'est planté sur la ligne de code :
.Cells(Pos, 2) = .Cells(Pos, 2) + 1 msg = erreur 13
et qu'il a saisi 2434 mots avec leur nombre dans le Feuil2
Le mercredi 26 juin 2013 11:54:07 UTC+2, DanielCo a écrit :
Intéressant, je ferais un essai. Pour le moment, ce n'est pas une
question de temps mais de mémoire.
Daniel
j'ai attendu plus d'un quart d'heure et j'ai arrêté.
Pour hier soir, je précise que le code s'est planté sur la ligne de code :
.Cells(Pos, 2) = .Cells(Pos, 2) + 1 msg = erreur 13
et qu'il a saisi 2434 mots avec leur nombre dans le Feuil2
Le mercredi 26 juin 2013 11:54:07 UTC+2, DanielCo a écrit :Intéressant, je ferais un essai. Pour le moment, ce n'est pas une
question de temps mais de mémoire.
Daniel
j'ai attendu plus d'un quart d'heure et j'ai arrêté.
Pour hier soir, je précise que le code s'est planté sur la ligne de code :
.Cells(Pos, 2) = .Cells(Pos, 2) + 1 msg = erreur 13
et qu'il a saisi 2434 mots avec leur nombre dans le Feuil2
j'ai attendu plus d'un quart d'heure et j'ai arrêté.
Pour hier soir, je précise que le code s'est planté sur la ligne de code :
.Cells(Pos, 2) = .Cells(Pos, 2) + 1 msg = erreur 13
et qu'il a saisi 2434 mots avec leur nombre dans le Feuil2
j'ai attendu plus d'un quart d'heure et j'ai arrêté.
Pour hier soir, je précise que le code s'est planté sur la ligne de code :
.Cells(Pos, 2) = .Cells(Pos, 2) + 1 msg = erreur 13
et qu'il a saisi 2434 mots avec leur nombre dans le Feuil2
j'ai attendu plus d'un quart d'heure et j'ai arrêté.
Pour hier soir, je précise que le code s'est planté sur la ligne de code :
.Cells(Pos, 2) = .Cells(Pos, 2) + 1 msg = erreur 13
et qu'il a saisi 2434 mots avec leur nombre dans le Feuil2