Macro VBA "Remplacer par" amélioré

nicopat

XLDnaute Junior
Bonjour,

J'ai un gros fichier excel avec des formules dans tous les sens (plusieurs millions de formules).
Il nécessite quelques secondes à chaque recalcul et je souhaite l'accélérer.

J'ai lu qu'en théorie, certaines formules sont + rapides à calculées selon leur rédaction.
Exemple : RECHERCHEV(1;'Feuille'!A1:N1000;14;FAUX) sera + rapide que RECHERCHEV(1;'Feuille'!A:N;14;FAUX)
Je suppose qu'il en va de même pour toutes les formules faisant appel à des plages de cellules : RECHERCHEH(), SOMME(), MOYENNE(), etc...

Dans mon fichier, des centaines de milliers de formules sont concernées.


J'ai essayé la macro ci-dessous, sensée permettre de remplacer de manière sérialisée et successivement dans tous les feuillets du fichier toutes les occurences de plages mal définies dans les RECHERCHEV().
Par exemple, pour traiter les formules impliquant les plages de "a:a" à "a:g", voici la macro :

Code:
Public Sub Rempl()
Dim feuil As Worksheet
For Each feuil In ThisWorkbook.Worksheets
    feuil.Cells.Replace What:="a:a;", Replacement:="a1:a1500;", lookat:=xlPart
    feuil.Cells.Replace What:="a:b;", Replacement:="a1:b1500;", lookat:=xlPart
    feuil.Cells.Replace What:="a:c;", Replacement:="a1:c1500;", lookat:=xlPart
    feuil.Cells.Replace What:="a:d;", Replacement:="a1:d1500;", lookat:=xlPart
    feuil.Cells.Replace What:="a:e;", Replacement:="a1:e1500;", lookat:=xlPart
    feuil.Cells.Replace What:="a:f;", Replacement:="a1:f1500;", lookat:=xlPart
    feuil.Cells.Replace What:="a:g;", Replacement:="a1:g1500;", lookat:=xlPart
Next feuil
End Sub


Actuellement, cette macro ne semble pas fonctionner.

De plus, ce serait bien que la casse des expressions à remplacer ne soit pas prise en compte, c'est à dire que le code ci-dessus remplace "a:b;", mais aussi "A:b;", "a:B;", "A:B;"

Surtout, étant donné que certains feuillets utilisent jusqu'à la colonne QX, si je dois me taper toutes les combiaisons de plages possibles (car bien entendu, ces plages mal rédigées sont un peu partout dans le fichier et je ne sais pas précisément quelles sont ces plages), ça fait + de 11.000 "remplacer par" :

a:a
a:aa
a:ab
a:ac
a:ad
a:ae
a:af
a:ag
a:ah
a:ai
a:aj
a:ak
a:al
a:am
a:an
a:ao
a:ap
a:aq
a:ar
a:as
a:at
a:au
a:av
a:aw
a:ax
a:ay
a:az
a:b
etc...

sans compter si la casse entre en ligne de compte et sans compter le double aussi si je veut traiter les a:$a, a:$aa, a:$ab, etc...

Donc même si cela fonctionnait, les itérations de "remplacer par" ne seraient pas vraiment satisfaisantes non plus...

Donc ce qui résoudrait vraiment le problème serait un remplacement tous azimuts des expressions de type :
[1 ou 2 caractères texte] suivi de ":" ou ":$" et suivi de [1 ou 2 caractères texte]
par :
[1 ou 2 caractères texte] suivi de "1" suivi de ":" ou ":$" et suivi de [1 ou 2 caractères texte] suivi de "1500"



Attention de ne pas remplacer les expressions impliquant un chiffre : seulement [1 ou 2 caractères texte], pas [1 ou 2 nombres]

Merci de votre aide!

Nicole
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 916
Membres
103 404
dernier inscrit
sultan87