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

VBA-Format de texte

10 réponses
Avatar
Pierre.M
Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et d'une
ou plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de
figure le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie directe.

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M

10 réponses

Avatar
Daniel.C
Bonsoir.
=GAUCHE(SUBSTITUE(A1;" ";"");3)&" "&DROITE(SUBSTITUE(A1;" ";"");3)
Cordialement.
Daniel
"Pierre.M" a écrit dans le message de news:

Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et d'une ou
plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de figure
le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie directe.

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M



Avatar
Pierre.M
Merci beaucoup pour le coup de main.
Ca fonctionne bien-sur, mais cette solution ne m'arrange pas vraiment
car elle m'oblige a creer une colonne supplementaire et à faire des
manips diverses...

Je cherche plutot un "truc automatique" qui ferait la meme chose, et
dans la meme colonne.
Je pensais a une macro evenementielle par exemple.
Je tape ou je colle mes donnees dans ma colonne et la macro modifie le
format au meme endroit.

Possible ? Pas possible?

Merci encore.


Pierre.M



On 2008-04-01 21:38:41 +0200, "Daniel.C" said:

Bonsoir.
=GAUCHE(SUBSTITUE(A1;" ";"");3)&" "&DROITE(SUBSTITUE(A1;" ";"");3)
Cordialement.
Daniel
"Pierre.M" a écrit dans le message de news:

Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et d'une ou
plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de figure
le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie directe.

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M




Avatar
Daniel.C
Valable pour la colonne A :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 Then Exit Sub
If Target.Count > 1 Then Exit Sub
Dim Temp As String
Temp = Application.Substitute(Target.Value, " ", "")
If Len(Temp) <> 6 Then
MsgBox "Saisie incorrecte"
Exit Sub
End If
Application.EnableEvents = False
Target.Value = Left(Temp, 3) & " " & Right(Temp, 3)
Application.EnableEvents = True
End Sub

Daniel
"Pierre.M" a écrit dans le message de news:

Merci beaucoup pour le coup de main.
Ca fonctionne bien-sur, mais cette solution ne m'arrange pas vraiment car
elle m'oblige a creer une colonne supplementaire et à faire des manips
diverses...

Je cherche plutot un "truc automatique" qui ferait la meme chose, et dans
la meme colonne.
Je pensais a une macro evenementielle par exemple.
Je tape ou je colle mes donnees dans ma colonne et la macro modifie le
format au meme endroit.

Possible ? Pas possible?

Merci encore.


Pierre.M



On 2008-04-01 21:38:41 +0200, "Daniel.C" said:

Bonsoir.
=GAUCHE(SUBSTITUE(A1;" ";"");3)&" "&DROITE(SUBSTITUE(A1;" ";"");3)
Cordialement.
Daniel
"Pierre.M" a écrit dans le message de news:

Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et d'une
ou
plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de
figure
le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie directe.

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M








Avatar
Pierre.M
Exactement le genre de truc que je cherchais. Merci.

Cependant cette macro ne fonctionne pas dans un cas. C'est quand je
colle plusieurs lignes en même temps.
Serait-il possible de l'adapter ? Mes connaissances ne sont pas
suffisantes pour ça...

Merci encore et bonne journée.

Pierre.M


On 2008-04-02 00:38:55 +0200, "Daniel.C" said:

Valable pour la colonne A :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 Then Exit Sub
If Target.Count > 1 Then Exit Sub
Dim Temp As String
Temp = Application.Substitute(Target.Value, " ", "")
If Len(Temp) <> 6 Then
MsgBox "Saisie incorrecte"
Exit Sub
End If
Application.EnableEvents = False
Target.Value = Left(Temp, 3) & " " & Right(Temp, 3)
Application.EnableEvents = True
End Sub

Daniel
"Pierre.M" a écrit dans le message de news:

Merci beaucoup pour le coup de main.
Ca fonctionne bien-sur, mais cette solution ne m'arrange pas vraiment car
elle m'oblige a creer une colonne supplementaire et à faire des manips
diverses...

Je cherche plutot un "truc automatique" qui ferait la meme chose, et dans
la meme colonne.
Je pensais a une macro evenementielle par exemple.
Je tape ou je colle mes donnees dans ma colonne et la macro modifie le
format au meme endroit.

Possible ? Pas possible?

Merci encore.


Pierre.M



On 2008-04-01 21:38:41 +0200, "Daniel.C" said:

Bonsoir.
=GAUCHE(SUBSTITUE(A1;" ";"");3)&" "&DROITE(SUBSTITUE(A1;" ";"");3)
Cordialement.
Daniel
"Pierre.M" a écrit dans le message de news:

Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et d'une
ou
plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de
figure
le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie directe.

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M








