Oter des caractères dans une cellule en VBA

Résolu
ST31000 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
 > ST31000 -
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

6 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  4. ST31000 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    2. &gt; ST31000
       
      Merci eriiic
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ST31000 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
  7. ST31000 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   1
     
    Super!ça marche!
    Merci Eric et Michel pour vos indications!
    0