Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

nombre de mots dans une cellule

8 réponses
Avatar
lematou
Bonjour à tous,

j'ai une macro (en vba sous xls 2000 ) qui me permet de faire des états
journaliers, Mon problème réside dans le fait que je ne voudrais pas avoir
plus de 20 mots (ou équivalent de mot) dans une cellule.

actuellement en B1 j'ai :
LN0209 ; LN0601 ; LN0625 ; LN0659 ; LN0707 ; LN0713 ; LN0967 ; LN0987 ;
LN1014 ; LN1091 ; LN1094 ; LN1145 ; LN1201 ; LN1209 ; LN1211 ; LN1297 ;
LN1313 ; LN1384 ; LN1420 ; LN1476 LN1480 ; LN1496 ; LN1499 ; LN1513 ; LN1522


je voudrais avoir:
dans la cellule B1
LN0209 ; LN0601 ; LN0625 ; LN0659 ; LN0707 ; LN0713 ; LN0967 ; LN0987 ;
LN1014 ; LN1091 ; LN1094 ; LN1145 ; LN1201 ; LN1209 ; LN1211 ; LN1297 ;
LN1313 ; LN1384 ; LN1420 ; LN1476
et dan la cellule B2
LN1480 ; LN1496 ; LN1499 ; LN1513 ; LN1522

mais en même temps puisque je décompose B en 2 ou n cellules je voudrais
que A1 qui porte la référence
378D26-1
ne bouge pas
mais que B2 prenne la référence
378D26-2
si vous aviez une lumiere je serais preneur
en vous remerciant d'avance de l'aide que vous pourrez m'apporter.

tres cordialement
jacks dit lematou

8 réponses

Avatar
Daniel
Bonjour

mais en même temps puisque je décompose B en 2 ou n cellules je voudrais
que A1 qui porte la référence
378D26-1


A1, ou B1 ?

Est-ce que tous les mots ont la même longueur, précédés et suivis par un
espace ?

Cordialement.
Daniel

Avatar
lematou
Bonjour Daniel,
En effet je n'ai pas été très claire sur le sujet, je vais dons essayer de
faire mieux.

c'est la cellule B (ou colonne) que je veux décomposer en groupes de 20
mots (ou références) max.

Et de ce fait je veux incrémenter la cellule A (ou colonne) correspondante.

en B tous les mots ont strictement la même longueur (8 caractères) et
séparés d'un blanc

si j'arrive à décomposer B1 en B1 et B2
alors A1 conserve la référence initiale qui est 378D26-1
et A2 prend la référence 378D26-2

merci pour le temps que tu veux bien me consacrer

Merci a tous
Jack dit Lematou



Bonjour

mais en même temps puisque je décompose B en 2 ou n cellules je voudrais
que A1 qui porte la référence
378D26-1


A1, ou B1 ?

Est-ce que tous les mots ont la même longueur, précédés et suivis par un
espace ?

Cordialement.
Daniel






Avatar
AV
Avec ta chaine en B1 et tes "mots" séparés par un ; ça pourrait donner ça :

Sub Saucissonner()
x = [B1]
dép = 1: lg = 1
For i = 1 To Len(x)
If Mid(x, i, 1) = ";" Then
posi = posi + 1
If posi Mod 20 = 0 And i > 0 Then
Cells(lg, 2) = Mid(x, dép, i - dép): lg = lg + 1
dép = i + 1: posi = 0
End If
End If
Next
Cells(lg, 2) = Mid(x, dép, i - 1)
lgF = [B65536].End(3).Row
For Each c In Range("A2:A" & lgF)
If c.Offset(, 1) <> "" Then
posi = InStr(c.Offset(-1, 0), "-")
c.Value = Left(c.Offset(-1, 0), posi) & Mid(c.Offset(-1, 0), posi +
1, 9 ^ 9) + 1
End If
Next
End Sub

Exemple là :
http://cjoint.com/?gCkgydgKKo

AV
Avatar
AV
Il faut évidemment que la chaîne soit suffisamment longue pour qu'il "se passe
quelque chose" :

http://cjoint.com/?gCktzC0Mbv

AV
Avatar
Daniel
Bonjour.
Une solution sans macro :
Dans une colonne inoccupée, disons C,
mets en ligne C1 la formule :
=SI(NBCAR($C$1)-179*(LIGNE()-1)>0;STXT($C$1;1+180*(LIGNE()-1);179);"")
et recopie vers le bas autant que nécessaire
Copie les cellules remplies de la colonne C et fais un collage spécial
valeurs en B1
En A2 et à recopier autant que nécessaire :
=SI(B2<>"";GAUCHE(A1;7)&LIGNE();"")
Daniel

