IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

CheckSpelling Orhographe Macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut CheckSpelling Orhographe Macro
    Bonjour,
    je comprend pas la macro
    bateau1() fonctionne et renvoie VRAI
    et la fonction
    bateau2() ne fonctionne pas et renvoie FAUX
    Merçi de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    'Macro fonctionne OK
    'renvoie VRAI
    Sub bateau1()
        Dim Valeur As Boolean
        Valeur = Application.CheckSpelling("bateau", , False)
        MsgBox Valeur 
    End Sub
     
    'Fonction Marche Pas???
    'renvoie FAUX
    Public Function bateau2() As Boolean
        Dim Valeur As Boolean
        Valeur = Application.CheckSpelling("bateau", , False)
        bateau2 = Valeur
    End Function

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    1) bateau2() renvoie bien TRUE (et non FALSE, comme tu l'affirmes) !
    2) tu devrais par ailleurs écrire ta function de manière plus orthodoxe. Une fonction reçoit des paramètres et retourne une valeur (c'est son propos essentiel)
    Elle devrait dont être écrite préférablement ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function bateau2(byval lemot as string) As Boolean
       bateau2 = Application.CheckSpelling(lemot, , False)
    End Function
    et être appelée ainsi :
    Exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim unmot As String
    unmot = "bateau"
    MsgBox bateau2(unmot)

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut bateau2()=FAUX
    Merçi d'avoir prêté attention à mon problème

    La forme n'est pas très orthodoxe en effet, mais je voulais m'éloigner le moins possible du code de la macro bateau1() qui elle fonctionne.

    Si j'appelle la fonction bateau2() comme une "fonction personnalisée" dans mon tableur EXCEL je confirme que cela me renvoie FAUX!!!!

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    1) toujours tout dire d'emblée et ne pas attendre des réponses poour apporter des précisions non fournies d'entrée de jeu

    2) Pas Excel sous la main, mais :
    - Comment (avec quel code) et où (exactement) as-tu créé cette fonction personnalisée ?
    - Comment (code) et ou/depuis quoi l'utilises-tu ?

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut
    J'utilise le VB associé au packoffice2007 VB6.3 VERSION1020
    J'ai un code source en .vba que j'ai inclus (importer un fichier) via le développeur à ma feuille excel2007 (en tant que module) et qui par ailleurs fonctionne parfaitement (sur d'autres fonctions) sous excel2007, notamment la MACRO bateau1() fonctionne et renvoie VRAI.

    Je précise que j'ai bien vérifié que le dico est en français
    (j'ai testé avec quelques mots anglais au cas ou et même résultat=faux)

    J'ai débugger mon code avec point d'arrêt

    J'ai testé ton code,que j'avais enregistré dans un fichier texte extension .vba

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function bateau2(byval lemot as string) As Boolean
       bateau2 = Application.CheckSpelling(lemot, , False)
    End Function
    j'ai inclus ce code comme module dans une feuille excel vierge

    dans la cellule Excel j'ai mis:
    =bateau2("bateau")
    résultat:
    FAUX

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Re...
    Hé bien, brazero, il semble bien que tu aies mis le doigt sur un bug.
    1) je dois te confesser que ton problème m'a à ce point intrigué, que j'ai mis en route mon portable (avec Excel) pour tenter d'y voir clair.
    2) mes différents essais m'ont permis, dans l'ordre :
    - de constater que ce que tu disais était vrai (avec une fonction personnalisée)
    - de constater que celà n'était pas dû à l'utilisation d'un module (je n'ai pas l'intention de rentrer à ce propos dans de longues explications sur les tests qui m'ont permis d'atteindre cette conclusion. Ils ont été nombreux et sont même passés par l'analyse d'un tableau de bytes).
    - de constater que, une fois sur deux, la chaîne était interptrêtée deux fois !
    - de vérifier l'absence de problème lorsque la fonction était (Public dans un module ou Private dans un UserForm) appelée autrement que depuis une feuille Excel
    - pire, la même fonction réagit erronément, même si appelée depuis une feuille (formule appelant la fonction personnalisée), on modifie la chaîne d'entrée et on la "force" vers une autre.

    Conclusions :
    1) j'ignore, dans l'état actuel des choses, si la fonction tournant bien depuis un UserForm (et non depuis une feuille) ne serait pas, elle précisément, un cas étrange.
    Le 2) va tenter d'expliquer ce que je veux dire par là
    2) Microsoft nous dit que la méthode CheckSpelling s'applique à un objet (et non à une chaîne, donc...).... et je ne sais pas pourquoi une chaîne "passe" sans problème et ... est bien traitée depuis un UserForm !
    A ce propos, d'ailleurs, je comprends mal une formule/fonction_personnalisée qui définirait elle-même la chaîne (en général, c'est une cellule, qui est concernée).
    Je continue mes recherches et investigations, mais (comme tu le vois), il y a là un véritable mystère (soit concernant la raison pour laquelle cela marche avec une chaîne depuis un UserForm, soit pourquoi il est nécessaire de passer un objet depuis une feuille !!!).

    Ce sujet devrait normalement en intéresser plus d'un, parmi les plus avertis .
    Qu'ils veuillent bien répondre "présent" (l'occasion leur est ici donnée et je les attends), cela me rassurera

    EDIT :
    A l'intention de ceux qui se sentent la force de s'accrocher à ce mystère, deux liens que je viens de lire :

    http://www.dailydoseofexcel.com/arch...kspelling-bug/

    http://www.tek-tips.com/viewthread.c...1509742&page=1

    j'en conseille la lecture et attends les efforts qui seront faits pour expliquer les deux choses à la fois (fonctionnement avec une chaîne depuis un userform et non depuis une cellule (en utilisant une fonction personnalisée comme "formule", avec une chaîne de caractères) )
    Merci à tous ceux qui s'y mettront.

Discussions similaires

  1. [VB6] Exécuter une macro Access
    Par Nektanebos dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 22/02/2006, 16h32
  2. [VBA-E] Macro ouverture fichier déja ouvert
    Par bhaal76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 14h30
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo