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

  1. #1
    Futur Membre du Club
    Formules non calculées en mode de calcul automatique
    Bonjour,

    J'ai un fichier avec une grande plage de cellules contenant chacune une formule.
    La formule contient une fonction perso que j'ai faite en VBA.

    Parfois, dans certaines cellules, la formule n'est pas calculée, il y a #VALEUR! d'affiché.
    Mais quand je clique dans la formule et que je fais ENTRÉE, le calcul est bien fait et j'obtiens bien le résultat.
    Le problème c'est que j'ai des centaines de cellules.

    La solution la plus rapide que j'ai trouvé c'est de copier puis recoller la formule dans toutes les cellules mais c'est pénible.

    Avez-vous une solution?

    Merci.

  2. #2
    Expert confirmé
    Bonjour,
    Citation Envoyé par kido63 Voir le message
    La formule contient une fonction perso que j'ai faite en VBA.

    Je n'arrive pas à voir le code de cette fonction, mais peut-être faut-t'il y ajouter Application.Volatile
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Expert éminent sénior
    Citation Envoyé par kido63 Voir le message
    La formule contient une fonction perso que j'ai faite en VBA.

    Parfois, dans certaines cellules, la formule n'est pas calculée, il y a #VALEUR! d'affiché.
    Mais quand je clique dans la formule et que je fais ENTRÉE, le calcul est bien fait et j'obtiens bien le résultat.
    N'y aurait-il pas une reconnaissance de couleur (ou autre format) dans le processus de cette fonction ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Futur Membre du Club
    Citation Envoyé par Menhir Voir le message
    N'y aurait-il pas une reconnaissance de couleur (ou autre format) dans le processus de cette fonction ?
    Bonjour, Non pas de reconnaissance de couleur.

    Merci

  5. #5
    Expert éminent sénior
    Etant donné que nous ne sommes pas ici pour jouer aux devinettes et puisque tu ne daignes pas présenter ton code, je vais faire comme Patrice et attendre que ma boule de cristal soit réparée pour te répondre...
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Futur Membre du Club
    voici le code, pas de soucis pour le fournir:

    c'est une simple soustraction avec un code d'erreur particulier danc certains cas:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function Devers(z1 As Variant, z2 As Variant) As Variant 'double
     
    Devers = CVErr(xlErrNA)
    On Error GoTo Fin
     
    If IsNumeric(z1) And IsNumeric(z2) And (z1 <> "") And (z2 <> "") Then
            Devers = z1 - z2
    End If
     
    Fin:
     
    End Function

  7. #7
    Expert confirmé
    Et donc ma proposition (en aveugle) devrait résoudre le problème !
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  8. #8
    Expert éminent sénior
    Ton code cumule beaucoup de défaut à éviter.

    Tout d'abord, tu déclares tout en Variant, ce qui est une mauvaise idée.
    Déclare tes paramètres en Double et ça t'évitera les tests IsNumeric().

    Idem pour la déclaration de la fonction elle-même.

    Ensuite, on n'utilise pas On Error sur un code qui n'est pas stabilisé.
    Et même sur un code stabilisé, on l'utilise avec parcimonie, sur une seule ligne et de façon contrôlé.
    On Error ne sert pas à masquer les imperfections d'un code.

    De toute façon, Excel se chargera de renvoyer une valeur d'erreur de lui-même si les paramètres ne sont pas conformes.

    Et enfin, ton test est une sorte d'oxymore informatique : tu vérifies si une valeur est numérique et, sur la même ligne, tu la compares à une chaine de caractère.
    Ca n'est pas logique.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    Function Devers(z1 As Double, z2 As Double) As Double
            Devers = z1 - z2
    End Function


    Et si tu veux que ça renvoit NA en cas d'erreur, utilise-le ainsi :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    =SIERREUR(Devers(A1;A2);NA())
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.