Extraction du dernier mot d'une cellule Excel

Le
mahefa Hors ligne
Bonjour,

J'ai un petit problème pour améliorer la fonction suivante :

Function pf(lc, Optional last)
tmp = Trim(lc.Value)
tab1 = Split(tmp, " ")
If IsMissing(last) Then
tab1(UBound(tab1)) = ""
pf = RTrim(Join(tab1, " "))

Else
pf = tab1(UBound(tab1))
End If
End Function

Cette fonction marche bien, mais mon problème est comment faire :

- si le dernier mot est une chaîne de caractère alphanumérique, on le remplace par " "

- si la cellule est vide, la valeur renvoyée est le signe d'erreur #VALEUR, comment enlever cette signe d'erreur, je veux la remplacer par " "

Est-ce que quelqu'un peut m'aider.

Merci d'avance pour votre aide.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
at
Le #23704101
mahefa a émis l'idée suivante :
Bonjour,

J'ai un petit problème pour améliorer la fonction suivante :

Function pf(lc, Optional last)
tmp = Trim(lc.Value)
tab1 = Split(tmp, " ")
If IsMissing(last) Then
tab1(UBound(tab1)) = ""
pf = RTrim(Join(tab1, " "))

Else
pf = tab1(UBound(tab1))
End If
End Function

Cette fonction marche bien, mais mon problème est comment faire :

- si le dernier mot est une chaîne de caractère alphanumérique, on le
remplace par " "

- si la cellule est vide, la valeur renvoyée est le signe d'erreur #VALEUR,
comment enlever cette signe d'erreur, je veux la remplacer par " "

Est-ce que quelqu'un peut m'aider.

Merci d'avance pour votre aide.



C'est pas le bon groupe, ici c'est visual basic, mais de toute façon
y'a plus personne ici.

Pour répondre à ta question, vu que tu maîtrises plutôt bien pourquoi
ne pas utiliser un

if tmp = "#VALEUR" then ...
Ou encore, je ne sais pas si elle existe en vba, c'est la fonction
replace.


Ou alors j'ai pas compris ton problème.

A+
Gloops
Le #23706081
mahefa a écrit, le 30/08/2011 08:36 :
Bonjour,

J'ai un petit problème pour améliorer la fonction suivante :

Function pf(lc, Optional last)
tmp = Trim(lc.Value)
tab1 = Split(tmp, " ")
If IsMissing(last) Then
tab1(UBound(tab1)) = ""
pf = RTrim(Join(tab1, " "))

Else
pf = tab1(UBound(tab1))
End If
End Function

Cette fonction marche bien, mais mon problème est comment faire :

- si le dernier mot est une chaîne de caractère alphanumérique, o n le remplace
par " "

- si la cellule est vide, la valeur renvoyée est le signe d'erreur #V ALEUR,
comment enlever cette signe d'erreur, je veux la remplacer par " "

Est-ce que quelqu'un peut m'aider.

Merci d'avance pour votre aide.



Bonjour,

En début de fonction :
If Nz(lc, "") = "" Then
pf = ""
Exit Function
End If

comme ça on a résolu la deuxième question. C'est quand même plus simple
d'éviter de provoquer une erreur que de la remplacer par autre chose
après, et en plus l'avantage c'est que ça marche.

J'avoue que je suis un peu hésitant sur le test de l'alphanumérique. Il
y a bien la solution de tester le code ASCII de chaque caractère, mais
je n'affirmerais pas qu'il n'y a pas plus adapté. Regarde bien dans les
fonctions de type texte.

Je vais partir du principe qu'on aura une fonction IsText qui retourne
vrai si son argument est alphanumérique, faux sinon. Si tu ne trouves
rien de mieux, tu vas bien savoir écrire une fonction qui parcourt le
texte en boucle pour voir si chaque caractère est dans l'intervalle
voulu (lettre ou chiffre), et retourner vrai ou faux en fonction de ça.
Vérifier si IsText n'est pas un mot réservé.

Dans le deuxième terme de l'alternative on a vidé explicitement le
dernier mot, donc je ne vois pas bien ce qu'il reste à faire dessus,

ensuite

Else
If IsText(tabl(UBound(tabl))) Then
pf = " "
Else
pf = tabl(UBound(tabl))
End If
End If


C'est vrai que le newsgroup microsoft.public.fr.excel existe encore,
même si le serveur Microsoft, qui était le principal là-dessus, a c essé
de fonctionner, ce qui fait qu'on ne joint pas forcément les mêmes
personnes selon sur quel serveur on poste.
J'imagine que GigaNews doit l'avoir ?

Par hasard je suis passé ici aujourd'hui, c'est vrai que je ne passe pa s
tous les jours puisque d'habitude il n'y a rien.
Au demeurant, j'ai une bonne expérience d'Excel, mais je ne l'ai pas
sous la main, donc je réponds de mémoire, alors je te laisse tester.

Je pense que je vais repasser demain pour le cas où quelque chose ne
serait pas clair.
Gloops
Le #23706141
Gloops a écrit, le 31/08/2011 08:45 :
Dans le deuxième terme de l'alternative on a vidé explicitement le
dernier mot,



Je voulais dire le premier, bien sûr.
Jean-marc
Le #23706871
Gloops wrote:

J'avoue que je suis un peu hésitant sur le test de l'alphanumérique.
Il y a bien la solution de tester le code ASCII de chaque caractère,
mais je n'affirmerais pas qu'il n'y a pas plus adapté. Regarde bien
dans les fonctions de type texte.



Hello Gloops,
le plus simple est effectivement de faire une simple boucle.
On peut par exemple faire ceci:

Function isAlphaNumericString(ByVal str As String) As Boolean
Dim length As Long
Dim i As Long
Dim car As String

length = Len(str)
If length > 0 Then
For i = 1 To length
car = Mid$(str, i, 1)
If Not (isAlpha(car) Or isDigit(car)) Then
isAlphaNumericString = False
Exit Function
End If
Next i
isAlphaNumericString = True
End If
End Function

Function isAlpha(ByVal car As String) As Boolean
Const diacritics As String = "àâäéèëêîïôöùüçÂÄËÊÏÎÔÖÛÜ"

If ((car >= "A") And (car <= "Z")) Or _
((car >= "a") And (car <= "z")) Or _
(InStr(diacritics, car) > 0) Then
isAlpha = True
End If
End Function

Function isDigit(ByVal car As String) As Boolean

If (car >= "0") And (car <= "9") Then
isDigit = True
End If
End Function


Bonne journée,



--
Jean-marc
Publicité
Poster une réponse
Anonyme