[VBA] détecter remplacer

swan

XLDnaute Junior
Bonjour,

j'ai une feuille avec des lignes de données de ce type à modifier:

1280245135002250219281108059786 4A10100 0 0 85500 0
XXXXXXXXXXXXX070120081108006423 XRXX000 0 0 0 0

je voudrais écrire une macro qui remplace le 1er 0 pour toutes les expressions "XRXX000" par un 1:
"XRXX100". Bien sûr, le nombre de lignes est variable. Donc il faudrait une sorte de boucle.

Il y a plusieurs façons de procéder:
soit en détectant toutes les lignes contenant "XRXX000"
mais je voudrais bien que la modification s'effectue en fonction qu'il détecte soit "2007" ou soit "2008"
des expressions:

XXXXXXXXXXXXX070120081108006423
XXXXXXXXXXXXX070120071108006423

autrement dit si il y a 2007 ou 2008 à partir de la 17e ligne.
 

Pièces jointes

  • tetest.xls
    13.5 KB · Affichages: 63

Spitnolan08

XLDnaute Barbatruc
Re : [VBA] détecter remplacer

Bonjour,

Essaye avec
Code:
Sub test()
Dim DerLig as long, i as long
DerLig = Range("A" & Rows.Count).End(xlUp).Row
For i = 17 To DerLig
    If InStr(Cells(i, "A"), "2007") Or InStr(Cells(i, "A"), "2008") And InStr(Cells(i, "A"), "XRXX000") Then Cells(i, "A") = Replace(Cells(i, "A"), "XRXX000", "XRXX100")
Next
End Sub
Cordialement
 
Dernière édition:

Spitnolan08

XLDnaute Barbatruc
Re : [VBA] détecter remplacer

Re,
Bonjour jp14,

Pour ton information, Excel considère que si le résultat de Instr(...)=0 alors la condition n'est pas remplie donc dans le cadre de ce fil il n'est pas utile de préciser =0 ou >0 ou <0.

Cordialement

Edit, pour faire plus court ;):
Code:
 Sub test()
Dim  i as long
For i = 17 To Range("A" & Rows.Count).End(xlUp).Row
    If InStr(Cells(i, "A"), "2007") Or InStr(Cells(i, "A"), "2008") And InStr(Cells(i, "A"), "XRXX000") Then Cells(i, "A") = Replace(Cells(i, "A"), "XRXX000", "XRXX100")
Next
End Sub
 
Dernière édition:

swan

XLDnaute Junior
Re : [VBA] détecter remplacer

Bonjour,

spitnolan et jp14, le code que vous m'avez donné fonctionne mais pas vraiment comme je le voudrais.

En fait, je me suis mal exprimé, j'ai dit "17e ligne" mais je voulais dire la 17e case (17 espaces) de chaque cellule
et pour toutes les lignes.

Autrement dit, le code de spitnolan donnerait:

Sub test()
Dim i as long
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(i, "A"), "2007") Or InStr(Cells(i, "A"), "2008") And InStr(Cells(i, "A"), "XRXX000") Then Cells(i, "A") = Replace(Cells(i, "A"), "XRXX000", "XRXX100")
Next
End Sub

"i=1" au lieu de "i=17"

Cependant, le problème n'est toujours pas résolu. Il faut bien que le code détecte 2007 ou 2008
à la 17e case. Desfois, il se peut que ces nombres soient ailleurs:

XXXXXXXXXXXXX301219631107320076 XRXX100 0 0 0 0

... et je ne veux pas que la modification se fasse.

J'essaie de trouver de mon côté.
 

jp14

XLDnaute Barbatruc
Re : [VBA] détecter remplacer

Bonjour
Bonjour Spitnolan08, ( merci pour l'info)

Si on cherche une valeur à un endroit précis il faut utiliser la fonction Mid(string, start[, length]) qui permet d'extraire une valeur à un endroit précis
il faut remplacer

If InStr(Cells(i, "A"), "2007") Or InStr(Cells(i, "A"), "2008") And
par
If mid(Cells(i, "A"),17,4) = "2007" Or mid(Cells(i, "A"),17,4)= "2008" And

à tester

JP
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
337
Réponses
36
Affichages
1 K

Statistiques des forums

Discussions
312 147
Messages
2 085 767
Membres
102 968
dernier inscrit
Tmarti