Avatar
Daniel.C
Bonjour.
Essaie :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 Then Exit Sub
Dim Temp As String, c As Range
Application.EnableEvents = False
For Each c In Target
If c.Column = 1 Then
Temp = Application.Substitute(c.Value, " ", "")
If Len(Temp) <> 6 Then
MsgBox "Saisie incorrecte"
Exit Sub
End If
c.Value = Left(Temp, 3) & " " & Right(Temp, 3)
End If
Next c
Application.EnableEvents = True
End Sub

Daniel
"Pierre.M" a écrit dans le message de news:

Exactement le genre de truc que je cherchais. Merci.

Cependant cette macro ne fonctionne pas dans un cas. C'est quand je colle
plusieurs lignes en même temps.
Serait-il possible de l'adapter ? Mes connaissances ne sont pas
suffisantes pour ça...

Merci encore et bonne journée.

Pierre.M


On 2008-04-02 00:38:55 +0200, "Daniel.C" said:

Valable pour la colonne A :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 Then Exit Sub
If Target.Count > 1 Then Exit Sub
Dim Temp As String
Temp = Application.Substitute(Target.Value, " ", "")
If Len(Temp) <> 6 Then
MsgBox "Saisie incorrecte"
Exit Sub
End If
Application.EnableEvents = False
Target.Value = Left(Temp, 3) & " " & Right(Temp, 3)
Application.EnableEvents = True
End Sub

Daniel
"Pierre.M" a écrit dans le message de news:

Merci beaucoup pour le coup de main.
Ca fonctionne bien-sur, mais cette solution ne m'arrange pas vraiment
car
elle m'oblige a creer une colonne supplementaire et à faire des manips
diverses...

Je cherche plutot un "truc automatique" qui ferait la meme chose, et
dans
la meme colonne.
Je pensais a une macro evenementielle par exemple.
Je tape ou je colle mes donnees dans ma colonne et la macro modifie le
format au meme endroit.

Possible ? Pas possible?

Merci encore.


Pierre.M



On 2008-04-01 21:38:41 +0200, "Daniel.C" said:

Bonsoir.
=GAUCHE(SUBSTITUE(A1;" ";"");3)&" "&DROITE(SUBSTITUE(A1;" ";"");3)
Cordialement.
Daniel
"Pierre.M" a écrit dans le message de news:

Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et
d'une
ou
plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de
figure
le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie directe.

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M















Avatar
FdeCourt
Salut,

Quelques modifications pour qu'elle soit plus rapide et prenne en
compte les sélections multiples :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Temp As String
Dim data
Dim x as long
Dim y as integer
data = Target
If Target.Rows.Count = 1 And Target.Columns.Count = 1 _
Then Temp = Application.Substitute(Target.Value, " ", ""): _
Target.Value = Left(Temp, 3) & " " & Right(Temp, 3): Exit
Sub
For x = 1 To UBound(data, 1) Step 1
For y = 1 To UBound(data, 2)
Temp = Application.Substitute(data(x, y), " ", "")
If Len(Temp) <> 6 Then
MsgBox "Saisie incorrecte"
Exit Sub
End If
data(x, y) = Left(Temp, 3) & " " & Right(Temp, 3)
Next
Next
Application.EnableEvents = False
Target = data
Application.EnableEvents = True
End Sub

On 2 avr, 07:36, Pierre.M wrote:
Exactement le genre de truc que je cherchais. Merci.

Cependant cette macro ne fonctionne pas dans un cas. C'est quand je
colle plusieurs lignes en même temps.
Serait-il possible de l'adapter ? Mes connaissances ne sont pas
suffisantes pour ça...

Merci encore et bonne journée.

Pierre.M

On 2008-04-02 00:38:55 +0200, "Daniel.C" said:



Valable pour la colonne A :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 1 Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    Dim Temp As String
    Temp = Application.Substitute(Target.Value, " ", "")
    If Len(Temp) <> 6 Then
        MsgBox "Saisie incorrecte"
        Exit Sub
    End If
    Application.EnableEvents = False
    Target.Value = Left(Temp, 3) & " " & Right(Temp, 3)
    Application.EnableEvents = True
End Sub

Daniel
"Pierre.M" a écrit dans le message de news:

Merci beaucoup pour le coup de main.
Ca fonctionne bien-sur, mais cette solution ne m'arrange pas vraiment c ar
elle m'oblige a creer une colonne supplementaire et à faire des manip s
diverses...

Je cherche plutot un "truc automatique" qui ferait la meme chose, et da ns
la meme colonne.
Je pensais a une macro evenementielle par exemple.
Je tape ou je colle mes donnees dans ma colonne et la macro modifie le
format au meme endroit.

Possible ? Pas possible?

Merci encore.

Pierre.M

On 2008-04-01 21:38:41 +0200, "Daniel.C" said:

