Remplacer un caracère précis par un autre à une position définie

RaidJan

XLDnaute Nouveau
Bonjour à tous,


J'ai fais une petite recherche sur le forum et je ne pense pas avoir trouvé ce cas de figure, en plus je suis complètement rouillé sous Excel depuis le temps que je ne l'ouvrais plus :'(. Je sais faire ma manipulation en formule mais pas en macro:
=SI(D168="";"";SI(STXT(DROITE(D168;1);1;1)="A";"Z";SI(STXT(DROITE(D168;2);1;2)="A";"Z";""))) puis les contatener... mais bon c'est pas super à metre en place car le fichier s'allimente tout seul.

Disons qu'en colonne D, j'ai une chaine de caractère allant de 7 à 8 caractères. Ce qui m'intéresse c'est d'abord de savoir si le dernier caractère est A, si c'est le cas je le change par Z, sinon je teste le 7ème caractère pour faire le changement.

Si aucun des deux je ne fais rien car les données que j'ai recues me conviennent.


Quelques exemples:


D1 : UEH75CDA -> deviendrait UEH75CDZ
D2 : UEH75CAA -> deviendrait UEH75CAZ (je m'arrête au premier caractère A trouvé)
D3: UEH75CAE -> deviendrait UEH75CZE

Si quelqu'un a un début de piste ça m'aiderait beaucoup,
merci
 

Sheldor

XLDnaute Occasionnel
Supporter XLD
bonsoir,
mon_texte = Cells(1, 4)
der = Right(mon_texte, 1)
avant_der = Mid(mon_texte, Len(mon_texte) - 1, 1)
If der <> "A" And avant_der = "A" Then Cells(1, 4) = Mid(mon_texte, 1, Len(mon_texte) - 2) & "Z"
If der = "A" Then Cells(1, 4) = Mid(mon_texte, 1, Len(mon_texte) - 1) & "Z" '& der

à tester
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Avec ce que j'ai compris,
Code:
=SI(DROITE(D1;1)="A";STXT(D1;1;NBCAR(D1)-1)&"Z";SI(DROITE(STXT(D1;1;NBCAR(D1)-1);1)="A";STXT(D1;1;NBCAR(D1)-2)&"Z"&DROITE(D1;1);D1))

JHA
 

Pièces jointes

  • Classeur RaidJan.xlsx
    8.6 KB · Affichages: 26

RaidJan

XLDnaute Nouveau
Du coup j'ai modifié pour le problem du dernier caractère...


mon_texte = Cells(1, 4)
der = Right(mon_texte, 1)
avant_der = Mid(mon_texte, Len(mon_texte) - 1, 1)
If der <> "A" And avant_der = "A" Then Cells(1, 4) = Mid(mon_texte, 1, Len(mon_texte) - 2) & "Z" & Mid(mon_texte, 8, 1)
If der = "A" Then Cells(1, 4) = Mid(mon_texte, 1, Len(mon_texte) - 1) & "Z" '& der


et ça marche niquel pour la cellule en question, maintenant ce qui m'intéresse c'est de scanner toute la colonne D, pas que que la cellule D1.
 

mutzik

XLDnaute Barbatruc
bonjour la foule

dim cell
for each cell in range("D : D") ' enlever les espaces avant et après le :
mon_texte = cell.value
der = Right(mon_texte, 1)
avant_der = Mid(mon_texte, Len(mon_texte) - 1, 1)
If der <> "A" And avant_der = "A" Then cell = Mid(mon_texte, 1, Len(mon_texte) - 2) & "Z" & Mid(mon_texte, 8, 1)
If der = "A" Then cell = Mid(mon_texte, 1, Len(mon_texte) - 1) & "Z" '& der
next cell
 

Paf

XLDnaute Barbatruc
Bonjour à tous

une autre Proposition:
Code:
Sub Remp_A()
Dim i As Long, j As Byte, V As String, Suf As String
For i = 1 To Range("D" & Rows.Count).End(xlUp).Row
  Suf = Right(Cells(i, 4), 3)
  V = Cells(i, 4)
  For j = 1 To 3
  If Mid(Suf, j, 1) = "A" Then
  Mid(V, Len(V) - 3 + j, 1) = "Z"
  Cells(i, 4) = V
  Exit For
  End If
  Next
Next
End Sub

A+
 

RaidJan

XLDnaute Nouveau
bonjour la foule

dim cell
for each cell in range("D : D") ' enlever les espaces avant et après le :
mon_texte = cell.value
der = Right(mon_texte, 1)
avant_der = Mid(mon_texte, Len(mon_texte) - 1, 1)
If der <> "A" And avant_der = "A" Then cell = Mid(mon_texte, 1, Len(mon_texte) - 2) & "Z" & Mid(mon_texte, 8, 1)
If der = "A" Then cell = Mid(mon_texte, 1, Len(mon_texte) - 1) & "Z" '& der
next cell


Bonjour,


Je viens de la tester celle ci et à priori la ligne:

avant_der = Mid(mon_texte, Len(mon_texte) - 1, 1)

N'est pas valide (argument ou ligne de procedure invalide)
 

Discussions similaires

Statistiques des forums

Discussions
312 779
Messages
2 092 045
Membres
105 167
dernier inscrit
JulJon2004