Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 Barbatruc
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!C550,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!C550,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?
 

sb_guido

XLDnaute Nouveau
Re : Problème avec Application.Evaluate

Bonjour,

Si cela permet de mieux comprendre le problème, voici le fichier compressé.

Désolé de ne pas l'avoir mit avant et merci de votre aide!!!
 

Pièces jointes

  • Camps v0r6.zip
    308.5 KB · Affichages: 53

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!
 

Staple1600

XLDnaute Barbatruc
Re : Problème avec Application.Evaluate

Bonsoir

Il suffit de sélectionner la plage de cellules à nommer
puis de faire Insertion/Noms/Définir

Donc dans ton cas la plage de cellules:
Code:
C5:D50
Je croyais que tu savais le faire puisque dans ton code, on pouvait lire:
'this is a Named Range from excel's Name Manager
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…