OVH Cloud OVH Cloud

Remplacer date par VBA

4 réponses
Avatar
JacquesH
Bonjour à toutes et tous,

Je tourne en rond sur un problème (sans doute tout petit pour vous). -
Excel 2003

Dans un fichier EXCEL, je récupère des données AS400 dont certaines
colonnes avec des dates. Pour des raisons que je ne maîtrise pas, toutes
les cellules sans date prennent la valeur "0". Comme je suis en format
date, cela devient : 00/01/1900.

J'ai voulu contourné le problème en remplaçant 00/01/1900 par rien.
Cela fonctionne très bien avec Edition - Remplacer par.

En revanche, cela ne donne absolument rien par macro (ni message, ni
erreur...). Voici le code :

Range("Q:Q").Select
Selection.Replace What:="00/01/1900", Replacement:="",
LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Je n'ai rien trouvé de concluant sur le forum. Quelqu'un peut-il m'aider ?

Merci d'avance

Jacques

4 réponses

Avatar
CAP2
Salut,

tu sélectionnes ta plage et tu fais tourner ça :

Sub test()
Dim cell As Range

For Each cell In Selection
If cell = 0 Then
cell = ""
End If
Next

End Sub

Ca marche ?

CAP2
Avatar
JacquesH
Bonjour et merci pour la réponse,

Cela fonctionne mais, ...
comme souvent avec les boucles, c'est extrêmement long : plus de 2
minutes pour mon fichier actuel.



Salut,

tu sélectionnes ta plage et tu fais tourner ça :

Sub test()
Dim cell As Range

For Each cell In Selection
If cell = 0 Then
cell = ""
End If
Next

End Sub

Ca marche ?

CAP2




Avatar
CAP2
Alors une autre solution,

on passe la sélection en format standard, on remplace les zéros par rien,
puis on repasse en format date :

Sub test

Selection.NumberFormat = "General"
Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Selection.NumberFormat = "dd/mm/yyyy"
End Sub

Ca marche ?

CAP2
Avatar
JacquesH
Merci de cette nouvelle idée qui est beaucoup plus rapide.

Cependant, en l'état, elle ne fonctionne pas correctement car quand on
met au format Standard, d'autres dates contiennent des "0" qui
disparaissent.

Je l'ai donc modifié de la manière suivante en remplaçant xlPart par
xlWhole :


Sub test()

Range("A:A,N:O,Q:Q").Select
Selection.NumberFormat = "General"
Selection.Replace What:="0", Replacement:="", LookAt:=xlWhole, _
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Selection.NumberFormat = "dd/mm/yy"
End Sub

En revanche, sais-tu pourquoi il y a un certain nombre d'actions
"Replace" qui fonctionne normalement en direct mais pas en VBA ?

Merci encore

Jacques

Alors une autre solution,

on passe la sélection en format standard, on remplace les zéros par rien,
puis on repasse en format date :

Sub test

Selection.NumberFormat = "General"
Selection.Replace What:="0", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Selection.NumberFormat = "dd/mm/yyyy"
End Sub

Ca marche ?

CAP2