Annonce

Réduire
Aucune annonce.

Un bizarrerie d'Excel VBA

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Un bizarrerie d'Excel VBA

    Un ami vient de m'envoyer le message suivant:

    Je viens de découvrir une bizarrerie dans Visual Basic for Applications pour Excel.
    Dans un module VBA Excel 2007, j'ai voulu utiliser la fonction Val pour convertir un texte en nombre.
    Voici le code utilisé :
    Function retVal(v As String) As Double
    retVal = Val(v)
    End Function
    Tout allait bien jusqu'à ce que j'envoie à cette fonction une chaîne du type :
    nombre1 & "d" & nombre2 (par exemple Val("54d3"), avec nombre1=54 et nombre2=3)

    En principe, la fonction Val(nombre1 & "d" & nombre2) devait tout simplement retourner nombre1 (soit 54 dans l'exemple).
    Au lieu de cela, elle a renvoyé nombre1 * 10 puissance nombre2
    (dans l'exemple 54 * 10 puissance 3)

    Ainsi, avec cette saisie dans la feuille Excel :


    au lieu de 77 en C4 et 54 en C6, on obtient ceci:


    Je ne sais pas si cette bizarrerie a été relevée par ailleurs.

    As-tu une explication pour cela ?
    Ma réponse a été: "Je vais demander."
    Et c'est ce que je fais ici.


    _
    "Je suis un homme et rien de ce qui est humain, je crois, ne m'est étranger", Terence

  • #2
    Les ms excel, accèss, même word tellement je ne les utilise plus depuis des années, je doute que je serai capable d'écrire une simple requête.
    Tape sur google "excel pratique"
    Dernière modification par Abdu, 10 septembre 2016, 23h16.

    Commentaire


    • #3
      Bonsoir,

      Dans VBA, la fonction Val est une fonction native de VBA mais qui nécessite qu'on lui définisse le type de la valeur en entrée et la valeur en sortie.

      Exemple: Function Val( InputVal As String) As Double
      La valeur en entrée est une valeur au format string (chaine de caractères) et la valeur en sortie est une valeur numérique à virgule flottante en double précision ( compris entre -1,79769313486231570E+308 et -4,94065645841246544E-324 )

      Dans l'exemple, il a créé une fonction RetVal qui ne fait que reprendre la valeur à la sortie de le fonction Val. Il a spécifié les arguments de la première fonction mais pas la seconde (Function Val).

      S'il avait défini la fonction Val par
      Function Val( InputVal As String) As Double
      et Function RetVal (InputVal As String) As Double

      La fonction RetVal = Val(v) lui aurait retourné 77 si v=77d6.
      Le fait de ne pas définir les arguments de la fonction Val, je ne sais pas ce que peut prendre Excel comme arguments par défaut.

      Je vais essayer de faire ce test chez moi et posterai le résultat.

      Commentaire


      • #4
        J'ai essayé et à chaque fois, j'ai eu des erreurs de compilation pour mauvais format.

        Commentaire


        • #5
          Bonsoir Boubibtis,
          Il me semble que certaines versions d'Excel VBA n'acceptent pas les fonctions de manipulation des chaînes de caractères, y compris parfois les fonctions de conversion de types qui ont pour argument une chaîne (string).

          La fonction Val() convertit les caractères numériques absolument contigus à gauche dans une chaîne de caractères en valeur numérique.
          Ainsi : Val("0325B071") renvoie 325 (conversion du groupe de caractères numériques à gauche jusqu'à la lettre "B").

          Le problème est que la lettre "d" est interprétée comme un caractère spécial par la fonction Val(). Et cela ne semble pas avoir été documenté par Microsoft.
          S'agit-il de ce qu'on appelle un œuf de Pâques ?
          "Je suis un homme et rien de ce qui est humain, je crois, ne m'est étranger", Terence

          Commentaire


          • #6
            Bonjour Benam,

            La fonction Val retourne une valeur numérique mais en input, elle s'attend à ce qu'on lui définisse le format de la valeur en input: string, range ou object.

            Je viens de refaire le test en affectant la valeur 5d4 à une variable x.
            Celle-ci se transforme avant toute exécution de la macro à 50000#. Puis, je me suis lancé sur une recherche sur le net des conventions de nommage de 10 exponentiel un nombre n bah dans pas mal de langage informatique le 10e n est écrit dn ce qui voudrait dire que VBA transforme le xdn à x.....n0# et ce sans aucun lien avec les deux fonctions données dans l'exemple Val et Retval.

            Désolé. Je ne connais ce qu'est un oeuf de pâques en VBA.

            Commentaire


            • #7
              Oeuf de Pâques (informatique)

              Selon Wikipedia :
              Un easter egg (terme anglais pour « œuf de Pâques ») est, en informatique ou dans les jeux vidéo, une fonction cachée au sein d'un programme (animation, jeu, message, etc.) accessible grâce à un mot-clé ou à une combinaison de touches ou de clics.
              Un easter egg n'est pas assimilable à un virus : il n'abîme ni le programme original ni les autres données et ne se propage pas ; il est caché et a été inséré volontairement par les développeurs. Il peut s'agir de la liste des auteurs du logiciel, d'un jeu, d'une blague, d'une séquence inédite, de bruitages. On en trouve aussi dans les jeux vidéo (Diablo est un exemple connu). Les niveaux cachés sont souvent classés comme easter eggs, ainsi que les clins d'œil ou les références dans les jeux vidéo.
              Des exemples dans Google:
              Tapez comme recherche dans Google "do a barrel roll"
              Si vous tapez comme recherche dans Google "answer to life the universe and everything", vous aurez comme réponse 42 (et une calculatrice)
              Si vous recherchez "anagramme" Google va vous proposer "Gare maman"
              "Je suis un homme et rien de ce qui est humain, je crois, ne m'est étranger", Terence

              Commentaire


              • #8
                Pour le plaisir, des œufs de Pâques pour Mozilla Firefox:
                Taper dans la barre d'adresses:
                about:mozilla
                about:robots
                "Je suis un homme et rien de ce qui est humain, je crois, ne m'est étranger", Terence

                Commentaire

                Chargement...
                X