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 :

Problème avec fonction personnalisée


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème avec fonction personnalisée
    Bonjour

    J'ai créé une fonction excel (2007) en VBA qui marche très bien quand je l'utilise dans différentes celluleq de mon fichier.
    Mon problème intervient quand je ferme et ouvre à nouveau le fichier. Quand je le ré-ouvre, les cellules contenant la fonction que j'ai créée ne se calculent pas et sont à 0. Pour que le calcul se fasse, il faut que je retape la formule dans les cellules concernées.

    Quelques précisions :
    - Toutes les autres cellules contenant des formules (mais des formules Excel ...) se calculent automatiquement à l'ouverture du fichier.
    - Dans Option Excel > Formules > Mode de calcul, la case "Automatique" est bien cochée.
    - F9 ne fonctionne pas.

    Merci à toutes les personnes qui pourront m'aider

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'affichage du code de ta fonction personnalisée permettrait certainement de t'apporter une réponse pertinente.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2010
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Voici le code de la fonction en question

    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
    17
    18
    Function nbTransac(c As Range) As Integer
        Dim cols As Variant
        Dim ligne As Integer
        Dim col As Variant
        Dim nb As Integer   
     
        ligne = c.Row
        cols = Array("L", "T", "AB", "AJ", "AR", "AZ", "BH", "BP", "BX", "CF", "CN", "CV")
     
        For Each col In cols
            If Range(col & ligne).Value = "oui" Then
                nb = nb + 1
            End If
        Next
     
        nbTransac = nb
     
    End Function

  4. #4
    Membre émérite

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Points : 2 523
    Points
    2 523
    Billets dans le blog
    1
    Par défaut
    c'est la réécriture de la fonction nbsi(plage;critère) .
    y'a vraiment une utilité ou c'est pour apprendre
    un regroupement de cellule dans un tableau avec égalité et intervention sur la plage ne serait pas plus simple?
    bon edition
    après relecture , je dis peut etre une connerie
    après un test de la fonction ( entre nous, elle, me retourne :#NOM?)
    il y a ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((L2=$CX$1)+(T2=$CX$1)+(AB2=$CX$1)+(AJ2=$CX$1)+(AR2=$CX$1)+(AZ2=$CX$1)+(BH2=$CX$1)+(BP2=$CX$1)+(BX2=$CX$1)+(CF2=$CX$1)+(CN2=$CX$1)+(CV2=$CX$1))
    avec oui en CX1
    c'est vrai que c'est un peu long , mais ça le fait

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Dans ta fonction ajoute cette ligne Application.Volatile mais attention la fonction sera recalculée chaque fois que l'on modifie la valeur d'une cellule de n'importe quelle feuille, de n'importe quel classeur ouvert.
    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
    Function nbTransac(c As Range) As Integer
        Application.Volatile
        Dim cols As Variant
        Dim ligne As Integer
        Dim col As Variant
        Dim nb As Integer
        ligne = c.Row
        cols = Array("L", "T", "AB", "AJ", "AR", "AZ", "BH", "BP", "BX", "CF", "CN", "CV")
         For Each col In cols
            If Range(col & ligne).Value = "oui" Then
                nb = nb + 1
            End If
        Next
         nbTransac = nb
     End Function
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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