OVH Cloud OVH Cloud

regrouper caractères dans une procédure

2 réponses
Avatar
Benito
Bonjour a tous,

J'ai fait la proc=E9dure suivante, qui consiste a regrouper=20
les trois premiers caract=E8res de chaque mot conteneu dans=20
une cellule, jusqu'=E0 un maximum de neuf caract=E8res. La=20
seule exception est que si la cellule ne contient qu'un=20
mot , je regroupe les 9 premier caract=E8res.

Les espaces dans la cellule d=E9limite les mots
exemple:

A C EKARE EDICIONES on obtient=20
ACEKAEDI

et pour=20
ADN EDITORES on obtient

ADNEDI

J'aimerais avoir le m=EAme r=E9sultat, mais sans pass=E9 par les=20
copie de formule dans Excel et d'effacement de colonne. =20
En d'autre terme la proc=E9dure devrait prendre en charge le=20
mot dans la cellule et aficher le r=E9sultat dans la cellule=20
voisine

merci et bonne fin de journ=E9e





Sub shortName()

Dim rngA As Range
Dim rngtarget As Range

=20
'------------------
'SEPARE LES ESPACES EN COLLONNES

Columns("a:a").Select
Selection.TextToColumns Destination:=3DRange("a1"),=20
DataType:=3DxlDelimited, _
TextQualifier:=3DxlDoubleQuote,=20
ConsecutiveDelimiter:=3DTrue, Tab:=3DFalse, _
Semicolon:=3DFalse, Comma:=3DFalse, Space:=3DTrue,=20
Other:=3DFalse, FieldInfo _
:=3DArray(Array(1, 1), Array(2, 1), Array(3, 1),=20
Array(4, 1))

'copie la formule dans la colonne
Set rngtarget =3D Range(Cells(1, "j"), Cells
(Rows.Count, "j").End(xlUp))


For Each Cell In rngA

Cells(Cell.Row, "j").Formula =3D "=3DLEFT(IF(ISBLANK(B" &=20
Cell.Row & "),LEFT(A" & Cell.Row & ",9),(LEFT(A" &=20
Cell.Row & ",3)&LEFT(B" & Cell.Row & ",3)&LEFT(C" &=20
Cell.Row & ",3)&LEFT(D" & Cell.Row & ",3)&LEFT(E" &=20
Cell.Row & ",3)&LEFT(F" & Cell.Row & ",3)&LEFT(G" &=20
Cell.Row & ",3)&LEFT(H" & Cell.Row & ",3)&LEFT(I" &=20
Cell.Row & ",3))),9)"
Next

'remplace la formule par la valeur
Set rngtarget =3D Range(Cells(1, "j"), Cells
(Rows.Count, "j").End(xlUp))
rngtarget.Select
Selection.Copy
Selection.PasteSpecial Paste:=3DxlValues,=20
Operation:=3DxlNone, SkipBlanks:=3D _
False, Transpose:=3DFalse


'detruit les colonnes de B =E0 I
Columns("B:I").EntireColumn.Select
Selection.Delete Shift:=3DxlToLeft


End Sub

2 réponses

Avatar
Daniel.M
Benito,

Si tu as Excel 2000 ou plus récent, tu sélectionnes l'ensemble des cellules à
traiter et tu roules la procédure Test3.

Sub Test3()
Dim C As Range
For Each C In Selection
C(1, 2).Value = Les3Premiers(C.Value)
Next C
End Sub

Public Function Les3Premiers(txt As String) As String
Dim tmp As String, V As Variant
Dim i As Integer, j As Integer, k As Integer
V = Split(txt)
i = LBound(V)
j = UBound(V)
If i = j Then ' 1 seul mot
tmp = Left(Trim(txt), 9) 'prend les 9 prem lettres
Else
For k = i To j
tmp = tmp & Left(V(k), 3)
Next k
End If
Les3Premiers = Left(tmp, 9)
End Function

Salutations,

Daniel M.

"Benito" wrote in message
news:307501c470fc$88baa7a0$
Bonjour a tous,

J'ai fait la procédure suivante, qui consiste a regrouper
les trois premiers caractères de chaque mot conteneu dans
une cellule, jusqu'à un maximum de neuf caractères. La
seule exception est que si la cellule ne contient qu'un
mot , je regroupe les 9 premier caractères.

Les espaces dans la cellule délimite les mots
exemple:

A C EKARE EDICIONES on obtient
ACEKAEDI

et pour
ADN EDITORES on obtient

ADNEDI

J'aimerais avoir le même résultat, mais sans passé par les
copie de formule dans Excel et d'effacement de colonne.
En d'autre terme la procédure devrait prendre en charge le
mot dans la cellule et aficher le résultat dans la cellule
voisine

merci et bonne fin de journée





Sub shortName()

Dim rngA As Range
Dim rngtarget As Range


'------------------
'SEPARE LES ESPACES EN COLLONNES

