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

trouver le texte à partir d'un espace via vba

24 réponses
Avatar
marc
Bonjour
J'aimerais être capable de sortir le texte à partir de la droite jusqu'à un espace

exemple:
A1= Fred Caillou Conseiller aux ventes, HANNOVER NIEDERSACHSEN GERMANY
J'aimerais avoir en B1
B1= Germany
Le texte est déjà importé en excel. Alors j'aimerais avoir une solution en VBA, mais si je sais qu'on peut le faire via une formule.
La macro devrait s'exécuter sur les cellules sélectionnés car chaque fichier n'ont pas le même nombre de ligne.
Merci de votre aide
Marc

10 réponses

1 2 3
Avatar
marc
Bonjour Isabelle
J'ai essayé ta macro sur un de mes fichiers et le résultat n'est pas aussi bon qu'avec le fichier que tu m'as envoyé.
Voici un exemple d'un de mes fichiers.

http://cjoint.com/?fvq34z64HH
Un gros merci pour ton aide
marc

"isabelle" a écrit dans le message de news:
voila,

http://cjoint.com/?fvqK6k3SOB

isabelle

marc a écrit :
Bonjour Isabelle
Lorsque je fais le test de la macro sur un de mes fichiers, rien ne se passe. Pas de message d'erreur, rien du tout...
merci de ton aide
Marc

"isabelle" a écrit dans le message de news:

bonjour Marc,

j'ai mis le résultat dans la cellule voisine de droite, c.Offset(0, 1) = x

Sub Macro1()
For Each c In Selection
For i = Len(c) To 1 Step -1
If Mid(c, i, 1) <> " " Then
x = Mid(c, i, 1) & x
Else
Exit For
End If
Next
c.Offset(0, 1) = x
x = ""
Next
End Sub

isabelle

marc a écrit :

Bonjour
J'aimerais être capable de sortir le texte à partir de la droite jusqu'à un espace

exemple:
A1= Fred Caillou Conseiller aux ventes, HANNOVER NIEDERSACHSEN GERMANY
J'aimerais avoir en B1
B1= Germany
Le texte est déjà importé en excel. Alors j'aimerais avoir une solution en VBA, mais si je sais qu'on peut le faire via une
formule.
La macro devrait s'exécuter sur les cellules sélectionnés car chaque fichier n'ont pas le même nombre de ligne.
Merci de votre aide
Marc
















Avatar
marc
Bonjour MichDenis et Serge
Je dois être bête car rien ne fonctionne
Voici un exemple de mon document
Merci beaucoup de votre aide
Marc

http://cjoint.com/?fvq34z64HH


"garnote" a écrit dans le message de news:
Ou plus généralement, en supposant que tu sélectionnes
tes textes sur une colonne :

Sub villes_pays()
For Each texte In Selection
L = Len(texte)
For i = L To 1 Step -1
If Mid(texte, i, 1) = Chr(32) Then
m = i
Exit For
End If
Next i
For i = L To 1 Step -1
If Mid(texte, i, 1) = "," Then
n = i
Exit For
End If
Next i
'Ville
texte.Offset(0, 1) = Trim(Mid(texte, n + 1, m - n - 1))
'Pays
texte.Offset(0, 2) = Mid(texte, m + 1)
Next texte
End Sub

Serge




Avatar
isabelle
bonjour Marc,

voila,

Sub Macro1()
For Each c In Selection
For i = Len(c) To 1 Step -1
zz = Mid(c, i, 1)
If Not c.Offset(0, 2) <> "" Then
If Mid(c, i, 1) <> Chr(160) Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 2) = x
x = ""
GoTo suivant
End If

Else
suivant:
If Mid(c, i, 1) <> "," Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 1) = x
x = ""
Exit For
End If
End If

Next
Next
End Sub

isabelle



marc a écrit :
Bonjour Isabelle
J'ai essayé ta macro sur un de mes fichiers et le résultat n'est pas aussi bon qu'avec le fichier que tu m'as envoyé.
Voici un exemple d'un de mes fichiers.

