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 :

Fonction VBA dans Excel (Fonction personnalisée)


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Points : 53
    Points
    53
    Par défaut Fonction VBA dans Excel (Fonction personnalisée)
    J'ai créé dans VBA la fonction toute simple suivante dans le but de modifier le contenu d'une cellule dans une feuille Excel en fonction d'un code (Obj) donné par une autre cellule sous forme d'une chaîne de caractère (ex "§10 2 102") et d'une valeur (Ga) donné par une troisième cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Car(Obj As String, Ga As Byte) As Byte
        Dim Go As Byte
        If Obj = "" Then exit Function
        Go = Split(Obj)(1)
        If Go < Ga Then
            Car = 1
        Else
            Car = 2
        End If
    End Function
    Cette fonction répond parfaitement à mon attente.
    Le problème, c'est qu'elle démarre toute seule lorsqu'une procédure VBA modifie le contenu d'une autre cellule de ma feuille qui n'a pourtant rien à voir avec les trois cellules précédentes.
    Je précise que ma fonction est dans le même projet VBA, mais dans un module différent de la procédure dont je viens de parler.
    Lorsque la fonction est appelée, la pile des appels me donne l'info <Code non basic> comme lors du déclenchement d'une procédure évènementielle lorsque l'on modifie un contrôle dans un formulaire "Userform" par une procédure VBA.
    Je précise encore que j'ai bien vérifié que la suite de caractères "CGr" n'apparaît nulle part dans mon code !

    Merci à ceux qui pourraient éclairer ma lanterne ...

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Lorsque je lis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Obj As String, Ga As Byte
    et cela :
    je me dis qu'il est temps de commencer par l'apprentissage des rudiments.
    Ton Split retourne un array de chaînes de caractères, dont GO est le 2ème élément. Ga est un numérique.

    Pour info et à tout hasard (puisque l'on ignore le contenu de GO). Si Go est une chaîne de caractères représentant une expression numérique, sa conversion en numérique est nécessaire (par Val ou par cdbl selon que le séparateur décimal est un . ou une ,)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Points : 53
    Points
    53
    Par défaut Réponse à Unparia
    Bon OK, je me suis trompé (ça arrive même aux programmeurs confirmés, je crois).
    J'ai rectifié ma fonction : Dim Go As Byte.
    Mais ça ne change pas mon problème, la fonction continue d'être lancée chaque fois que VBA change quelque chose sur ma feuille...
    J'ai pourtant déjà utilisé des fonction personnalisées que j'avais fabriquées moi-même, mais c'était pour compléter les fonctions standard d'Excel, dans le cadre d'un usage normal du logiciel.
    Ici, le développe un programme complexe qui devrait permettre aux utilisateurs de gérer un fichier Excel à travers des "Userform".
    Donc mon code VBA intervient sans arrêt dans mes feuilles Excel.
    Le but de ma fonction était de mettre automatiquement à jour des données pour simplifier et accélérer les procédures déclenchées par l'utilisateur.
    Je me dis que c'est incompatible avec des fonctions personnalisées...
    Je vais donc remplacer celle-ci par une routine lancée par VBA lorsque j'ai besoin des données...

    Merci quand-même pour la réponse rapide ...

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    J'ai remarqué ça, même sur des fonctions non volatiles. Souvent en travaillant sur un autre classeur.
    A part tester d'où est appelée la fonction pour essayer d'éliminer les appels intempestifs (tous ceux hors de la feuille et du classeur attendus) je n'ai pas trouvé de parade.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	'Nom classeur :
    	    Application.ThisCell.Parent.Parent.Name
    	'Nom feuille :
    	    Application.ThisCell.Parent.Name
    	'Adresse cellule d'appel :
    	    Application.ThisCell.Address
    eric

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Juste une remarque en passant
    J'ai rectifié ma fonction : Dim Go As Byte
    j'espère que tu ne t'es pas contenté de modifier le typage (relis-moi).
    j'ignore par ailleurs ce que veut montrer cette phrase :
    Je précise encore que j'ai bien vérifié que la suite de caractères "CGr" n'apparaît nulle part dans mon code !
    (dès lors qu'on ne sait pas pourquoi "CGr", ni ce qu'est Cgr.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  7. #7
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Août 2017
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Août 2017
    Messages : 62
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par unparia Voir le message
    Juste une remarque en passant

    j'espère que tu ne t'es pas contenté de modifier le typage (relis-moi).
    j'ignore par ailleurs ce que veut montrer cette phrase :

    (dès lors qu'on ne sait pas pourquoi "CGr", ni ce qu'est Cgr.
    Bonjour Unparia,

    Ben voilà, je me suis encore trompé. Je devais écrire "Car" (le nom de la fonction) au lieu de "CGr".
    Quant à ta remarque sur le "typage", je n'ai pas trouvé ce mot au dictionnaire de la langue française mais je suppose que tu veut parler de l'attribution d'un type à une variable.
    Comme je l'ai déjà écrit, j'ai supposé que une fonction personnalisée ne faisait pas bon ménage avec une procédure VBA qui agit sur la feuille où la fonction est insérée.
    Erilc semble avoir fait le même constat...
    J'espérais que ma fonction que j'avais installée dans un paquet de cellule ne réagirait que là ou l'un de ses argument (valeur d'une autre cellule) change.
    J'ai donc opté pour une autre solution gérée uniquement par mon programme. Avec cela, je ne prends pas de risque.
    J'ai donc décidé de fermer cette discussion pour laisser de la place à des sujets plus intéressants.
    Merci à toi, Erilc et kiki29

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

Discussions similaires

  1. [XL-2007] Appeler Une fonction VBa Dans Excel
    Par stevekho dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/08/2010, 14h06
  2. [XL-2003] erreur dans une fonction appelée dans excel et qui ecrit dans excel
    Par peeter__steewart dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/08/2009, 15h00
  3. [VBA-E] Une fonction Excel dans une fonction VBA
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/07/2006, 10h21
  4. [VBA-E]Fonction F2 dans Excel
    Par Ghis123 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/05/2006, 15h49
  5. [VBA-E]Executer fonction VBA sur Excel sans activer la macro
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 19/01/2006, 14h34

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