Formule dans un Textbox

Calvus

XLDnaute Barbatruc
Bonsoir le forum,

J'ai vu que le sujet avait déjà été traité, mais je n'arrive pas à adapter à mon fichier.

J'ai 2 formules :
Code:
=INDEX(TabPoids;EQUIV(GAUCHE($B$15;2)*1;Dept;0);EQUIV(GAUCHE($H$55;NBCAR($H$55)+1-CHERCHE(" ";$H$55))*1;Poids;1))+0,55
Code:
=SI(CherchePoids2<100;CherchePoids;CherchePoids2*(CherchePoids/100))+2,74

Ce que j'aimerais, c'est afficher le résultat dans un Textbox, en fonction du résultat, ou à minima, avoir 2 Textbox et avoir le calcul de la formule dans chacun d'eux.

J'ai essayé :
Code:
TextBox2 = Formulalocal ="=Index...etc"
Mais le résultat envoyé est False.

Merci de votre aide.
 

job75

XLDnaute Barbatruc
Bonjour Calvus,

Il suffit d'évaluer les formules écrites avec la syntaxe anglaise :
Code:
TextBox1 = [INDEX(TabPoids,MATCH(LEFT(B15,2)*1,Dept,0),MATCH(LEFT(H55,LEN(H55)+1-FIND(" ",H55))*1,Poids,1))+0.55]
Textbox2 = [IF(CherchePoids2<100,CherchePoids,CherchePoids2*CherchePoids/100)+2.74]
Et si les formules peuvent renvoyer des valeurs d'erreur :
Code:
TextBox1 = "": TextBox2 = ""
On Error Resume Next
TextBox1 = [INDEX(TabPoids,MATCH(LEFT(B15,2)*1,Dept,0),MATCH(LEFT(H55,LEN(H55)+1-FIND(" ",H55))*1,Poids,1))+0.55]
TextBox2 = [IF(CherchePoids2<100,CherchePoids,CherchePoids2*CherchePoids/100)+2.74]
A+
 

Calvus

XLDnaute Barbatruc
Bonsoir Job, le Forum,

Tous mes vœux pour cette nouvelle année.

En fait j'ai parlé trop vite.
Les formules ne fonctionnent pas, ni aucune autre avec Index.
Les seules formules à vouloir fonctionner sont celles avec If, et que j'avais testé la dernière fois, sur mon fichier m'aidant à la construction de mon formulaire. Je ne pouvais tester les formules citées ici plus haut, mon classeur de construction étant dépourvu des références.
Ce dernier ayant été fini aujourd'hui, j'ai transféré mon Userform vers mon classeur de travail.
Or je n'obtiens rien, et en inscrivant directement les formules dans une cellule via le code, j'obtiens #Valeur.

Exemples :
VB:
TextBox3 = [If(J370<300,40, If(J370<500, 20, If(J370<800, 15,"")))]
fonctionne
VB:
TextBox1 = [if(e6="Transport",e2*2)]
fonctionne
VB:
[D15] = [Index(feuil20!b20:feuil20!c24,Match(feuil20!b22,feuil20!b20:feuil20!b24,0),2[B])[/B]]
ne fonctionne pas EDIT: fonctionne, j'avais oublié une virgule.
Le problème vient d'ailleurs, dans la partie droite de ma formule. Je cherche.

J'ai essayé plein de variantes, sans succès. Une idée ?
Merci
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Re,

Ce qui pose problème, c'est cette partie de la formule :

Code:
[MATCH(LEFT(H55,LEN(H55)+1-FIND(" ",H55))*1,Poids,1))+0,55]

Code:
LEFT(H55,LEN(H55)+1-FIND(" ",H55))*1
fonctionne à condition qu'on enlève le *1

J'enverrai un fichier demain.

Bonne nuit.
 

job75

XLDnaute Barbatruc
Bonjour Calvus,

Et merci, mes meilleurs vœux également pour cette nouvelle année.

Au post #2 j'ai bien écrit 0.55 et 2.74 avec un point et pas une virgule...

De plus j'ai bien dit qu'il fallait On Error Resume Next si une formule (celle avec MATCH/FIND) peut renvoyer une valeur d'erreur.

A+
 

Calvus

XLDnaute Barbatruc
Bonjour Job75 :), le Forum,

Oui, merci.
J'avais bien suivi les instructions et la virgule a été modifiée à la main sur ce fil, une erreur seulement ici donc. J'avais supprimé cette partie de mon code pour les tests. Mais c'est bien la partie droite qui pose problème. A moins qu'il n'y ait une autre erreur que je n'ai pas vue.

Je viens de faire un petit fichier sommaire reprenant l'architecture du mien.
La cellule H55 est en réalité P11, comme sur le fichier joint.
Les erreurs sont les mêmes.

Merci et bonne journée.
 

Pièces jointes

  • TabPoids Forum.xlsm
    17.3 KB · Affichages: 45

job75

XLDnaute Barbatruc
Re,

