Problème avec Application.Evaluate

sb_guido

XLDnaute Nouveau
Bonjour à tous,

J'ai appris à utiliser la méthode Application.Evaluate pour permettre de calculer une formule directement à partir du VBEditor.

Quand j'écris ce code, tout est correct!

Code:
Dim BedColumn as Integer
Dim Availability As Integer
Dim RoomName As String
Dim RoomNumber as Name  'this is a Named Range from excel's Name Manager

BedColumn = 112
RoomName = RoomNumber.Name

Availability = Application.Evaluate("VLOOKUP(B14,DATA!A1:EW36," & BedColumn & ",FALSE)")

Par contre, le code ci-dessous génère une erreur à cause de BedColumn = App...

Code:
Dim BedColumn as Integer
Dim Availability As Integer
Dim RoomName As String
Dim RoomNumber as Name  'this is a Named Range from excel's Name Manager

RoomName = RoomNumber.Name

BedColumn = Application.Evaluate("VLOOKUP(" & RoomName & ",LIST!C5:D50,2,FALSE)")
Availability = Application.Evaluate("VLOOKUP(B14,DATA!A1:EW36," & BedColumn & ",FALSE)")

Le VLOOKUP du BedColumn fonctionne dans une feuille Excel, mais pas à l'intérieur de mon code. Je ne comprend tout simplement pas pourquoi le Availability fonctionne mais pas le BedColumn...

Merci à tous pour vos suggestions!

Sebastien
 

Staple1600

XLDnaute Barbatruc
Re : Problème avec Application.Evaluate

Bonsoir

En cas de souci, tu peux toujurs dégainer le Msgbox
VB:
Dim BedColumn as Integer
Dim Availability As Integer
Dim RoomName As String
Dim RoomNumber as Name  'this is a Named Range from excel's Name Manager

RoomName = RoomNumber.Name
MsgBox RoomName ' Il affiche quoi le msgbox ?
BedColumn = Application.Evaluate("VLOOKUP(" & RoomName & ",LIST!C5:D50,2,FALSE)")
Availability = Application.Evaluate("VLOOKUP(B14,DATA!A1:EW36," & BedColumn & ",FALSE)")
 

laurent950

XLDnaute Accro
Re : Problème avec Application.Evaluate

Bonsoir,

Vous pouvez stocker la formule dans un tableau au lieu de la stocker par evaluate, je suis pas sur mais c'est pour une solution de contournement est aussi d'efficacité.

'BedColumn = Application.Evaluate("VLOOKUP(" & RoomName & ",LIST!C5:D50,2,FALSE)")
'Availability = Application.Evaluate("VLOOKUP(B14,DATA!A1:EW36," & BedColumn & ",FALSE)")

'calculer une formule directement à partir du VBEditor
'Stock dans un tableau au lieu d'evaluate

dim TStock() as integer
redim TStock(1To1,1to2)
TStock (1,1) = "VLOOKUP(" & RoomName & ",LIST!C5:D50,2,FALSE)"
TStock (1,2) = "VLOOKUP(B14,DATA!A1:EW36," & BedColumn & ",FALSE)"

' Pour lire dans le tableau
msgbox = TStock (1,1)
msgbox = TStock (1,2)

Laurent
 

sb_guido

XLDnaute Nouveau
Re : Problème avec Application.Evaluate

Il répond Ch53_L1 comme il devrait.
Le VLOOKUP dans une cellule traditionnelle Excel fonctione en recherchant le Ch53_L1.

Alors ça doit être quelque part dans le VLOOKUP mais je trouve pas...

Quelqu'un à une idée?
 

Staple1600

XLDnaute Barbatruc
Re : Problème avec Application.Evaluate

Bonsoir


