Utilisation des guillemets dans la fonction VBA evaluate

Bonjour,

J'ai souvent des soucis avec l'usage des guillemets en vba et je voudrais savoir si quelqu'un peut me renseigner là-dessus:

Par exemple les utilisations de "Evaluate" suivantes, je ne comprends pas comment "lire" les guillemets

Application.Evaluate("Networkdays(""" & DateSerial(2011, 4, 4) & """, """ & DateSerial(2011, 8, 4) & """)")

ou

Evaluate("Networkdays(""" & #4/4/2011# & """   ,  """ & #8/4/2011# & """)")

ou encore

Evaluate("Networkdays(""" & deb & """   ,  """ & fin & """)") 

=> deb et fin étant des variables date (

dim deb as Date

)

alors que sous une autre forme (qui fonctionne aussi), on a moins de guillemets:

Evaluate("Networkdays(""04/04/2005"",""4/8/2005"")")

Si vous avez une explication là-dessus je suis preneur car mes (longues) recherches sur internet aboutissent à des exemples mais toujours sans explications.

Merci d'avance

Bonjour gauguin,

Bon pour comprendre comment marche la formule et ce problème récurrent de compréhension des guillemets va falloir décortiquer la formule. Je tente une explication.

Déjà, la fonction Evaluate que l'on trouve ici sous la forme Application.Evaluate évalue la chaîne de caractère : "Networkdays(""" & DateSerial(2011, 4, 4) & """, """ & DateSerial(2011, 8, 4) & """)"

Si on met x = "Networkdays(""" & DateSerial(2011, 4, 4) & """, """ & DateSerial(2011, 8, 4) & """)" alors Application.Evaluate(x) retourne le même résultat.

Analysons donc cette chaîne de caractère partie par partie :

Partie 1 : "Networkdays("""

Il faut savoir qu'un double guillemet dans le code permet d'afficher un guillemet simple. Exemple : si on fait un MsgBox "Networkdays(""" cela affichera Networkdays("

Les couleurs sont ici pour que ça soit un peu plus compréhensible. Donc on voit que les guillemets orange ne s'affichent pas.

Partie 2 : & DateSerial(2011, 4, 4)

Ici, rien de difficile, les & permettent de faire une concaténation de texte. Donc si on veut afficher les parties 1 et 2, on aura Networkdays("04/04/2011

Partie 3 : & """, """

Dans cette troisième partie, on veut concaténer le texte """, """ à Networkdays("04/04/2011.

Si on a bien compris, vu que les guillemets bleus sont doublés, un seul sera affiché.

On aura donc "Networkdays(""" & DateSerial(2011, 4, 4) & """, """ => Networkdays("04/04/2011", "

Les doubles guillemets bleus deviennent des simples et les oranges disparaissent.

Partie 4 : & DateSerial(2011, 8, 4)

Même modèle que Partie 2. On aura à cette étape :

Networkdays("04/04/2011", "04/08/2011

Partie 5 : & """)"

Les guillemets bleus deviennent simples et les oranges n'apparaissent pas, ce qui nous fait :

Networkdays("04/04/2011", "04/08/2011")

La fonction evaluate évaluera donc bien le nombre de jours ouvrés entre 04/04/2011 et 04/08/2011.

Pour voir si tu as bien compris le système, prenons le dernier code que tu as donné : Evaluate("Networkdays(""04/04/2005"",""4/8/2005"")").

Appliquons les couleurs, ça nous fait : Evaluate("Networkdays(""04/04/2005"",""4/8/2005"")")

On enlève les guillemets orange et on simplifie les guillemets bleus, ce qui nous fait au final que la fonction Evaluate évalue la formule :

Networkdays("04/04/2005","4/8/2005"), ce qui donne comme résultat 5 jours chez moi (les mois et jours sont inversés)

Ouf ! Explication très longue et peut-être pas clair mais si tu décortiques bien l'explication, je pense qu'il y a moyen de mieux appréhender ces guillemets.

Petite astuce : un Evaluate("Networkdays(""04/04/2005"",""4/8/2005"")") équivaut à un [Networkdays("04/04/2005","4/8/2005")]. Tu remarqueras l'utilisation de crochets plutôt que Evaluate.

Par contre, s'il y a du texte à concaténer (avec des & par exemple) ou des variables, les crochets marchent moins bien.

Si tu as des questions, n'hésite pas.

Merci beaucoup vba-new , j'étudie ta réponse et je reviens vers toi si nécessaire!

L'erreur venait du fait que je pensais que pour afficher une guillemet il fallait l'entourer de deux guillemets.

En plus comme tous ça devait être transmis à la fonction, je ne comprenais à vrai dire plus rien.

Grâce à ton explication très détaillée et très claire en même temps, je pense que j'ai enfin compris !

Merci encore.

Rechercher des sujets similaires à "utilisation guillemets fonction vba evaluate"