Columns("a:a").Select
Selection.TextToColumns Destination:=Range("a1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote,
ConsecutiveDelimiter:=True, Tab:úlse, _
Semicolon:úlse, Comma:úlse, Space:=True,
Other:úlse, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1),
Array(4, 1))

'copie la formule dans la colonne
Set rngtarget = Range(Cells(1, "j"), Cells
(Rows.Count, "j").End(xlUp))


For Each Cell In rngA

Cells(Cell.Row, "j").Formula = "=LEFT(IF(ISBLANK(B" &
Cell.Row & "),LEFT(A" & Cell.Row & ",9),(LEFT(A" &
Cell.Row & ",3)&LEFT(B" & Cell.Row & ",3)&LEFT(C" &
Cell.Row & ",3)&LEFT(D" & Cell.Row & ",3)&LEFT(E" &
Cell.Row & ",3)&LEFT(F" & Cell.Row & ",3)&LEFT(G" &
Cell.Row & ",3)&LEFT(H" & Cell.Row & ",3)&LEFT(I" &
Cell.Row & ",3))),9)"
Next

'remplace la formule par la valeur
Set rngtarget = Range(Cells(1, "j"), Cells
(Rows.Count, "j").End(xlUp))
rngtarget.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues,
Operation:=xlNone, SkipBlanks:= _
False, Transpose:úlse


'detruit les colonnes de B à I
Columns("B:I").EntireColumn.Select
Selection.Delete Shift:=xlToLeft


End Sub
Avatar
benito
Merci Daniel

C'est exactemement ce que je voulais faire

ton aide est grandement apprécié

Benito


-----Message d'origine-----
Benito,

Si tu as Excel 2000 ou plus récent, tu sélectionnes
l'ensemble des cellules à

traiter et tu roules la procédure Test3.

Sub Test3()
Dim C As Range
For Each C In Selection
C(1, 2).Value = Les3Premiers(C.Value)
Next C
End Sub

Public Function Les3Premiers(txt As String) As String
Dim tmp As String, V As Variant
Dim i As Integer, j As Integer, k As Integer
V = Split(txt)
i = LBound(V)
j = UBound(V)
If i = j Then ' 1 seul mot
tmp = Left(Trim(txt), 9) 'prend les 9 prem lettres
Else
For k = i To j
tmp = tmp & Left(V(k), 3)
Next k
End If
Les3Premiers = Left(tmp, 9)
End Function

Salutations,

Daniel M.

"Benito" wrote in message
news:307501c470fc$88baa7a0$
Bonjour a tous,

J'ai fait la procédure suivante, qui consiste a regrouper
les trois premiers caractères de chaque mot conteneu dans
une cellule, jusqu'à un maximum de neuf caractères. La
seule exception est que si la cellule ne contient qu'un
mot , je regroupe les 9 premier caractères.

Les espaces dans la cellule délimite les mots
exemple:

A C EKARE EDICIONES on obtient
ACEKAEDI

et pour
ADN EDITORES on obtient

ADNEDI

J'aimerais avoir le même résultat, mais sans passé par les
copie de formule dans Excel et d'effacement de colonne.
En d'autre terme la procédure devrait prendre en charge le
mot dans la cellule et aficher le résultat dans la cellule
voisine

merci et bonne fin de journée





Sub shortName()

Dim rngA As Range
Dim rngtarget As Range


'------------------
'SEPARE LES ESPACES EN COLLONNES

Columns("a:a").Select
Selection.TextToColumns Destination:=Range("a1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote,
ConsecutiveDelimiter:=True, Tab:úlse, _
Semicolon:úlse, Comma:úlse, Space:=True,
Other:úlse, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1),
Array(4, 1))

'copie la formule dans la colonne
Set rngtarget = Range(Cells(1, "j"), Cells
(Rows.Count, "j").End(xlUp))


For Each Cell In rngA

Cells(Cell.Row, "j").Formula = "=LEFT(IF(ISBLANK(B" &
Cell.Row & "),LEFT(A" & Cell.Row & ",9),(LEFT(A" &
Cell.Row & ",3)&LEFT(B" & Cell.Row & ",3)&LEFT(C" &
Cell.Row & ",3)&LEFT(D" & Cell.Row & ",3)&LEFT(E" &
Cell.Row & ",3)&LEFT(F" & Cell.Row & ",3)&LEFT(G" &
Cell.Row & ",3)&LEFT(H" & Cell.Row & ",3)&LEFT(I" &
Cell.Row & ",3))),9)"
Next

'remplace la formule par la valeur
Set rngtarget = Range(Cells(1, "j"), Cells
(Rows.Count, "j").End(xlUp))
rngtarget.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues,
Operation:=xlNone, SkipBlanks:= _
False, Transpose:úlse


'detruit les colonnes de B à I
Columns("B:I").EntireColumn.Select
Selection.Delete Shift:=xlToLeft


End Sub






.