VB excel scinder chaine de caractere en 2

BenPower -  
 BenPower -
Bonjour,

Je dois écrire une description d'équipement sur 2 lignes (attribut en CAD).
J'ai vue quelque exemple mais je ne sais pas comment me prendre pour le réaliser.

Ex:
"CONVOYEUR DE CAPTAGE D'ALIMENTATION À L'EXTRACTION"
À couper en 2 si il dépasse 35 caractères (car jai de l'espace pour 36 caractères max) en coupant vers larrière.
donc j'aimerais avoir ceci:
item1: CONVOYEUR DE CAPTAGE
item2: D'ALIMENTATION À L'EXTRACTION

merci

5 réponses

  1. Évidemment
     
    salut

    Insère un module VBA dans ton classeur et colles-y la fonction ci-dessous
    Function Jusqua(chaine, taillemax)
    Dim s
      If (Len(chaine) < taillemax) Or (Len(chaine) = 0) Then
        Jusqua = chaine ' rien à faire si chaine vide ou inférieure à taillemax
      Else
        s = Left(chaine, taillemax) ' couper la chaine à taillemax car
        While (s <> "") And (Right(s, 1) <> " ") ' tant qu'on a pas un espace
          s = Left(s, Len(s) - 1) ' enlever le car final
        Wend
        If s = "" Then
          Jusqua = chaine ' si le résultat est vide, renvoyer la chaine recue
        Else
          Jusqua = s ' sinon renvoyer ce qui a été trouvé (avec l'espace final)
        End If
      End If
    End Function


    ta nouvelle fonction Jusqua demande DEUX paramètres :
    - en premier une chaine de caractères à "couper" en deux
    - en second une taille maxi de chaine à en extraire
    la fonction va alors prendre la partie gauche du texte reçu, en extraire les <taillemax> caractères du début
    puis va la réduire jusqu'à trouver un espace. la chaine renvoyée sera alors te texte correctement (enfin presque) coupé.

    comment tu vas l'utiliser :
    en A2 il y a "CONVOYEUR DE CAPTAGE D'ALIMENTATION À L'EXTRACTION"
    en B2, tu mets =JUSQUA(A2;35) => ça t'affiche CONVOYEUR DE CAPTAGE (avec l'espace final)
    en C2 tu mets =STXT(A2; NBCAR(B2) + 1;10000) => ça t'affiche D'ALIMENTATION À L'EXTRACTION
    0
  2. BenPower
     
    Es-ce que je peu inserer ca avec mon code qui insere la description:

    Case TITRE1_TAG
    GetAttributeValue = UCase(chargesWrkbook.Sheets(1).Cells(Row, DESC_COLUMN).Text)

    et la 2ieme partie se retrouverais dans TITRE2_TAG
    0
  3. Évidemment
     
    Je vais rien te conseiller du tout si ce n'est que de rester simple.
    Pense donc à la maintenance qui sera nécessaire dans quelques semaines, quelques mois voire quelques années.
    0
  4. BenPower
     
    Il n'y a pas de maintenance à fare. Une fois mes dessins générer (1000 environ) je n'ai plus a les refaires. et si je voudrait l'utiliser dans quelques mois la cartouche reste la même

    ce que je voudrait faire cest que dans :

    Case TITRE1_TAG
    GetAttributeValue = UCase(chargesWrkbook.Sheets(1).Cells(Row, DESC_COLUMN).Text)
    si Cells(Row, DESC_COLUMN) est plus grand que 35 caractere que je le séparer en 2 et ecrire le restant dans un autre attribu qui est TITRE2_TAG
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. BenPower
     
    Merci Évidemment,

    Jai utilisé ta routine voici le résultat:

    Case TITRE1_TAG

    CHAINE = UCase(chargesWrkbook.Sheets(1).Cells(Row, DESC_COLUMN))
    DEP_PARTIE2 = 35

    If (Len(CHAINE) < 35) Or (Len(CHAINE) = 0) Then
    COUPE1 = CHAINE ' rien à faire si chaine vide ou inférieure à 35
    Else
    PARTIE1 = Left(CHAINE, 35) ' couper la chaine à 35 car
    While (PARTIE1 <> "") And (Right(PARTIE1, 1) <> " ") ' tant qu'on a pas un espace
    PARTIE1 = Left(PARTIE1, Len(PARTIE1) - 1) ' enlever le car final
    DEP_PARTIE2 = DEP_PARTIE2 - 1
    Wend
    If PARTIE1 = "" Then
    COUPE1 = CHAINE ' si le résultat est vide, renvoyer la chaine recue
    Else
    COUPE = PARTIE1 ' sinon renvoyer ce qui a été trouvé (avec l'espace final)
    End If
    PARTIE2 = LTrim(Mid(CHAINE, DEP_PARTIE2)) 'ENLEVE L'ESPACE DU DEBUT
    GetAttributeValue = PARTIE1
    End If
    0