Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Ma fonction tourne à l'infini

  • Initiateur de la discussion Initiateur de la discussion pepsister
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

pepsister

Guest
Bonjour,

J'ai un bout de code me permettant de supprimer les espaces superflus dans mes cellules, le problème c'est que mon code ne s'arrête jamais, comment faire?

Mon tableau possède une centaine de colonnes pour 90 000 lignes. La macro tourne plus de 30min avant que je l'arrête.

Voici mon bout de code:
Code:
Dim Cell As Range
Application.EnableEvents = False
For Each Cell In ActiveSheet.UsedRange
    Cell.Value = Application.WorksheetFunction.Trim(Cell.Value)
Next
Application.EnableEvents = True
End Sub

Comment faire pour que la macro se termine un jour et soit moins longue?

Merci de votre aide
 
Re : Ma fonction tourne à l'infini

Bonjour

pas de pb avec ton code. Vérifie quel est vraiment le used range sur ta feuille
Ajoute également un

Application.ScreenUpdating = False
ModeRecalcul = Application.Calculation
' Réglage du recalcul sur mode manuel
Application.Calculation = xlCalculationManual

en début de macro et remet tout ça à vrai et en auto à la fin
 
Re : Ma fonction tourne à l'infini

Bonjour,

Fini les boucles infini !!!

en deux ligne avec explication c'est très efficace.

"Mon tableau possède une centaine de colonnes pour 90 000 lignes. La macro tourne plus de 30min avant que je l'arrête" = avec mon code se sera Instantané.

Code :

VB:
Sub test()

' Tableaux
' Range(Cells(2, 2) :
' Premiere celule du tableau pour 2,2 c'est la celule B2
' Cells(Cells(65536, 2).End(xlUp).Row, Cells(2, 256).End(xlToLeft).Column)
' ici Cells(65536, 2).End(xlUp).Row = Pour la derniére ligne "Non Vide" de la colonne B2
' Ici Cells(2, 256).End(xlToLeft).Column = Pour la derniére colonne "Non Vide" de la colonne IV2
'
Set T = Range(Cells(2, 2), Cells(Cells(65536, 2).End(xlUp).Row, Cells(2, 256).End(xlToLeft).Column))
' Nettoyage format du tableau
Range(T.Address) = Application.Trim(T.Value) ' 'Supprime tous les espaces en trop

End Sub

PS : Pour cela un lien explicatif sur cette fonction "ActiveSheet.UsedRange.select" qui sélectionne toute la feuille

Utilisation des fonctions Excel dans VBA

Laurent
 

Pièces jointes

Dernière édition:
Re : Ma fonction tourne à l'infini

Désolé mais avec ce code je me prends une erreur 13: incompatibilité de type.
J'ai en effet modifié un peu le code parce que j'ai bcp plus de lignes que ce que tu mets dans ton bout de code
Code:
' Tableau
Set T = Range(Cells(1, 1), Cells(Cells(1048576, 1).End(xlUp).Row, Cells(1, 16384).End(xlToLeft).Column))
' Nettoyage format du tableau
Range(T.Address) = Application.Trim(T.Value) ' 'Supprime tous les espaces en trop
 
Re : Ma fonction tourne à l'infini

Bonsoir,

Sub test()

' Tableau
' Nettoyage format du tableau
For i = 1 To 1048576
For j = 1 To 16384
Cells(i, j) = Application.Trim(Cells(i, j)) ' 'Supprime tous les espaces en trop
Next j
Next i

End Sub

Laurent
 
Re : Ma fonction tourne à l'infini

Bonjour pepsister, à tous,

Un essai en utilisant une fonction personnalisée et un tableau pour tenter d'accélérer l'exécution.
Cliquer sur "Init" pour inscrire sur la feuille 9 000 000 cellules avec texte.
Cliquer sur "Go" pour lancer la suppression des espaces redondants.
(env. 12s pour l'initialisation et un peu moins de 3mn pour la suppression sur mon bouzin).

Le code:
VB:
Sub TestTrim()
Dim maZone As Range, Col As Range, colVals
Dim h0 As Single, i As Long, ModeRecalcul

h0 = Timer
Application.ScreenUpdating = False
ModeRecalcul = Application.Calculation
Application.Calculation = xlCalculationManual

Set maZone = ActiveSheet.UsedRange
For Each Col In maZone.Columns
  colVals = Col.Value
  For i = 1 To UBound(colVals)
    colVals(i, 1) = xlTrim(colVals(i, 1))
  Next i
  Col = colVals
Next Col

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
ActiveSheet.Columns("A:CW").EntireColumn.AutoFit
MsgBox Format(Timer - h0, "0,00""s""")
End Sub

Function xlTrim(xS) As String
Dim L
xlTrim = Trim(xS)
Do
  L = Len(xlTrim)
  xlTrim = Replace(xlTrim, "  ", " ")
Loop Until L = Len(xlTrim)
End Function
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
2 K
T
Réponses
14
Affichages
4 K
thithithi
T
S
Réponses
5
Affichages
982
sterf
S
P
  • Question Question
Réponses
8
Affichages
13 K
N
Réponses
1
Affichages
3 K
N
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…