Ca semble OK en faisant comme ceci
1) Je passe pas par Evaluate
2) J'utilise une plage nommée DATAS
3) Je le laisse remanier ton code avec ces modifs
4) redis-nous si cela fonctionne comme tu le souhaites
VB:
Sub AvailableDates2()
UserForm1.Show
For Each RoomNumber In ThisWorkbook.Names
RoomNumberConfirmation = Left(RoomNumber.Name, 2)
RoomName = RoomNumber.Name
If RoomNumberConfirmation = "Ch" Then
MsgBox Application.VLookup(RoomName, [DATAS], 2, False) ' -> A SUPPRIMER ->Application.Evaluate("VLOOKUP(" & RoomName & ",LIST!C5:D50,2,FALSE)")
'je le laisse faire les modifs finales ;-)
'BedColumn = Application.Evaluate("VLOOKUP(" & RoomName & ",LIST!C5:D50,2,FALSE)")
'
'Sheets("Test_visuel").Select
'Availability = Application.Evaluate("VLOOKUP(B14,DATA!A1:EW36," & BedColumn & ",FALSE)")
'
'    'Vérifie disponibilité et change la couleur
'    If Availability = 0 Then                                'disponible = 0
'    Range(RoomNumber).Interior.Color = RGB(146, 208, 80)    'green
'    Else
'    Range(RoomNumber).Interior.Color = RGB(192, 0, 0)       'red
'    End If
'
'Else
End If
    
Next RoomNumber
Range("A1").Select
End Sub

PS: Tu vois que le fichier joint fut utile ;)
 
Dernière édition:

sb_guido

XLDnaute Nouveau
Re : Problème avec Application.Evaluate

Bonjour Staple1600,

Je n'ai pas exactement compris comment passer par [DATA]. À savoir comment le déclarer et si je devais bel et bien mettre les crochets dans ma formule.

Par contre, j'ai trouvé la raison pour laquelle le .Evaluate ne fonctionnait pas.
En procédant ainsi, tout fonctionne!

Code:
Sheets("List").Cells(i, 6) = Application.Evaluate("VLOOKUP(" & RoomName & ",C5:D50, 2 , FALSE)")
BedColumn = Cells(i, 6).Value
            
Sheets("List").Cells(i, 7) = Application.Evaluate("VLOOKUP(B12 ,DATA!A1:EW36," & BedColumn & ",FALSE)")
Availability = Cells(i, 7).Value

Cela semble vouloir dire que .Evaluate ne peut être attribué à une variable. Je dois le passer dans une cellule et par la suite le faire passer en variable...

Merci à tous de votre aide et Staple1600, n'hésitez surtout pas à fournir un peu plus de détails à votre explication pour me permettre de bien comprendre ce que vous vouliez dire. Je retenterai assurément votre méthode!
 

sb_guido

XLDnaute Nouveau
Re : Problème avec Application.Evaluate

En écrivant

Code:
MsgBox Application.VLookup(RoomName, [DATAS], 2, False)

J'ai toujours "Invalid procedure call or argument".
Je crois que Application.VLookup n'est pas correcte...

Je ne comprend pas pourquoi il fonctionne chez vous :S
 
C

Compte Supprimé 979

Guest
Re : Problème avec Application.Evaluate

Bonjour le fil, Salut Staple1600 ;)

Inutile de passer par une feuille, il suffit d'utiliser directement la fonction !?
Code:
'BedColumn = Application.Evaluate("VLOOKUP(" & RoomName & ",LIST!C5:D50,2,FALSE)")
BedColumn = Application.VLookup(RoomName, Sheets("List").Range("C5:D50"), 2, False)
'Availability = Application.Evaluate("VLOOKUP(B14,DATA!A1:EW36," & BedColumn & ",FALSE)")
 Availability = Application.VLookup(Range("B14"), Sheets("DATA").Range("A1:EW36"), BedColumn, False)

A+
 

Staple1600

XLDnaute Barbatruc
Re : Problème avec Application.Evaluate

Bonjour à tous,
oooooooooooooooooooooooooooooooooooo
Salut BrunoM45 ;)

sb_guido
:
Ça marche chez moi parque j'ai une plage nommée DATAS comme expliqué précédemment.

Tu as fait la manip décrite dans mon avant-dernier message?
 

Staple1600

XLDnaute Barbatruc
Re : Problème avec Application.Evaluate

Re

sb_guido
Peux-tu tester cette macro sur un classeur vierge, stp
Code:
Sub MacroTEST()
With [A1:A10]
    .FormulaR1C1 = "=CHAR(64+ROW())"
    .Offset(, 1).FormulaR1C1 = "=ROW()"
    .Resize(, 2).Name = "DATAS"
End With
MsgBox Application.VLookup("C", [DATAS], 2, 0)
End Sub

Normalement, une MsgBox doit afficher 3
(C'est le cas sur mon netbook, mais qui n'est pas sous XL2010)
 

Discussions similaires

Statistiques des forums

Discussions
312 858
Messages
2 092 876
Membres
105 547
dernier inscrit
Phil Moi