Microsoft 365 VBA : Remplacer si

JulienLebreton

XLDnaute Nouveau
Bonjour à tous,

Je cherche actuellement à remplacer les données d'une plage en fonction de leur valeur :
Si la cellule est égal à "A"ou "D" je remplace le contenu par "S9".
Jusqu'à présent je contourne le problème en relançant une macro similaire pour faire à nouveau le tri.
Y aurait il une façon plus simple de le faire ?

J'avais pensé à :
If MaCell.Value = "A" or "D" Then MaCell.Value = "S9"


Sub ReplaceTravaux()

Dim MaCell As Range
For Each MaCell In Range("D7:AD10000").Cells
If MaCell.Value = "A" Then MaCell.Value = "S9"
Next MaCell

End Sub

Merci de votre aide,

A bientôt,

Julien
 
Solution
Bonjour à tous :)
Heu... j'ai raté quelque chose ?
Sur 269 000 cellule la méthode Each c me paraît pour le moins hasardeuse mais je pense que c'est pour cette raison que Staple ne cautionne pas.

Pour accélérer la manœuvre et s'il n'y a pas de formules dans le tas
VB:
Sub ReplaceTravaux_4()
Dim c As Range, i&, j&, T As Variant
Application.ScreenUpdating = False
Set c = [D7:AD10000]
T = c
For i = LBound(T, 1) To UBound(T, 1)
    For j = LBound(T, 2) To UBound(T, 2)
        If T(i, j) = "A" Or T(i, j) = "D" Then T(i, j) = "S9"
    Next j
Next i
c = T
End Sub

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Et un simple CTRL+H (chercher/remplacer) avec l'option 'totalité du contenu de la cellule' et le bouton 'Remplacer tout'.

Faites le éventuellement avec l'enregistreur de macro si vous tenez vraiment à une macro.

1611398236901.png


Cordialement
 

JulienLebreton

XLDnaute Nouveau
Bonjour Roblochon,

J'utilise actuellement cette macro car je ne souhaite l'appliquer qu'à une plage, j'avais testé avec le CTRL+H mais sans succès sauf si je m'y suis mal pris, je vais retester tout ça de ce pas.

Je voulais surtout limiter le temps de calcul en testant en même temps si la cellule = A et si la cellule = D

Merci de ton retour,

A bientôt,

Julien
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil JulienMonVoisin;) , Roblochon ;), pierrejean ;)

Je me contente juste de faire ce que demande le titre de la discussion ;)
[Ce qui ne veut pas dire que je cautionne ma proposition]
VB:
Sub ReplaceTravaux()
Dim c As Range
Application.ScreenUpdating = False
For Each c In [D7:AD10000]
Select Case c.Value
Case "A", "D"
c.Value = "S9"
End Select
Next
End Sub
 

Efgé

XLDnaute Barbatruc
Bonjour à tous :)
Heu... j'ai raté quelque chose ?
Sur 269 000 cellule la méthode Each c me paraît pour le moins hasardeuse mais je pense que c'est pour cette raison que Staple ne cautionne pas.

Pour accélérer la manœuvre et s'il n'y a pas de formules dans le tas
VB:
Sub ReplaceTravaux_4()
Dim c As Range, i&, j&, T As Variant
Application.ScreenUpdating = False
Set c = [D7:AD10000]
T = c
For i = LBound(T, 1) To UBound(T, 1)
    For j = LBound(T, 2) To UBound(T, 2)
        If T(i, j) = "A" Or T(i, j) = "D" Then T(i, j) = "S9"
    Next j
Next i
c = T
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

=>Efgé (Bonjour)
Je ne cautionne pas ma proposition, parce que si j'étais moi, j'aurais une Hache, mais tout en étant dans le controle, sans plus.
;)
Mon propos était juste de faire ceci: VBA: Remplacer si
Ce que j'ai fait ;)
Le reste, vu que c'est sans ma caution, ce n'est plus dans mon prisme existentiel de ce samedi de janvier 2021. ;)
[HFT.T] Et si j'étais moi, je me méfierai...;)[/HFT.T]
 

JulienLebreton

XLDnaute Nouveau
Bonsoir Pierre Jean, StappleMonVoisin et Efgé,

Merci de votre aide ! J'ai pu intégrer le code dans mon projet et ca m'a permis de gagner pas mal de temps de traitement j'ai l'impression.
Je me complique sans doute trop la vie à vouloir faire ce genre de modifications mineurs, elles n'apportent pas beaucoup de plus value au programme sachant que j'imagine qu'il n'y a que moi qui fera la différence =="

Merci d'autant car vous avez passé du temps à réfléchir à mon problème !

Julien
 

Statistiques des forums

Discussions
315 098
Messages
2 116 200
Membres
112 683
dernier inscrit
Ramo