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
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.
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.
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
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.
Gloops a écrit, le 31/08/2011 08:45 :
Dans le deuxième terme de l'alternative on a vidé explicitement le
dernier mot,
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
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
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
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