VB excel scinder chaine de caractere en 2

Fermé
BenPower - 9 sept. 2009 à 19:04
 BenPower - 10 sept. 2009 à 15:03
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
A voir également:

5 réponses

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
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
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
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

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

Posez votre question
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