Oter des caractères dans une cellule en VBA

Résolu/Fermé
ST31000 Messages postés 6 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 4 février 2011 - 19 janv. 2011 à 12:16
 > ST31000 - 24 janv. 2011 à 14:08
Bonjour à tous,

j'ai besoin de votre aide!
j'ai besoin de faire une macro me permettant de retraiter des cellules de type :

:22:1009010901KL333HHHRH

Je souhaite pouvoir dire : pour toute les cellule commençant par les caractères ":22:" enlever certains caractères à l'intérieur de la chaine de caractères.

Merci bcp pour votre aide dont j'ai bien besoin!!
a très vite j'espère
A voir également:

6 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 19/01/2011 à 12:50
Bonjour,

enlever certains caractères
Ben oui mais lesquels et qu'est-ce qui les caractérise ?

Et c'est faisable sous forme de macro (tu sélectionnes une plage et tu lances le traitement, le résultat peut être mis dans une colonne à coté ou écraser l'original) ou sous forme de fonction personnalisée (tu saisis une formule dans une cellule qui te retourne le résultat en dynamique), précise ton besoin.

eric
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 janv. 2011 à 14:03
bonjour
J'allais poser la m^meme question qu'Eriic (bonjour) !!!

pour tester 22
If Mid(lachaine, 2, 2) = "22" Then
...

uniquement parce que j'avais fait quelque chose
Eriicà toi de jouer
1
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
19 janv. 2011 à 14:26
Salut michel,

Tu pouvais répondre tu sais :-) Tu t'es pas foulé... ;-)

ST31000 : c'est plus la position des caractères qui t'interesse j'ai l'impression.
Teste :
Sub MiseEnForme()
    Dim c As Range
    For Each c In Selection
        If Left(c, 4) = ":22:" Then
            c = Left(c, 10) & Mid(c, 15, 1) & Right(c, 8)
        End If
    Next c
End Sub

Sélectionner la plage concernée et lancer la macro
exemple

eric
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 janv. 2011 à 14:35
Tu pouvais répondre tu sais :-) Tu t'es pas foulé... ;-)

Mon poil dans la main est une raison suffisante pour refiler le bébé! :-D
0
ST31000 Messages postés 6 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 4 février 2011 1
20 janv. 2011 à 13:29
Messieurs je reviens vers vous car le retraitement que je souhaite faire sur les lignes commençant pr :22:, avec mes codes actuels (ci-dessous) s'applique en faites à toutes les lignes.....Alors que je ne veux ce retraitement (qui marche bien d'ailleurs, sur les bons caractères...) que pour les lignes commençant pr :22
Pouvez vous me dire ce qui ne va pas
un grd merci d'avance...


Sub essai()



'Déclaration des variables
Dim c As Range

'Ouverture du ficher .txt
Workbooks.OpenText Filename:= _
"C:\Users\ST31000\fichier.txt" _
, Origin:=xlWindows, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:= _
Array(0, 1), TrailingMinusNumbers:=True
Columns("A:A").EntireColumn.AutoFit

'Retraitement des 4 caractères MMDD des lignes commençant par :22:



For Each c In Range([A1], [A10000])

If (Left(c, 4) = ":22:" And (Mid(c, 16, 1) = N Or Mid(c, 16, 1) = P Or Mid(c, 16, 1) = R)) Then
c = Left(c, 10) & Mid(c, 15, 1) & Mid(c, 17, 100)
End If
Next c

'Etape 2 : Retraitement des lettres N,P,R après D ou C des lignes commençant par :22:


If (Left(c, 4) = ":61:" And (Mid(c, 16, 1) = N Or Mid(c, 16, 1) = P Or Mid(c, 16, 1) = R)) Then
c = Left(c, 10) & Mid(c, 15, 1) & Mid(c, 17, 100)
ElseIf (Mid(c, 16, 1) <> N And Mid(c, 16, 1) <> P And Mid(c, 16, 1) <> R) Then
c = Left(c, 10) & Mid(c, 15, 1) & Mid(c, 17, 100)
End If
Next c

'Enregistrement_du_fichier Macro
Windows("MT940 Valeo.txt").Activate
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\ST31000\fichier corrigé.xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
End Sub
1
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
20 janv. 2011 à 18:43
Re,

Si tu veux tester un caractère il faut le mettre entre des " ", sinon c'est une variable.
Ex: Mid(c, 16, 1) = "N"

eric
0
&gt; ST31000
24 janv. 2011 à 14:08
Merci eriiic
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ST31000 Messages postés 6 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 4 février 2011 1
19 janv. 2011 à 13:11
Bonjour Eric,
Merci pour ta réponse

de ma chaine ":22:1009010901KL333HHHRH" j'ai besoin d'enlever les 4 caractères avant la lettre K (0901) et la lettre L après K afin d'avoir une chaine de caractère respectant le format suivant :

:22:YYMMDDK(ou une autre lettre)XXX(montant)RRRRR

J'aimerais pouvoir écraser la colonne originale....

Merci bcp de ton aide...
0
ST31000 Messages postés 6 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 4 février 2011 1
19 janv. 2011 à 14:57
Super!ça marche!
Merci Eric et Michel pour vos indications!
0