Rechercher : dans
Par :

VB excel scinder chaine de caractere en 2

Dernière réponse le 10 sep 2009 à 15:03:02 BenPower, le 9 sep 2009 à 19:04:31 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « VB excel scinder chaine de caractere en 2 » dans :
VBScript - Les fonctions de chaînes de caractères VoirLes fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...
Javascript - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractère Une chaîne de caractère est, comme son nom l'indique, une suite de caractères. On la représente par la suite de caractères encadrée par des guillemets simples (') ou doubles ("), sachant que les deux types de...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...

1

Évidemment, le 9 sep 2009 à 19:36:04

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

Répondre à Évidemment

2

BenPower, le 9 sep 2009 à 19:40:04

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

Répondre à BenPower

3

Évidemment, le 9 sep 2009 à 19:52:26

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. Le mieux est l'ennemi du bien

Répondre à Évidemment

4

BenPower, le 9 sep 2009 à 20:02:08

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

Répondre à BenPower

5

 BenPower, le 10 sep 2009 à 15:03:02

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

Répondre à BenPower
Collection CommentÇaMarche.net