Enchainement de fonctions, problème de format
Bonjour a tous,
Merci infiniment à tous ceux qui participent au forum en posant des questions et surtout en y répondant. C'est mon premier job et j'ai un gros projet à mener en vba. Je ne sais pas comment j'aurai pu faire sans vous tous.
J'ai un petit problème de réglage que je n'arrive pas a solutionner.
On a une chaine de caractère du type "N° IMPAIRS DU 1 AU 59 ET N° PAIRS DU 2 AU 52" et j'ai besoin d'isoler dans une colonne l'intervalle des chiffres paires ("2 52") et dans une autre l'intervalle des chiffres impaire ("1 59"). Grâce a ce forum je commence a me débrouiller un peu dans la gestion des chaines de caractères donc j'ai réussi à écrire les trois petites fonctions ci-dessous que je compte utiliser dans une procédure.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
'ne conserve que les mots composés de valeurs numériques
Function VALNUM(texte$)
Dim i%, txt$()
txt() = Split(texte)
For i = 0 To UBound(txt)
If IsNumeric(txt(i)) Then _
VALNUM = VALNUM & txt(i) & " "
Next i
End Function
' ne conserve que les valeurs numériques paires
Function VALPAIR(texte$)
Dim i%, txt$()
txt() = Split(texte)
For i = 0 To UBound(txt)
If (txt(i) Mod 2) = 0 Then _
VALPAIR = VALPAIR & txt(i) & " "
Next i
End Function
'ne conserve que les valeurs numériques impaires
Function VALIMPAIR(texte$)
Dim i%, txt$()
txt() = Split(texte)
For i = 0 To UBound(txt)
If (txt(i) Mod 2) <> 0 Then _
VALIMPAIR = VALIMPAIR & txt(i) & " "
Next i
End Function |
Chacune des formules marchent biens isolément mais j'ai besoin d'associer VALNUM avec respectivement VALPAIR et VALIMPAIR. Or, quand je fait des testes sur ma feuille excel, je n'arrive pas a associer les formules que cela soit séparément (Exemple A1="N° IMPAIRS DU 1 AU 59" ; B1=VALNUM(A1)="1 59"; C1=VALIMPAIR(B1)="1 59") ou ensemble (Exemple B1=VALIMPAIR(VALNUM(A1))="1 59"). La cellule affiche un message "valeur".
Est-ce que la fonction nécessite une option particulière ou est-ce un problème de format ? Je crois qu'il me manque quelque chose.
Enchainement de fonctions, problème de format
Bonjour,
hmmm... si A1="N° IMPAIRS DU 1 AU 59" alors B1=VALNUM(A1) ne renvois pas "1 59" mais renvois "1 59 "
de fait VALPAIR(VALNUM(A1)) renvois #Valeur car lors de l’exécution de la boucle dans de tes fonctions VALPAIR ou VALIMPAIR la derniere valeur de txt(i) sera vide !
Donc dans ta fonction VALNUM soit tu geres avec une condition if bien placé pour éviter d'avoir un espace en trop soit tu utilises
RTrim$ à la fin de cette fonction.
Unparia Bonjour, oui mais à priori SectoSSD injecte le type de chaine tel que "N° IMPAIRS DU 1 AU 59" uniquement dans la fonction VALNUM afin d'en extraire les valeurs numériques et ne prend donc pas trop de risque avec la fonction isnumeric().
A+
Philippe