"lematou" a écrit dans le message de
news:
Bonjour Daniel,
En effet je n'ai pas été très claire sur le sujet, je vais dons essayer de
faire mieux.

c'est la cellule B (ou colonne) que je veux décomposer en groupes de 20
mots (ou références) max.

Et de ce fait je veux incrémenter la cellule A (ou colonne)
correspondante.

en B tous les mots ont strictement la même longueur (8 caractères) et
séparés d'un blanc

si j'arrive à décomposer B1 en B1 et B2
alors A1 conserve la référence initiale qui est 378D26-1
et A2 prend la référence 378D26-2

merci pour le temps que tu veux bien me consacrer

Merci a tous
Jack dit Lematou



Bonjour

mais en même temps puisque je décompose B en 2 ou n cellules je
voudrais
que A1 qui porte la référence
378D26-1


A1, ou B1 ?

Est-ce que tous les mots ont la même longueur, précédés et suivis par un
espace ?

Cordialement.
Daniel








Avatar
lematou
Bonjour AV

j'ai un message d'erreur à la dernière ligne
c.Value = Left(c.Offset(-1, 0), posi) & Mid(c.Offset(-1, 0), posi + 1, 9 ^
9) + 1

Erreur d'exécution "13"
Incompatibilité de type

as tu une idée ?

merci pour ce temps que tu m'accorde
merci à tous

Jack dit Lematou




Avec ta chaine en B1 et tes "mots" séparés par un ; ça pourrait donner ça :

Sub Saucissonner()
x = [B1]
dép = 1: lg = 1
For i = 1 To Len(x)
If Mid(x, i, 1) = ";" Then
posi = posi + 1
If posi Mod 20 = 0 And i > 0 Then
Cells(lg, 2) = Mid(x, dép, i - dép): lg = lg + 1
dép = i + 1: posi = 0
End If
End If
Next
Cells(lg, 2) = Mid(x, dép, i - 1)
lgF = [B65536].End(3).Row
For Each c In Range("A2:A" & lgF)
If c.Offset(, 1) <> "" Then
posi = InStr(c.Offset(-1, 0), "-")
c.Value = Left(c.Offset(-1, 0), posi) & Mid(c.Offset(-1, 0), posi +
1, 9 ^ 9) + 1
End If
Next
End Sub

Exemple là :
http://cjoint.com/?gCkgydgKKo

AV





Avatar
AV
j'ai un message d'erreur à la dernière ligne
c.Value = Left(c.Offset(-1, 0), posi) & Mid(c.Offset(-1, 0), posi + 1, 9 ^
9) + 1


Vérifie une chose : cette instruction doit être sur une seule et même ligne !
Vérifie sur l'exemple que j'ai joint ne provoque pas de message d'erreur...

AV

Avatar
lematou
Merci AV pour ton aide,
je crois que j'ai voulu aller trop vite, quand je mets les valeurs:
378D26-1
en a1

et

LN0209 LN0601 LN0625 LN0659 LN0707 LN0713 LN0967 LN0987 LN1014 LN1091 LN1094
LN1145 LN1201 LN1209 LN1211 LN1297 LN1313 LN1384 LN1420 LN1476 LN1480 LN1496
LN1499 LN1513 LN1522
en b1 ,

je fais tourner ta macro et le découpage se fait bien mais je bloque sur:
posi = InStr(c.Offset(-1, 0), "-")
c.Value = Left(c.Offset(-1, 0), posi) & Mid(c.Offset(-1, 0), posi + 1,
9 ^ 9) + 1
j' ai bien tout mis sur une ligne mais je me demande si à la fin c'est bien
9 ^ 9) + 1 et non pas 99) + 1 ou 9 9) + 1
peux tu me le confirmer stp ?

mais la macro bloque sur la ligne posi = InStr(c.Offset(-1, 0), "-")

j'ai en retour le message :
erreur d'exécution "1004"
erreur défini par l'application ou l'objet.

et autrement, si je veux appliquer la macro sur une cellule b? au hasard de
mon fichier il me repositionne les valeurs en B1 et B2 alors que moi je
voudrais:
b? et b?+1
est ce raisonnable de ma part d'abuser encore de ton temps.

un grand merci pour tout ce que tu m'as déjà proposé

Merci
jacks dit Lematou



j'ai un message d'erreur à la dernière ligne
c.Value = Left(c.Offset(-1, 0), posi) & Mid(c.Offset(-1, 0), posi + 1, 9 ^
9) + 1


Vérifie une chose : cette instruction doit être sur une seule et même ligne !
Vérifie sur l'exemple que j'ai joint ne provoque pas de message d'erreur...

AV