Bonsoir.
=GAUCHE(SUBSTITUE(A1;" ";"");3)&" "&DROITE(SUBSTITUE(A1;" ";"");3)
Cordialement.
Daniel
"Pierre.M" a écrit dans le message de news :

Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et d'u ne
ou
plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de
figure
le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie directe .

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M- Masquer le texte des messages précédents -





- Afficher le texte des messages précédents -






Avatar
PMO
Bonjour,

Une piste avec l'usage de la fonction personnalisée dont le code
est ci-dessous.

1) Copiez le code dans un module standard
'*************
Function Ref6Car(Cellule As Range) As String
Dim k&
Dim A$
Dim B$
If Cellule.Rows.Count > 1 Or _
Cellule.Columns.Count > 1 Then
MsgBox _
Prompt:="Le paramètre est une plage au lieu d'une seule cellule", _
Title:="Erreur dans la formule : " & Application.Caller.Formula
End If
A$ = CStr(Cellule)
If A$ <> "" Then
For k& = 1 To Len(A$)
If Mid(A$, k&, 1) <> Chr(32) Then _
B$ = B$ & Mid(A$, k&, 1)
Next k&
If B$ <> "" And Len(B$) = 6 Then
B$ = Left(B$, 3) & Chr(32) & Right(B$, 3)
End If
Ref6Car = B$
End If
End Function
'*************

2) Comment l'utiliser (Faites un test dans une nouvelle feuille)
Dans la cellule A1 tapez AA 1234
puis, dans une autre cellule, tapez =Ref6Car(A1)
Vous devez obtenir AA1 234
Si vous voulez supprimer la formule pour ne garder que la valeur
sélectionnez la cellule résultat, copiez la et faites collage spécial/Valeurs.

3) Restrictions
La fonction ne traite qu'une seule cellule. Par conséquent, si vous
tapez =Ref6Car(A1:A40) un #VALEUR! apparaîtra.
Si la cellule à traiter comprend un nombre de caractères valides
différent de 6 le résultat sera vide.

Cordialement.

PMO
Patrick Morange
Avatar
Daniel.C
Bonjour.
Si tu veux que ta macro soit plus rapide :
1. "data = Target" est inutile si une seule cellule est modifiée, il faut
déplacer la ligne devant :
"For x = 1 To UBound(data, 1) Step 1"
2. Dans le cas où une seule cellule est modifiée, ne pas oublier
"application.enable eventsúlse" (à rétablir après modif) avant la modif,
ce qui évite une boucle.
Cordialement.
Daniel
"FdeCourt" a écrit dans le message de news:

Salut,

Quelques modifications pour qu'elle soit plus rapide et prenne en
compte les sélections multiples :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Temp As String
Dim data
Dim x as long
Dim y as integer
data = Target
If Target.Rows.Count = 1 And Target.Columns.Count = 1 _
Then Temp = Application.Substitute(Target.Value, " ", ""): _
Target.Value = Left(Temp, 3) & " " & Right(Temp, 3): Exit
Sub
For x = 1 To UBound(data, 1) Step 1
For y = 1 To UBound(data, 2)
Temp = Application.Substitute(data(x, y), " ", "")
If Len(Temp) <> 6 Then
MsgBox "Saisie incorrecte"
Exit Sub
End If
data(x, y) = Left(Temp, 3) & " " & Right(Temp, 3)
Next
Next
Application.EnableEvents = False
Target = data
Application.EnableEvents = True
End Sub

On 2 avr, 07:36, Pierre.M wrote:
Exactement le genre de truc que je cherchais. Merci.

Cependant cette macro ne fonctionne pas dans un cas. C'est quand je
colle plusieurs lignes en même temps.
Serait-il possible de l'adapter ? Mes connaissances ne sont pas
suffisantes pour ça...

Merci encore et bonne journée.

Pierre.M

On 2008-04-02 00:38:55 +0200, "Daniel.C" said:



Valable pour la colonne A :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 Then Exit Sub
If Target.Count > 1 Then Exit Sub
Dim Temp As String
Temp = Application.Substitute(Target.Value, " ", "")
If Len(Temp) <> 6 Then
MsgBox "Saisie incorrecte"
Exit Sub
End If
Application.EnableEvents = False
Target.Value = Left(Temp, 3) & " " & Right(Temp, 3)
Application.EnableEvents = True
End Sub

Daniel
"Pierre.M" a écrit dans le message de news:

Merci beaucoup pour le coup de main.
Ca fonctionne bien-sur, mais cette solution ne m'arrange pas vraiment
car
elle m'oblige a creer une colonne supplementaire et à faire des manips
diverses...

Je cherche plutot un "truc automatique" qui ferait la meme chose, et
dans
la meme colonne.
Je pensais a une macro evenementielle par exemple.
Je tape ou je colle mes donnees dans ma colonne et la macro modifie le
format au meme endroit.

Possible ? Pas possible?

Merci encore.

Pierre.M