Et si l'on ne veut pas remplacer la virgule en P11, utiliser un nom défini :
Code:
Sub form()
ThisWorkbook.Names.Add "X", Replace([P11], ",", ".") 'nom défini
[D14] = [Index(b20:c24,Match(b22,b20:b24,0),2)]
[D15] = [INDEX(TabPoids,MATCH(LEFT(B15,2)*1,Dept,0),MATCH(LEFT(X,LEN(X)+1-FIND(" ",X))*1,Poids,1))+0.55]
[D16] = [MATCH(LEFT(X,LEN(X)+1-FIND(" ",X))*1,Poids,1))]
[D17] = [Left(X, Len(X) + 1 - Find(" ", X)) * 1]
[D18] = [Left(X, Len(X) + 1 - Find(" ", X))]
End Sub
A+
 

Calvus

XLDnaute Barbatruc
Re,

Job75, je viens de prendre connaissance de tes messages et te remercie.
Le post #9 répond parfaitement à mon problème, car seule la formule :
Code:
[D15] = [INDEX(TabPoids,MATCH(LEFT(B15,2)*1,Dept,0),MATCH(LEFT(X,LEN(X)+1-FIND(" ",X))*1,Poids,1))+0.55]
m'intéressait.
J'ai écrit les autres pour tenter de résoudre le problème.
Le problème venait donc de la virgule....

J'ai donc maintenant un Textbox qui fonctionne avec :
Code:
TextBox1 = [INDEX(TabPoids,MATCH(LEFT(B15,2)*1,Dept,0),MATCH(LEFT(X,LEN(X)+1-FIND(" ",X))*1,Poids,1))+0.55]
Je vais maintenant m'atteler à la seconde formule, ou probablement ce soir car je suis en plein boulot !

Et merci beaucoup car je n'aurais jamais trouvé tout seul !

Bonne après midi.
 

Calvus

XLDnaute Barbatruc
Bonjour Job75, le Forum,

Voici ma deuxième formule.
J'ai pas mal avancé dessus en modifiant suivant ta méthode, mais il reste un os.
Dans la macro form3, c'est la ligne qui doit écrire en E14 qui pose problème.
J'arrive à évaluer la formule toute seule, mais je n'arrive pas à l'intégrer dans le reste.
J'ai disséqué la formule dans les cellules E15 à E20 et ça fonctionne. Mais pas le tout ensemble.
Ce sera plus clair en visualisant le fichier.
Le fichier comprend également tous les noms définis.

Merci.
 

Pièces jointes

  • TabPoids Forum.xlsm
    21.7 KB · Affichages: 34

job75

XLDnaute Barbatruc
Bonjour Calvus, le forum,

Dans l'évaluation de [E14] CherchePoids et CherchePoids2 doivent être des noms définis, pas des variables :
Code:
Sub form3()
ThisWorkbook.Names.Add "Y", Replace([P11], ",", ".") 'nom défini
[Index(Tab_Poids_Chabas,Match(Left(B15, 2)*1,Dept_Chabas,0),Match(Left(Y,Len(Y)+1-Find(" ",Y))*1,Poids_Chabas,1))].Name = "CherchePoids"
ThisWorkbook.Names.Add "CherchePoids2", [Left(Y, Len(Y) + 1 - Find(" ", Y)) * 1]
[E14] = [IF(CherchePoids2<100,CherchePoids,CherchePoids2*CherchePoids/100)+2.74]
'[E14] = [IF(CherchePoids2<100,12,15)]
[E15] = [CherchePoids]
[E16] = [CherchePoids2]
[E18] = [Match(Left(B15, 2)*1,Dept_Chabas,0)]
[E19] = [Match(Left(Y,Len(Y)+1-Find(" ",Y))*1,Poids_Chabas,1)]
[E20] = [Left(Y,Len(Y)+1)]
End Sub
Bonne journée.

A+
 

job75

XLDnaute Barbatruc
Re,

Si la cellule qu'on nomme "CherchePoids" n'est pas trouvée, pour éviter un bug, il vaut mieux utiliser :
Code:
Sub form3()
ThisWorkbook.Names.Add "Y", Replace([P11], ",", ".") 'nom défini
ThisWorkbook.Names.Add "CherchePoids", [Index(Tab_Poids_Chabas,Match(Left(B15, 2)*1,Dept_Chabas,0),Match(Left(Y,Len(Y)+1-Find(" ",Y))*1,Poids_Chabas,1))]
ThisWorkbook.Names.Add "CherchePoids2", [Left(Y, Len(Y) + 1 - Find(" ", Y)) * 1]
[E14] = [IF(CherchePoids2<100,CherchePoids,CherchePoids2*CherchePoids/100)+2.74]
'[E14] = [IF(CherchePoids2<100,12,15)]
[E15] = [CherchePoids]
[E16] = [CherchePoids2]
[E18] = [Match(Left(B15, 2)*1,Dept_Chabas,0)]
[E19] = [Match(Left(Y,Len(Y)+1-Find(" ",Y))*1,Poids_Chabas,1)]
[E20] = [Left(Y,Len(Y)+1)]
End Sub
A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 107
Messages
2 085 354
Membres
102 873
dernier inscrit
yayo