Macro sur 1 million de lignes: "excel ne répond pas"

TOT127 Messages postés 898 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je suis entrain de faire tourner cette macro sur excel:

Sub Uppercase()
' Loop to cycle through each cell in the specified range.
For Each x In Range("A1:O836307")
' Change the text in the range to uppercase letters.
x.Value = UCase(x.value)
Next
End Sub


Autant dire que ça ne se fait pas en 2minutes. Mac dit qu'excel ne répond pas.
A noter que sur les O colonnes, j'en ai au moins 10 avec du texte assez long.
Pendant que j'écrivais ce message j'ai eu l'erreur 6: "dépassement des capacités".



Qu'en pensez vous ?

Merci beaucoup (j'aurai souvent ce problème).


Aya
A voir également:

2 réponses

Ant049 Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   22
 
Bonjour,

Sous quelle version d'Excel est enregistrée ton fichier ?
1
TOT127 Messages postés 898 Date d'inscription   Statut Membre Dernière intervention   96
 
BOnjour,
j'ia excel 2011 pour mac
0
TOT127 Messages postés 898 Date d'inscription   Statut Membre Dernière intervention   96
 
(la macro a bien marché sur un test qui comptait 40 lignes d'un autre fichier, et dans mon gros fichier a fait quelques centaines de lignes puis s'est stoppée)
0
Ant049 Messages postés 154 Date d'inscription   Statut Membre Dernière intervention   22
 
0
TOT127 Messages postés 898 Date d'inscription   Statut Membre Dernière intervention   96
 
merci je vais lire ce lien

où dois je insérer qc du type "MonResultat = CLong(MaVar) * MaVar1" dans la macro?
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

15 colonnes = 15 millions de cellules !!! Déraisonnable
Il faut limiter au strict nécessaire : les seules cellules qui contienne un texte non issu de formules :
    Dim pl As Range, c As Range
    On Error Resume Next
    Set pl = [A:O].SpecialCells(xlCellTypeConstants, xlTextValues)
    On Error GoTo 0
    If Not pl Is Nothing Then
        For Each c In pl
            Debug.Print c.Address ' ton traitement
        Next c
    End If
End Sub

et comme tu travailles sur feuille tu peux ajouter au début :
Application.Screenupdating=False
eric
1
TOT127 Messages postés 898 Date d'inscription   Statut Membre Dernière intervention   96
 
Je sais que c'est absurde tu as bien raison. :( Le problème c'est qu'on m'a envoyé ces données en excel. Après retraitement, je les mettrai sur stata (un logiciel de statistiques, notamment utile en épidémiologie etc) et ça devient des mini fichiers tout légers et rapides...mais entre temps, je dois faire ça.

Je viens d'essayer d'appliquer la macro, j'attends de voirr si ça marche. Elle est donc comme ça:

Sub macromaj()
Application.Screenupdating=False
Dim pl As Range, c As Range
On Error Resume Next
Set pl = [A:O].SpecialCells(xlCellTypeConstants, xlTextValues)
On Error GoTo 0
If Not pl Is Nothing Then
For Each c In pl
Debug.Print c.Address ' ton traitement
Next c
End If
End Sub



Le fait que je sois sur mac ne posera pas de problème ?



merci beaucoup!
0
TOT127 Messages postés 898 Date d'inscription   Statut Membre Dernière intervention   96
 
NB: en fait dans mon fichier, il n'y a des minuscules qu'en colonne B D et M. Et dans l'autre que en M.

Comment modifier la macro pour qu'il bosse que sur ça ?
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Pour 3 colonnes :
Sub macromaj()
    Dim pl As Range, c As Range
    Application.ScreenUpdating = False
    On Error Resume Next
    Set pl = Range("B:B,D:D,M:M").SpecialCells(xlCellTypeConstants, xlTextValues)
    On Error GoTo 0
    If Not pl Is Nothing Then
        For Each c In pl
            Debug.Print c.Address    ' ton traitement
        Next c
    End If
End Sub


PS : et si les cellules de tes 3 colonnes contiennent presque toutes des modif à faire il faudrait faire autrement pour qur ce soit presque instantané.
Est-ce le cas ?
Si oui est-ce uniquement des saisies ou y'a-t'il des formules dans les plages considérées ?

PS2 : si tu rentres dans ces critères :
Sub macromaj()
    Dim cols, col As Long, lig As Long, nblig As Long, datas
    
    cols = Array(2, 4, 15) ' mettre les colonnes concernées
    For col = 0 To UBound(cols)
        nblig = Cells(Rows.Count, cols(col)).End(xlUp).Row - 1
        datas = Cells(2, cols(col)).Resize(nblig).Value
        For lig = 1 To nblig
            If Not IsNumeric(datas(lig, 1)) Then datas(lig, 1) = UCase(datas(lig, 1))
        Next lig
        Cells(2, cols(col)).Resize(nblig, 1) = datas
    Next col
End Sub

pas sur à 100% pour Mac (?)
0
TOT127 Messages postés 898 Date d'inscription   Statut Membre Dernière intervention   96
 
Bonjour,
Aucune des celules de ma base n'a de formules, par contre, dans les colonnes concernées, l'intégralité de la colonne est à mettre en majuscule en effet.
JE vais essayer!

Juste une question: une macro comme ça va durer combien de temps ? Et comment savoir quand elle a fini ?

merci
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Quand tu n'as plus le sablier c'est fini.
La 2nde possibilité sera très rapide, peut-être moins d'1 s.
0