http://cjoint.com/?fvq34z64HH
Un gros merci pour ton aide
marc





Avatar
marc
Bonjour Isabelle
Ça fonctionne merveilleusement bien.
Un gros merci pour ton aide et bonne journée
Marc

"isabelle" a écrit dans le message de news: O9R$
bonjour Marc,

voila,

Sub Macro1()
For Each c In Selection
For i = Len(c) To 1 Step -1
zz = Mid(c, i, 1)
If Not c.Offset(0, 2) <> "" Then
If Mid(c, i, 1) <> Chr(160) Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 2) = x
x = ""
GoTo suivant
End If

Else
suivant:
If Mid(c, i, 1) <> "," Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 1) = x
x = ""
Exit For
End If
End If

Next
Next
End Sub

isabelle



marc a écrit :
Bonjour Isabelle
J'ai essayé ta macro sur un de mes fichiers et le résultat n'est pas aussi bon qu'avec le fichier que tu m'as envoyé.
Voici un exemple d'un de mes fichiers.

http://cjoint.com/?fvq34z64HH
Un gros merci pour ton aide
marc






Avatar
garnote
Isabelle, explique-moi le Chr(160) SVP.

Cette macro ne fonctionne pas si je l'utilise sur le document de Marc
mais si je réécris ses textes, ça fonctionne !


Sub villes_pays()
For Each c In Selection
t = Trim(c)
L = Len(t)
For i = L To 1 Step -1
If Mid(t, i, 1) = Chr(32) Then
m = i
Exit For
End If
Next i
For i = L To 1 Step -1
If Mid(t, i, 1) = "," Then
n = i
Exit For
End If
Next i
'Ville
c.Offset(0, 1) = Trim(Mid(t, n + 1, m - n - 1))
'Pays
c.Offset(0, 2) = Mid(t, m + 1)
Next c
End Sub









"isabelle" a écrit dans le message de news:
O9R$
bonjour Marc,

voila,

Sub Macro1()
For Each c In Selection
For i = Len(c) To 1 Step -1
zz = Mid(c, i, 1)
If Not c.Offset(0, 2) <> "" Then
If Mid(c, i, 1) <> Chr(160) Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 2) = x
x = ""
GoTo suivant
End If

Else
suivant:
If Mid(c, i, 1) <> "," Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 1) = x
x = ""
Exit For
End If
End If

Next
Next
End Sub

isabelle



marc a écrit :
Bonjour Isabelle
J'ai essayé ta macro sur un de mes fichiers et le résultat n'est pas
aussi bon qu'avec le fichier que tu m'as envoyé.
Voici un exemple d'un de mes fichiers.

http://cjoint.com/?fvq34z64HH
Un gros merci pour ton aide
marc






Avatar
garnote
Salut Marc,

En remplaçant Chr(32) par Chr(160), ça semble correct.
Est-ce bien le cas ?

Sub villes_pays()
For Each c In Selection
t = Trim(c)
L = Len(t)
For i = L To 1 Step -1
If Mid(t, i, 1) = Chr(160) Then
m = i
Exit For
End If
Next i
For i = L To 1 Step -1
If Mid(t, i, 1) = "," Then
n = i
Exit For
End If
Next i
'Ville
c.Offset(0, 1) = Trim(Mid(t, n + 1, m - n - 1))
'Pays
c.Offset(0, 2) = Mid(t, m + 1)
Next c
End Sub

Serge




"marc" a écrit dans le message de news:

Bonjour Isabelle
Ça fonctionne merveilleusement bien.
Un gros merci pour ton aide et bonne journée
Marc

"isabelle" a écrit dans le message de news:
O9R$
bonjour Marc,

voila,

Sub Macro1()
For Each c In Selection
For i = Len(c) To 1 Step -1
zz = Mid(c, i, 1)
If Not c.Offset(0, 2) <> "" Then
If Mid(c, i, 1) <> Chr(160) Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 2) = x
x = ""
GoTo suivant
End If

