XL 2016 [REGLE] Comment inserer un caractère tout les 40

gortex3D

XLDnaute Junior
Bonjour tout le monde

Voila je dois traiter un fichier excel afin de l'intégrer dans notre futur logiciel de gestion. J'ai un fichier de 6000 lignes qui dans une colonne intègre la description des articles.

Dans notre futur logiciel pour le retour à la ligne je dois avoir ce caractère | (ALT GR + 6 ) tout les 40 caractères.

J'ai des descriptions qui montent à plus de 3000 caractères donc je dois faire une boucle. Je ne sais pas du tout utiliser les macros en général je m'arrête au formule dans une cellule mais la je suis bloqué. Pourriez vous m'aider?

Merci d'avance
 

zebanx

XLDnaute Accro
Bonjour gortex3d et le forum

En reprenant une solution apportée par Pierre-Jean (;)), cette fonction doit correspondre à votre attente

Cdlt
thierry
 

Pièces jointes

  • insere40caracteres.xls
    21 KB · Affichages: 30
Dernière édition:

zebanx

XLDnaute Accro
Bonjour,

Dans la barre de formule, je ne vois pas d'espace entre les caractères AVANT et APRES.
Après je suis reparti d'une fonction apportée par Pierre-Jean à une question sur le forum.

Donc mon détail serait imprécis par rapport à ce que l'auteur pourrait vous en dire.
Néanmoins :
- Len sert à déterminer la longueur d'un texte et ici, à l'intérieur d'une même cellule, de travailler sur un espacement précis (Step de 40)
- Mid correspond à une formule saisie STXT
- Trim sert à supprimer les espaces.

Cette fonction est bien pratique, tout le mérite revenant à son auteur qui m'a personnellement beaucoup aidé sur le forum.

Bonne journée,
thierry

edit
@Dranreb : bonjour et ... merci !
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Écriture un peu différente :
VB:
Function Ins40(ByVal Z As String) As String
Dim P As Long
Ins40 = Left$(Z, 40)
For P = 41 To Len(Z) Step 40
   Ins40 = Ins40 & "|" & Mid$(Z, P, 40)
   Next P
End Function
Faire Alt+F11, puis, dans l'explorateur de projet, Insertion, Module.

Edit: Bonjour zebanx
 
Dernière édition:

zebanx

XLDnaute Accro
Re-bonjour gortex3D,

Je ne comprends pas car sur le fichier je n'ai aucun espace même si il faut reconnaitre que le caractère "|" donne cette impression.
Faire un copier-coller valeur SVP sur une autre cellule et vous verrez qu'il n'y a pas d'espace dans la barre de formule.

Sinon... je ne vois pas.
thierry
 

gortex3D

XLDnaute Junior
Je tiens a m'excuser effective effectivement ce n'est qu'une impression. En tout cas vous m'avez beaucoup aider et c'est exactement ce que je cherchais. j'espérais que l'on puisse réaliser cette action sans passer par vba mais bien expliquer c'est pas trop compliquer.

Encore merci pour votre aide et votre réactivités.
 

Dranreb

XLDnaute Barbatruc
Une fonction faisant autre chose, sans couper de mot dans un texte comportant des espaces :
VB:
Function Espace40(ByVal Z As String) As String
Dim P As Long
Espace40 = Replace(Z, vbLf, " ")
P = 41
Do: P = InStrRev(Espace40, " ", P)
   Mid$(Espace40, P, 1) = "|"
   P = P + 41: Loop Until P > Len(Z)
End Function
 

Dranreb

XLDnaute Barbatruc
Oui mais elle n'était pas bonne sur des textes courts. Corrigé :
VB:
Function Espace40(ByVal Z As String) As String
Dim P As Long
Espace40 = Replace(Z, vbLf, " ")
P = 41
Do Until P > Len(Z)
   P = InStrRev(Espace40, " ", P)
   Mid$(Espace40, P, 1) = "|"
   P = P + 41: Loop
End Function
Remarque: elle ne réagirait toujours pas bien sur des mots de plus de 40 caractères, mais espérons qu'il n'y en aura pas ?…
 

Dranreb

XLDnaute Barbatruc
La fonction renvoie alors #VALEUR!
Je vais voir si on peut l'éviter.

Essayez comme ça :
VB:
Function Espace40(ByVal Z As String) As String
Dim P As Long, Q As Long
Espace40 = Replace(Z, vbLf, " ")
P = 0: Q = 41
Do Until Q > Len(Espace40)
   Q = InStrRev(Espace40, " ", Q)
   If Q > P And Q - P <= 40 Then
      Mid$(Espace40, Q, 1) = "|"
   Else
      Q = P + 40
      Espace40 = Left$(Espace40, Q - 1) & "…|" & Mid$(Espace40, Q)
      End If
   P = Q: Q = Q + 41: Loop
End Function
 
Dernière édition:

Statistiques des forums

Discussions
312 153
Messages
2 085 802
Membres
102 981
dernier inscrit
fred02v