Sélectionner une chaîne de caracère se trouvant avant un point

Résolu
tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006 - 10 sept. 2006 à 12:07
tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006 - 10 sept. 2006 à 20:05
Bonjour tout le monde,
Je voudrais sélectionner dans des cellules d'un tableau Excel, tous les caractères se trouvant avant le premier point de la chaîne complète.
Ex : la cellulel contient : "bonjour.jesperketoutlemondevabien"; je voudrais sélectionner seulement "bonjour", (le nombre de caractère se trouvant avant le point varie en fonction des cellules).
J'ai un tableau contenant à peu près 2000 lignes.
Serait-il possible de réaliser ce genre de pgm avec =STXT? Comment STXT s'emploie-t-il?

7 réponses

Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
10 sept. 2006 à 12:32
Salut,

Le principe c'est :
'à l'aide des fonctions Excel
=STXT(A1;1;(CHERCHE(".";A1;1))-1)
'en code VBA
ChaineAvantPoint = Left$(Cells(1, 1).Value, Instr(Cells(1, 1).Value, ".") - 1)

Reste à savoir si tu veux faire exactement, juste sélectionner ? remplacer ?...
3
geobasic Messages postés 69 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 3 octobre 2006
10 sept. 2006 à 12:34
En VBA tu peux utiliser la commande Instr qui permet de repérer la position d'un caractère dans une chaîne. Dans ton exemple tu fais :
pos = Instr(MaCellule,".")

Si pos te rend une valeur > 0 alors tu utilise Left pour  extraire la chaîne avant le point:

chaine = Left(MaCellule, pos - 1)

c'est tout.
3
tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006
10 sept. 2006 à 17:00
Merci Dolphin et geobasic,
En fait je ne pense pas m'être très bien exprimé dans ma première explication
Pour être plus précis, je voudrais que le point et tous les caractères se trouvant à droite du point disparaissent.
Par exemple, je voudrais que la macro permette à  la cellule qui contient  : "bonjour.jesperketoutlemondevabien"; d'afficher seulement "bonjour".

C'est pour cela que je pensais au début utiliserun "STXT", qu'en pensez vous?
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 sept. 2006 à 17:04
Pourquoi les solutions qui t'ont été donné ne te conviennent-elles pas ?

Elles répondent pourtant à ta question.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006
10 sept. 2006 à 18:46
Alors en ce qui concerne la solution de dolphin :

Dim chaîneAvantPoint As String
ChaineAvantPoint = Left$(Cells(1, 1).Value, InStr(Cells(1, 1).Value, ".") - 1)

Cela ne donne rien lorsque je le test sur la première cellule

en ce qui concerne la solution de geobasic, et là encore, j'ai essayé de tester la solution mais sans succés,
Voici le code :

Dim pos As Integer
Dim chaine As String



j = 1
pos = InStr(Aj, ".")
If pos > 0 Then chaine = Left(Aj, pos - 1)



Do
j = j + 1
pos = InStr(Aj, ".")
If pos > 0 Then chaine = Left(Aj, pos - 1)



Loop While j < 2000



End Sub


Il ne se passe rien lorsque je lance cette macro  
j'avais mis dans les trois premières celleules de la colonne A :
<colgroup><col style=\"WIDTH: 48pt\" width=\"64\" /></colgroup>----
bonjour.essais, ----
test2.essais, ----
espoir.4ever
j'aurais voulu obtenir les résultats suivants : bonjour, test2, espoir.
Quelqu'un aurais une idée de l'erreur que j'ai commise ?
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 sept. 2006 à 19:05
Pour la première solution :
Cells(1, 1).Value =  Left$(Cells(1, 1).Value, InStr(Cells(1, 1).Value, ".") - 1)
<small> </small>

Pour la seconde :
Dim pos As Integer 
Dim chaine As String 

For j  = 1 To 1999 
    pos =  InStr (Cells(j, 1).Value, ".") 
    If pos > 0 Then 
        chaine  = Left(Cells(j, 1).Value, pos - 1) 
        Cells(j, 1).Value = chaine 
    End If 
Next

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
tibss Messages postés 21 Date d'inscription mercredi 26 avril 2006 Statut Membre Dernière intervention 12 septembre 2006
10 sept. 2006 à 20:05
Merci bcp casy , je vois que ma macro ne risquais pas de marcher lol non seulemnt j'utilisais mal pos mais en plus je ne réinitialisait pas cells(j,1) avec le nouveau résultat

@+++
3
Rejoignez-nous