Code VBA pour supprime une partie de texte

DrigoNL -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,
J'ai dans la colonne A des noms avec (ou sans) tire et suivis d'un tiret et d'une version (deux chiffres. deux chiffres).
Est-il possible de supprimer "- est la version (les derniers chiffres)" ou "les 6 premiers caractères en partant de de droite à gauche"(en une seule fois) dans une partie de texte contenu dans les cellules d'une colonne ?
Exemple : 3% Pn/h-01.01, A&K-CYCLADES-01.03, XENON-0D-20.00, ADELE, etc.
Je souhaiterai obtenir 3% Pn/h, A&K-CYCLADES, XENON-0D, ADELE, etc
PS: je souhaite l'avoir en code VBA car en formule je l'ai déjà, c'est : "SIERREUR(GAUCHE(A2;TROUVE("-";A2;NBCAR(A2)-5)-1);A2)"

5 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Poue éliminer les n=6 dernies caractères de la chaine s
    n = 6
    s = Left(s, Len(s) - n)

    Cdlmnt
    0
    1. DrigoNL
       
      Ré ccm81,

      Merci pour ta réponse, le problème est qu'il faut supprimé les 6 derners caractères comportant "-01.03" car j'ai d'autres chaines caractères qui ne l'ont pas.
      Exemple : il l' a :XENON-0D-20.00 par contre celle ci non ADELE.

      Cdlmnt.
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Peut être ceci (ce que j'ai compris)

    Public Function Nettoie(s As String, n As Long) As String
    Dim ss As String, r As Long
    n = 6
    ss = StrReverse(s)
    r = InStr(1, ss, "-")
    If r <> 0 And r = n Then s = Left(s, Len(s) - n)
    Nettoie = s
    End Function

    Cdlmnt
    0
    1. DrigoNL
       
      Bonjour ccm81,

      Merci pour ta réponse malheuresement la fonction me retourne rien : voici mon fichier http://www.cjoint.com/c/FAzjavU1ZZj
      c'est la colonne B que je souhaite modifier
      Cdlt.
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour à tous,

    autre proposition :
    Sub suppVersion()
        Dim datas, lig As Long, tmp1, tmp2
        Dim i As Long
        datas = [A2].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
        For lig = 1 To UBound(datas)
            tmp1 = Split(datas(lig, 1), ",")
            For i = 0 To UBound(tmp1)
                tmp2 = Split(tmp1(i), "-")
                If tmp2(UBound(tmp2)) Like "##.##" Then ReDim Preserve tmp2(UBound(tmp2) - 1)
                tmp1(i) = Join(tmp2, "-")
            Next i
            datas(lig, 1) = Join(tmp1, ",")
        Next lig
        [A2].Resize(UBound(datas)) = datas
    End Sub
    

    eric

    0
    1. DrigoNL
       
      Bonjour Eriiic,

      Merci pour le code, le souci est que j'ai une erreur à la ligne suivante :
      " datas(lig, 1) = Join(tmp1, ",")
      Pourquoi il y a une virgule?? Parce que mes données sont en colonnes non separées par de virgule. C'est qui veut dire :
      Je te joint le fichier excel suivant (voir la colonne B) : http://www.cjoint.com/c/FAzjavU1ZZj
      colonne B

      3% Pn/h-01.01
      A&K-CYCLADES-01.03
      XENON-0D-20.00
      ADELE
      .
      .
      .
      .
      etc.

      Cordialement.
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      avec ton explication j'avais compris que tu en avais plusieurs dans une cellule séparés par des ",".
      Mais qui peut le plus peut le moins, et pas d'erreur chez moi.
      https://www.cjoint.com/c/FAzjCn8nSzl
      J'ai mis aussi la fonction de ccm81 qui est ok
      eric
      0
    3. DrigoNL
       
      Ré,
      Quand j'essaie d'adapter le code avec mon fichier original, il me met une erreur dans la fonction "UBound" comme erreur de compilation : Tableau attendu.
      Workbooks(nomcible).Activate
      Workbooks(nomcible).Sheets("CNPE").Select

      datas = Sheets("CNPE").Cells(Columns(2).Cells.Count, 3).End(xlUp).Row '[B3].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
      For lig1 = 3 To UBound(datas)
      tmp1 = Split(datas(lig, 1), ",")
      For i = 0 To UBound(tmp1)
      tmp2 = Split(tmp1(i), "-")
      If tmp2(UBound(tmp2)) Like "##.##" Then
      ReDim Preserve tmp2(UBound(tmp2) - 1)
      tmp1(i) = Join(tmp2, "-")
      Next i
      datas(lig1, 1) = Join(tmp1, ",")
      Next lig1
      [B3].Resize(Bond(datas)) = datas

      Cdlt.
      0
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Tu as des icones pour mettre en forme ton code : icone "<>"
      Et je ne reconnais pas tout mon code. Si tu remplaces en mettant n'importe quoi ça marche moins bien forcément.
      eric
      0
    5. DrigoNL
       
      Ré, je n'ai pas changé grande chose : juste active ma feuille ma feuille feuille et donnée au variable datas = la taille de mes données.

      <Workbooks(nomcible).Activate >
      <Workbooks(nomcible).Sheets("CNPE").Select >

      <datas = Sheets("CNPE").Cells(Columns(2).Cells.Count, 3).End(xlUp).Row> '[B3].Resize(Cells(Rows.Count, 1).End(xlUp).Row - 1).Value
      <For lig = 3 To UBound(datas) >
      <tmp1 = Split(datas(lig, 1), ",")>
      <For i = 0 To UBound(tmp1) >
      <tmp2 = Split(tmp1(i), "-") >
      <If tmp2(UBound(tmp2)) Like "##.##" Then >
      <ReDim Preserve tmp2(UBound(tmp2) - 1)>
      <tmp1(i) = Join(tmp2, "-")>
      <Next i >
      <datas(lig, 1) = Join(tmp1, ",") >
      <Next lig >
      <[B3].Resize(Bond(datas)) = datas>
      >
      0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Je ne vois pas où est le problème
    http://www.cjoint.com/c/FAzmOENgAqI

    RQ. La proposition d'eric (salut à toi au passage) doit être un peu plus rapide que la mienne.

    Cdlmnt
    0
    1. DrigoNL
       
      Bonjour ccm81,

      Je souhaiterai adapter le code avec mon fichier original. Il est trop lourd parce qu'il a déjà pas mal de code derrière. Je vous explique un peu : l'idée était décroiser deux fichiersafin de créer un troisème. A la fin de ce dernier, il faut supprimer les versions.

      le code d'Eric, c'est la fonction Ubound qui pose un problème car il ne trouve pas le tableau attendu. 1ier problème erreur :
      <code></For lig = 1 To UBound(datas) >
      Le 2iè est que si je crée un nouveau module : il me met une erreur sur la ligne <code></code ReDim Preserve tmp2(UBound(tmp2) - 1>
      0
    2. DrigoNL
       
      Ré,

      Est ce que c'est possible de garder les données dans la même colonne après avoir supprimé les versions. Et dernière question pourrez (Eric et toi) commenter vos codes. je pense que ça m'aidera plus à l'adapter à mon fichier.

      Merci d'avancé.

      Cdlt.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    1. Est ce que c'est possible de garder les données dans la même colonne après avoir supprimé les versions.
    oui, il te suffit de mofifier cobut
    2. (Eric et toi) commenter vos codes
    http://www.cjoint.com/c/FAzowipQQPI

    Cdlmnt
    0