Limiter caractères dans cellule

Bonjour,

Je suis en train de travailler sur un fichier d'environ 15000 lignes (extraction d'un logiciel).
Dans "adresse" (col G) (celles ci sont d'ailleurs toutes saisies) je souhaiterais limiter le nombre de caractères à 50 max et faire en sorte que si les 50 sont dépassés la suite de l'adresse bascule dans la colonne "adresse 2ème ligne (col H).

J'espère que ma question est assez claire pour obtenir une réponse

Merci d'avance

4 réponses

  1. Contributeur
    Bonjour

    avec une tite macro
    Option Explicit
    '----
    Sub limiterà50()
    Dim Derlig As Integer, T_gh, Idx As Integer

    Derlig = Columns("G").Find("*", , , , , xlPrevious).Row
    'mémorise en mémoire RAM les colonnes G & H par une variable-tableau
    T_gh = Range("G1:H" & Derlig)
    'effectue le test "50" sur chaque index de T_gh
    For Idx = 1 To UBound(T_gh)
    If Len(T_gh(Idx, 1)) > 50 Then
    T_gh(Idx, 2) = Right(T_gh(Idx, 1), Len(T_gh(Idx, 1)) - 50)
    T_gh(Idx, 1) = Left(T_gh(Idx, 1), 50)
    End If
    Next
    'restitue T_gh sur la feuille
    Range("G1").Resize(UBound(T_gh), 2) = T_gh

    End Sub


    Michel
    0
    1. Bonjour,

      Si les adresses sont saisies, tu peux copier les 50 premiers caractères dans une colonne avec la formule =GAUCHE(G2;50) puis les 50 autres dans une autre colonne avec la formule =DROITE(G2;NBCAR(G2)-50).
      Ensuite, il te reste à faire un copier / collage spcial > Valeurs de ces 2 colonnes pour obtenir le résultat souhaité.

      A+
      0
      1. Contributeur
        Bonjour Gyrus; slaut Eric

        Tu as peut-^tre un problème dans
        =DROITE(G2;NBCAR(G2)-50).
        si G2 <50 caractères... :o)
        =Si(nbcar(G2)>50;=DROITE(G2;NBCAR(G2)-50).;"")
        0
      2. @michel_mBonjour michel_m,

        Tu as tout à fait raison, il faut prendre en compte le cas où G2<50 caractères :

        =SI(NBCAR(G2)>50;GAUCHE(G2;50);G2) pour la première formule et

        =SI(NBCAR(G2)>50;DROITE(G2;NBCAR(G2)-50);"") pour la seconde.

        A+
        0
    2. Contributeur
      Hé bé y'a du monde, bonjour à tous,

      Par formule, coupe au 1er espace précédent le 50ème caractère.
      Partie 1 :
      =GAUCHE(G2;SI(NBCAR(G2)<51;50;MAX((STXT(G2;LIGNE(1:50);1)=" ")*LIGNE(1:50))-1))

      Partie 2 :
      =STXT(G2;SI(NBCAR(G2)<51;50;MAX((STXT(G2;LIGNE(1:50);1)=" ")*LIGNE(1:50)));200)

      formules matricielles à valider avec shift+ctrl+entrée
      La formule doit s'entourer de { } si la validation est correcte.
      Terminer par un copier-collage spécial valeur sur ces 2 colonnes.

      Mais pour 15000 lignes la macro est peut-être préférable, surtout si ça doit être fait régulièrement.
      eric

      En essayant continuellement, on finit par réussir.
      Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
      En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
      0
      1. Contributeur
        Bonjour tousqui
        un outil Excel devrait pouvoir servir
        sélectionner colonne G
        dans la fenêtre cocher "largeur fixe" et double cliquez sur le bouton de cochage
        dans le cadre inférieur qui s'affiche, pointer 50
        et exècuter ("terminer")
        (cette opération compte les blancs comme un caractère)
        crdlmnt
        0
        1. Contributeur
          Salut vaucluse,

          il ne manque pas des mots dans ton explication ? Quelle fenêtre ?
          eric
          0
        2. Contributeur
          vi, c'est samedi....:-)

          je complète:

          Ruban / données / Convertir et la fenêtre c'est juste après

          Merci pour le rappel

          crdlmnt
          0