On 2008-04-01 21:38:41 +0200, "Daniel.C" said:

Bonsoir.
=GAUCHE(SUBSTITUE(A1;" ";"");3)&" "&DROITE(SUBSTITUE(A1;" ";"");3)
Cordialement.
Daniel
"Pierre.M" a écrit dans le message de news:

Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et
d'une
ou
plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de
figure
le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie
directe.

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M- Masquer le texte des messages précédents -





- Afficher le texte des messages précédents -






Avatar
FdeCourt
Exact merci

On 2 avr, 12:32, "Daniel.C" wrote:
Bonjour.
Si tu veux que ta macro soit plus rapide :
1. "data = Target" est inutile si une seule cellule est modifiée, il f aut
déplacer la ligne devant :
"For x = 1 To UBound(data, 1) Step 1"
2. Dans le cas où une seule cellule est modifiée, ne pas oublier
"application.enable eventsúlse" (à rétablir après modif) avant l a modif,
ce qui évite une boucle.
Cordialement.
Daniel
"FdeCourt" a écrit dans le message de news:

Salut,

Quelques modifications pour qu'elle soit plus rapide et prenne en
compte les sélections multiples :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Temp As String
    Dim data
    Dim x as long
    Dim y as integer
    data = Target
    If Target.Rows.Count = 1 And Target.Columns.Count = 1 _
        Then Temp = Application.Substitute(Target.Value, " ", "" ): _
            Target.Value = Left(Temp, 3) & " " & Right(Temp, 3): Exit
Sub
    For x = 1 To UBound(data, 1) Step 1
        For y = 1 To UBound(data, 2)
            Temp = Application.Substitute(data(x, y), " ", " ")
            If Len(Temp) <> 6 Then
                MsgBox "Saisie incorrecte"
                Exit Sub
            End If
            data(x, y) = Left(Temp, 3) & " " & Right(Temp, 3 )
        Next
    Next
    Application.EnableEvents = False
    Target = data
    Application.EnableEvents = True
End Sub

On 2 avr, 07:36, Pierre.M wrote:



Exactement le genre de truc que je cherchais. Merci.

Cependant cette macro ne fonctionne pas dans un cas. C'est quand je
colle plusieurs lignes en même temps.
Serait-il possible de l'adapter ? Mes connaissances ne sont pas
suffisantes pour ça...

Merci encore et bonne journée.

Pierre.M

On 2008-04-02 00:38:55 +0200, "Daniel.C" said:

Valable pour la colonne A :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 Then Exit Sub
If Target.Count > 1 Then Exit Sub
Dim Temp As String
Temp = Application.Substitute(Target.Value, " ", "")
If Len(Temp) <> 6 Then
MsgBox "Saisie incorrecte"
Exit Sub
End If
Application.EnableEvents = False
Target.Value = Left(Temp, 3) & " " & Right(Temp, 3)
Application.EnableEvents = True
End Sub

Daniel
"Pierre.M" a écrit dans le message de news :

Merci beaucoup pour le coup de main.
Ca fonctionne bien-sur, mais cette solution ne m'arrange pas vraiment
car
elle m'oblige a creer une colonne supplementaire et à faire des man ips
diverses...

Je cherche plutot un "truc automatique" qui ferait la meme chose, et
dans
la meme colonne.
Je pensais a une macro evenementielle par exemple.
Je tape ou je colle mes donnees dans ma colonne et la macro modifie l e
format au meme endroit.

Possible ? Pas possible?

Merci encore.

Pierre.M

On 2008-04-01 21:38:41 +0200, "Daniel.C" sai d:

Bonsoir.
=GAUCHE(SUBSTITUE(A1;" ";"");3)&" "&DROITE(SUBSTITUE(A1;" ";"");3)
Cordialement.
Daniel
"Pierre.M" a écrit dans le message de ne ws:

Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et
d'une
ou
plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de
figure
le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie
directe.

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M- Masquer le texte des messages précédents -





- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -







Avatar
Pierre.M
Merci a tous les 3 avec beaucoup de retard.
Vos idees fonctionnent toutes tres bien.
J'ai reussi a les adapter et a finaliser mon travail.
Merci encore et bon WE.

Pierre.M


On 2008-04-01 19:14:33 +0200, Pierre.M said:

Bonsoir tous,

Dans une colonne j'ai des references composees de 6 caracteres et d'une
ou plusieurs espaces du type 'AAAAAA', 'AAA AAA', AAAAA A' ...

Est-il possible par macro (ou autre) d'obtenir dans tous les cas de
figure le type suivant 'AAA AAA' ?

Je precise que ces cellules sont remplies la plupart du temps par
copier-coller de lignes completes ou plus rarement par saisie directe.

Si quelqu'un avait une idee, je lui en serai tres reconnaissant.

Bonne soiree.

Pierre.M