Formule et variables

  • Initiateur de la discussion PikPik
  • Date de début
P

PikPik

Guest
Bonjour à tous,

Lorsque nous déclarons une variable par exemple dim TEffort() as int, est il possible de dire que i vaut une formule sans avoir à passer par une cellule, cf l'exemple suivant:

Code:
cellvar.Formula = '=VLOOKUP(' & T(k, j) + l & ',feuil1!Cel,' & i + 1 & ',FALSE)'
TEffort(k, j) = cellvar.Value

Et que nous remplacerions par:
Code:
TEffort(k, j)= '=VLOOKUP(' & T(k, j) + l & ',feuil1!Cel,' & i + 1 & ',FALSE)'

Tel quel cela ne marche pas mais existe t il une méthode?
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Pikpik, 2passage, le forum

BEEEEP, faute!!!

pas d'accord, 2passage, il y a moyen.
voici un exemple fonctionnel d'utilisation de la fonction RechercheV dans du code VBA.

Code:
    MsgBox WorksheetFunction.VLookup(Range('C17'), Range('A1:B15'), 2, False)

Cordialement, A+

Message édité par: yeahou, à: 28/06/2005 14:48
 
P

pikpik

Guest
Ah ok merci Yeahou et 2passage.

Mais quand je compile ca me dit que impossible de lire la méthode vlookup de la classe worksheetfunction.

Pourtant vlookup se trouve bien dans l'explorateur d'objets!!!
 
P

pikpik

Guest
D'ailleurs j'essai avec d'autres fonction et le message d'erreur est toujours le même:

TEffort(k, j, l, i) = Application.WorksheetFunction.Acosh(0.3) par exemple me redonne la même erreur. Mais pkoi snif snif?
 
P

pikpik

Guest
D'ailleurs j'essai avec d'autres fonction et le message d'erreur est toujours le même:

TEffort(k, j, l, i) = Application.WorksheetFunction.Acosh(0.3) par exemple me redonne la même erreur. Mais pkoi snif snif?
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re bonjour

voici un exemple fonctionnel, je crée un tableau VB avec en colonne 1 une valeur val&champ et en colonne 2 un message.
la dernière ligne de code recherche la valeur colonne 1 et renvoie en message la valeur colonne 2. J'utilise donc bien une fonction de recherche de feuille pour chercher une valeur dans un tableau VB.
si celà ne va pas, mets un fichier exemple.

Cordialement, A+

Code:
Dim Tab_Val(1 To 15, 1 To 2) As String, Val_Rech As String, Compteur As Integer
For Compteur = 1 To 15
Tab_Val(Compteur, 1) = 'val' & Compteur
Tab_Val(Compteur, 2) = 'la valeur est val' & Compteur
Next Compteur
Val_Rech = InputBox(prompt:='entrez la valeur cherchée', Default:='val4')
MsgBox WorksheetFunction.VLookup(Val_Rech, Tab_Val, 2, False)

Message édité par: yeahou, à: 28/06/2005 15:52
 
P

pikpik

Guest
Oui Yeahou ton code fonctionne parfaitement et tu as raison sur le Acosh puisque le cosh est toujours supérieur à 1 looool

Cependant j'ai beau essayé je n'arrive vraiment pas à adapter le code pour mon appli.

Voici un fichier qui represente un peu la situation à laquelle je suis confronté et l'erreur sortie est la même que celle décrite plus haut.
 
P

pikpik

Guest
Oui Yeahou ton code fonctionne parfaitement et tu as raison sur le Acosh puisque le cosh est toujours supérieur à 1 looool

Cependant j'ai beau essayé je n'arrive vraiment pas à adapter le code pour mon appli.

Voici un fichier qui represente un peu la situation à laquelle je suis confronté et l'erreur sortie est la même que celle décrite plus haut. [file name=test_20050629152827.zip size=9641]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/test_20050629152827.zip[/file]
 

Pièces jointes

  • test_20050629152827.zip
    9.4 KB · Affichages: 11

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

tu as deux problèmes:

1-dans la ligne
teff(k, j) = Application.WorksheetFunction.VLookup(tab1(k, j) + 1, tableau, j + 1, False)
tableau ne correspond à rien, je pense que tu veux faire une recherche dans tab1 ce qui se traduit par
teff(k, j) = Application.WorksheetFunction.VLookup(tab1(k, j) + 1, tab1, j + 1, False)

2-dans la même ligne (modifiée)
teff(k, j) = Application.WorksheetFunction.VLookup(tab1(k, j) + 1, tab1, j + 1, False)
ta valeur cherchée tab1(k, j) + 1 n'existe pas puisqu'elle correspond à (100 + k * 100) + 1, comme tu as positionné le dernier paramètre à false, cela signifie que tu cherches la correspondance exacte. Comme elle n'existe pas, tu as une erreur. Pour éviter un plantage, trois solutions:
a-limiter la recherche à des valeurs existantes:
teff(k, j) = Application.WorksheetFunction.VLookup(tab1(k, j) , tab1, j + 1, False)
b-passer le dernier paramètre à true ce qui permettra de renvoyer la valeur la plus approchante.
teff(k, j) = Application.WorksheetFunction.VLookup(tab1(k, j) + 1, tab1, j + 1, True)
c-établir une gestion d'erreur pour gérer le cas ou la valeur cherchée n'existe pas
On error goto 'renvoie à une routine de gestion d'erreur perso
On error resume next 'en cas d'erreur passe l'exécution à la ligne suivante, à réactiver ensuite la gestion normale par On error goto 0

Ces trois solutions fonctionnent sur ton code, à toi de choisir la plus adaptée.

rappel de la syntaxe
Application.WorksheetFunction.VLookup(valeurcherchéeencolonne1detableaudedonnées,tableaudedonnées, collonedetableaudedonnéesàrenvoyer,valeurapprochante)


Cordialement, A+

Message édité par: yeahou, à: 29/06/2005 21:50
 
P

pikpik

Guest
Je m'excuse d'abuser de ta gentillesse yehaou mais juste dans la syntaxe:

teff(k, j) = Application.WorksheetFunction.VLookup(tab1(k, j) + 1, tableau, j + 1, True)

tableau se réfère aux cellules A3 jusqu'à F5, et je comprends pas qu'il ne reconnaisse pas tableau comme un tableau.

Voila si tu peux m'expliquer vite fait ce dernier point je t'en serais sincérement reconnaissant.
 

Discussions similaires

Réponses
9
Affichages
428
Réponses
23
Affichages
1 K
Réponses
7
Affichages
328

Statistiques des forums

Discussions
312 286
Messages
2 086 811
Membres
103 392
dernier inscrit
doc_banane