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 :

Pouvoir utiliser une fonction dans tous mes classeurs Excel [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut Pouvoir utiliser une fonction dans tous mes classeurs Excel
    Bonjour à tous,

    J'ai récupéré (ici je crois, mais je ne sais plus où) il y a quelques temps une super macro, qui me permet de disposer d'une nouvelle formule dans mes tableurs Excel.
    Celle-ci me permet de renvoyer le contenu d'une cellule, sans caractères accentués, par le biais de la formule =sansAccents()
    Voici le code source en question, qui marche très bien :
    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
    ' Définition de la conversion
    Const accent As String = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
    Const noAccent As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"
     
    ' La fonction :
    Public Function sansAccents(ByRef s As String) As String
    Dim i As Integer
    Dim lettre As String * 1
    sansAccents = s
    For i = 1 To Len(accent)
    lettre = Mid$(accent, i, 1)
    If InStr(sansAccents, lettre) > 0 Then
    sansAccents = Replace(sansAccents, lettre, Mid$(noAccent, i, 1))
    End If
    Next i
    End Function
    Cependant, pour que cette fonction fonctionne (!), je n'ai trouvé d'autres solution que de la mettre dans un module de mon classeur.
    J'aimerai, comme je le fais avec d'autres macros, qu'elle soit enregistrée dans mon "PERSONAL.XLSB" afin d'être appellée depuis n'importe quel fichier Excel. Hors, lorsque je créé un module dans "PERSONAL.XLSB" et que j'y mets ce code, la fonction ne réponds pas.

    Avez-vous une idée de la source du problème ?

    Merci à vous.

    Sylvain M.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Je pense que c'est simplement dû au fait qu'il y a un paramètre à ta Function.
    Tu pourrais enlever ce paramètre et modifier ta macro selon tes besoins.
    MPi²

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Merci pour ta réponse.
    Excuse mon ignorance, mais je ne sais pas ce qu'est un paramètre, et encore moins comment l'enlever en conservant cette macro opérationnelle...
    Peux tu m'éclairer un peu plus ?

    Sylvain M.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Le paramètre, c'est ByRef s As String entre les parenthèses.
    Ta Function m'apparaît comme étant une fonction personnalisée que tu utilises en tant que formule dans les cellules que tu veux.

    Il faudrait peut-être repenser le problème et modifier la macro pour qu'elle change les accents d'une feuille au complet ou encore des cellules que tu aurais préalablement sélectionnées.
    MPi²

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    modifier la macro pour qu'elle change les accents d'une feuille au complet ou encore des cellules que tu aurais préalablement sélectionnées.
    Ce n'est pas vraiment ce que je souhaite : j'aimerai - si possible - pouvoir appeler cette fonction, sous forme d'une formule (=sansAccents(A1) ) depuis n'importe quel tableur. En effet, je l'utilise un peu pareil, et aussi souvent, que les formules =majuscule(), =minuscule(), =nompropre()...
    D'ailleurs, je trouve que c'est une manque dans les fonctions disponibles.

    Maintenant, si ce n'est vraiment pas possible de cette manière (formule), je passerai par une macro sans paramètre.

    Merci encore !

    Sylvain M.

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Placer cette fonction
    soit dans le classeur de macro personnelles (mais cela oblige, il me semble, à faire référence au classeur quand on invoque la fonction)
    soit dans un complément (classeur xla ou xlam selon la version) et installer ce complément afin qu'il se charge à l'ouverture d'Excel.

    J'ai, pour ma part, un xlam où sont stockées toutes mes fonctions persos et cela marche impec depuis des années.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Super !
    Je viens de créer mon premier () complément, et ça marche impeccable !!!
    Merci beaucoup 78chris.

    Bonne soirée.

    Sylvain M.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] preg_replace : utiliser une fonction dans les paramètres
    Par Hell dans le forum Langage
    Réponses: 2
    Dernier message: 24/05/2008, 18h32
  2. Comment utiliser une fonction dans une fonction
    Par hatenaku dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2008, 20h00
  3. Comment utiliser une fonction dans une classe.
    Par metalamania dans le forum wxPython
    Réponses: 5
    Dernier message: 17/02/2008, 17h50
  4. Utiliser une fonction dans un module
    Par formidable78 dans le forum VBA Access
    Réponses: 11
    Dernier message: 30/01/2008, 12h49
  5. DAO impossible d'utiliser une fonction dans un requete
    Par exter666 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/09/2005, 17h15

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