Else
suivant:
If Mid(c, i, 1) <> "," Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 1) = x
x = ""
Exit For
End If
End If

Next
Next
End Sub

isabelle



marc a écrit :
Bonjour Isabelle
J'ai essayé ta macro sur un de mes fichiers et le résultat n'est pas
aussi bon qu'avec le fichier que tu m'as envoyé.
Voici un exemple d'un de mes fichiers.

http://cjoint.com/?fvq34z64HH
Un gros merci pour ton aide
marc










Avatar
MichDenis
le Chr(160) SVP ce n'est pas un espace fait par la barre d'espacement
mais un "espace insécable" fréquent lors d'un importation de données



"garnote" a écrit dans le message de groupe de discussion :


Isabelle, explique-moi le Chr(160) SVP.

Cette macro ne fonctionne pas si je l'utilise sur le document de Marc
mais si je réécris ses textes, ça fonctionne !


Sub villes_pays()
For Each c In Selection
t = Trim(c)
L = Len(t)
For i = L To 1 Step -1
If Mid(t, i, 1) = Chr(32) Then
m = i
Exit For
End If
Next i
For i = L To 1 Step -1
If Mid(t, i, 1) = "," Then
n = i
Exit For
End If
Next i
'Ville
c.Offset(0, 1) = Trim(Mid(t, n + 1, m - n - 1))
'Pays
c.Offset(0, 2) = Mid(t, m + 1)
Next c
End Sub









"isabelle" a écrit dans le message de news:
O9R$
bonjour Marc,

voila,

Sub Macro1()
For Each c In Selection
For i = Len(c) To 1 Step -1
zz = Mid(c, i, 1)
If Not c.Offset(0, 2) <> "" Then
If Mid(c, i, 1) <> Chr(160) Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 2) = x
x = ""
GoTo suivant
End If

Else
suivant:
If Mid(c, i, 1) <> "," Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 1) = x
x = ""
Exit For
End If
End If

Next
Next
End Sub

isabelle



marc a écrit :
Bonjour Isabelle
J'ai essayé ta macro sur un de mes fichiers et le résultat n'est pas
aussi bon qu'avec le fichier que tu m'as envoyé.
Voici un exemple d'un de mes fichiers.

http://cjoint.com/?fvq34z64HH
Un gros merci pour ton aide
marc






Avatar
isabelle
salut Serge,

c'est un caractère dans le texte que Marc a fourni,

j'ai mis le texte en A1
en B1 =CODE(STXT($A$1;LIGNE();1))
en C1 ÊR(B1)
et recopier vers le bas pour trouver le fameux semblant d'espace qui est
en réalité un code 160

isabelle

garnote a écrit :
Isabelle, explique-moi le Chr(160) SVP.

Cette macro ne fonctionne pas si je l'utilise sur le document de Marc
mais si je réécris ses textes, ça fonctionne !


Sub villes_pays()
For Each c In Selection
t = Trim(c)
L = Len(t)
For i = L To 1 Step -1
If Mid(t, i, 1) = Chr(32) Then
m = i
Exit For
End If
Next i
For i = L To 1 Step -1
If Mid(t, i, 1) = "," Then
n = i
Exit For
End If
Next i
'Ville
c.Offset(0, 1) = Trim(Mid(t, n + 1, m - n - 1))
'Pays
c.Offset(0, 2) = Mid(t, m + 1)
Next c
End Sub









"isabelle" a écrit dans le message de news:
O9R$

bonjour Marc,

voila,

Sub Macro1()
For Each c In Selection
For i = Len(c) To 1 Step -1
zz = Mid(c, i, 1)
If Not c.Offset(0, 2) <> "" Then
If Mid(c, i, 1) <> Chr(160) Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 2) = x
x = ""
GoTo suivant
End If

Else
suivant:
If Mid(c, i, 1) <> "," Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 1) = x
x = ""
Exit For
End If
End If

Next
Next
End Sub

isabelle



marc a écrit :

Bonjour Isabelle
J'ai essayé ta macro sur un de mes fichiers et le résultat n'est pas
aussi bon qu'avec le fichier que tu m'as envoyé.
Voici un exemple d'un de mes fichiers.

http://cjoint.com/?fvq34z64HH
Un gros merci pour ton aide
marc












Avatar
marc
Bonjour Serge
Effectivement, ça fonctionne bien.
Je suis malheureusement pas assez fort en vba pour expliquer pourquoi, mais oui, ça fonctionne bien
Merci Serge

"garnote" a écrit dans le message de news:
Salut Marc,

En remplaçant Chr(32) par Chr(160), ça semble correct.
Est-ce bien le cas ?

Sub villes_pays()
For Each c In Selection
t = Trim(c)
L = Len(t)
For i = L To 1 Step -1
If Mid(t, i, 1) = Chr(160) Then
m = i
Exit For
End If
Next i
For i = L To 1 Step -1
If Mid(t, i, 1) = "," Then
n = i
Exit For
End If
Next i
'Ville
c.Offset(0, 1) = Trim(Mid(t, n + 1, m - n - 1))
'Pays
c.Offset(0, 2) = Mid(t, m + 1)
Next c
End Sub

Serge




"marc" a écrit dans le message de news:
Bonjour Isabelle
Ça fonctionne merveilleusement bien.
Un gros merci pour ton aide et bonne journée
Marc

"isabelle" a écrit dans le message de news: O9R$
bonjour Marc,

voila,

Sub Macro1()
For Each c In Selection
For i = Len(c) To 1 Step -1
zz = Mid(c, i, 1)
If Not c.Offset(0, 2) <> "" Then
If Mid(c, i, 1) <> Chr(160) Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 2) = x
x = ""
GoTo suivant
End If

Else
suivant:
If Mid(c, i, 1) <> "," Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 1) = x
x = ""
Exit For
End If
End If

Next
Next
End Sub

isabelle



marc a écrit :
Bonjour Isabelle
J'ai essayé ta macro sur un de mes fichiers et le résultat n'est pas aussi bon qu'avec le fichier que tu m'as envoyé.
Voici un exemple d'un de mes fichiers.

http://cjoint.com/?fvq34z64HH
Un gros merci pour ton aide
marc














Avatar
isabelle
...un poil plus court,

Sub Macro3()
For Each c In Selection
For i = Len(c) To 1 Step -1
If Asc(Mid(c, i, 1)) = 160 And y = 0 Then a = i: y = 1
If Asc(Mid(c, i, 1)) = 44 Then b = i: Exit For
Next
c.Offset(0, 1) = Mid(c, b + 1, Len(c) - b)
c.Offset(0, 2) = Right(c, Len(c) - a)
a = 0
b = 0
y = 0
Next
End Sub

isabelle

marc a écrit :
Bonjour Isabelle
Ça fonctionne merveilleusement bien.
Un gros merci pour ton aide et bonne journée
Marc

"isabelle" a écrit dans le message de news: O9R$

bonjour Marc,

voila,

Sub Macro1()
For Each c In Selection
For i = Len(c) To 1 Step -1
zz = Mid(c, i, 1)
If Not c.Offset(0, 2) <> "" Then
If Mid(c, i, 1) <> Chr(160) Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 2) = x
x = ""
GoTo suivant
End If

Else
suivant:
If Mid(c, i, 1) <> "," Then
x = Mid(c, i, 1) & x
Else
c.Offset(0, 1) = x
x = ""
Exit For
End If
End If

Next
Next
End Sub

isabelle



marc a écrit :

Bonjour Isabelle
J'ai essayé ta macro sur un de mes fichiers et le résultat n'est pas aussi bon qu'avec le fichier que tu m'as envoyé.
Voici un exemple d'un de mes fichiers.

http://cjoint.com/?fvq34z64HH
Un gros merci pour ton aide
marc












1 2 3