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.
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.
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
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
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
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
AV
Il faut évidemment que la chaîne soit suffisamment longue pour qu'il "se passe quelque chose" :
http://cjoint.com/?gCktzC0Mbv
AV
Il faut évidemment que la chaîne soit suffisamment longue pour qu'il "se passe
quelque chose" :
Il faut évidemment que la chaîne soit suffisamment longue pour qu'il "se passe quelque chose" :
http://cjoint.com/?gCktzC0Mbv
AV
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
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" <lematou@discussions.microsoft.com> a écrit dans le message de
news: 6DDD72ED-EC7C-4C43-A6C4-F9079950862C@microsoft.com...
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 ?
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
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
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
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
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
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...
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
lematou
Merci AV pour ton aide, je crois que j'ai voulu aller trop vite, quand je mets les valeurs: 378D26-1 en a1
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
Merci AV pour ton aide,
je crois que j'ai voulu aller trop vite, quand je mets les valeurs:
378D26-1
en a1
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...
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...