[Résolu] VBA accélérer replace

  • Initiateur de la discussion Initiateur de la discussion adel53
  • 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 !

adel53

XLDnaute Occasionnel
bonjour

J'ai besoin de votre aide pour accélerer ce bout de code.
En gros je reçois de différent labo des analyses d'huile que j'importe et je retraite pour homégéniser les résultats de différents labo.

Cette partie de ma macro est celle qui consomme le plus de temps pouvez vous svp m'aider à l'optimiser

Code:
Sub Symboles()
    Columns("F:AP").Select
    Selection.Replace What:="9999", Replacement:="1", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False

    Selection.Replace What:="~*", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    
    Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    
    Selection.Replace What:="-", Replacement:="", LookAt:=xlWhole, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    
    Selection.Replace What:="<1", Replacement:="0,9", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    
    Selection.Replace What:="<0", Replacement:="0", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    
    Selection.Replace What:="/", Replacement:=",", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    
    Range("a1").Activate
    Application.Calculate
End Sub

Cette procédure aussi prends énormement de temps


Code:
Sub Formats()
    Dim derligne As Integer
    derligne = Range("B3000").End(xlUp).Row
    For Each c In Range("F2:AP" & derligne).Cells
        If c.Value <> "" Then
            c.Value = c.Value * 1
        End If
    Next
    Debug.Print "format " & ActiveSheet.Name
    Application.Calculate
End Sub
 
Dernière édition:
Re : VBA accélérer replace

bonjour adel53
un exemple pour la 1 qst.. code assez brut a voir en attendant mieux

pour la plage je prends la colonne f donc 6 adapte

Code:
Sub es()
Dim x As Variant, r As Long, c As Long
  With Application
 .Calculation = xlCalculationManual: .ScreenUpdating = 0: .DisplayAlerts = 0
    x = Range("f1:ap" & Cells(Rows.Count, 6).End(3).Row).Value
     For r = 1 To UBound(x, 1)
     For c = 1 To UBound(x, 2)
           x(r, c) = Replace(x(r, c), "9999", "1")
           x(r, c) = Replace(x(r, c), "~*", "")
           x(r, c) = Replace(x(r, c), ".", ",")
     'ect
     Next c: Next r
   Range("f1:ap" & Cells(Rows.Count, 6).End(3).Row).Value = x
  .Calculation = xlCalculationAutomatic: .ScreenUpdating = 1: .DisplayAlerts = 1
 End With
End Sub
 
Re : VBA accélérer replace

Bonjour adel53

Tu souhaites gagner du temps
Cela tombe bien : nous aussi
Dans cette optique , tu nous prépares un petit fichier exemple a partir de ton fichier (sans données confidentielles )
Quelques dizaines de lignes devraient suffire

Edit : Salut Laetitia (pas rafraîchi assez vite)
 
Re : VBA accélérer replace

Voici un fichier exemple

Je dois gérer les analyses de 4 labos différents (CSV, Excel) une fois le fichier importé je procède à l'uniformisation des fichiers afin de faire du reporting derrière et décider si oui ou non une vidange doit être réalisé.

Laetitia J'ai erreur execution 13 avec votre macro

Merci pour votre aide
 

Pièces jointes

Re : VBA accélérer replace

Re

Une petite accélération peut-être avec cette macro:

Code:
Sub test()
debut = Timer
Application.Calculation = xlCalculationManual
tablo = Range("F2:AP" & Range("F" & Rows.Count).End(xlUp).Row)
voir = Array("9999", "~*", ".", "-", "<1", "<0", "/")
mettre = Array("1", "", ",", "", "0,9", "0", ",")
ReDim tabres(UBound(tablo, 1), UBound(tablo, 2))
For n = LBound(tablo, 1) To UBound(tablo, 1)
 For m = LBound(tablo, 2) To UBound(tablo, 2)
 tabres(n, m) = tablo(n, m)
   For p = LBound(voir) To UBound(voir)
     If InStr(tabres(n, m), voir(p)) <> 0 Then
         tabres(n, m) = Replace(tabres(n, m), voir(p), mettre(p))
     End If
   Next
 Next
Next
Range("F2").Resize(UBound(tabres, 1), UBound(tabres, 2)) = tabres
Application.Calculation = xlCalculationAutomatic
MsgBox (Timer - debut)
End Sub

teste et dis- nous
 
Re : [Résolu] VBA accélérer replace

salut

indépendamment de la durée (encore que ?) tu peux simplifier ton code

Code:
Sub Symboles()
  t = Timer
  Range("F1:AP" & [F60000].End(xlUp).Row)(3).SpecialCells(2).Select
  'pour accélérer surtout si tu as des fourmles
  With Application
    .Calculation = xlCalculationManual: .ScreenUpdating = 0: .DisplayAlerts = 0
  End With
  With Selection
    .Replace "9999", "1"
    .Replace "~*", ""
    .Replace ".", ","
    .Replace "-", ""
    .Replace "<1", "0,9"
    .Replace "<0", "0"
    .Replace "/", ","
   End With
   [A1].Activate
   Application.Calculation = xlCalculationAutomatic: Application.DisplayAlerts = 0
   MsgBox Timer - t
End Sub
 
- 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

Discussions similaires

Réponses
1
Affichages
332
Réponses
2
Affichages
573
A
Réponses
4
Affichages
648
A
Réponses
3
Affichages
616
E
Réponses
5
Affichages
2 K
EDI9366
E
Retour