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 :

Gestion erreur #Div/0!


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 241
    Points : 106
    Points
    106
    Par défaut Gestion erreur #Div/0!
    Bonjour à tous,
    Voila j'ai un problème de macro qui me calcul une moyenne mais parfois le résultat renvoyé est #Div/0! et dans ce cas la j'aimerai mettre un 0 à la place. Voici le bout de code qui ne marche pas mais je ne sais pas pourquoi.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Lig = 6 To 19
       For Col = 7 To 58
          If IsError(sh.Cells(22, Col)) = True Then
                 sh.Cells(22, Col) = 0
            Else: sh.Cells(22, Col) = Application.Average(Sh33.Cells(79, Col - 2))
          End If
       Next Col
    Next Lig

    merci à vous pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Lig = 6 To 19
       For Col = 7 To 58
          If sh.Cells(22, Col).text = "#Div/0!" Then
                 sh.Cells(22, Col) = 0
            Else: sh.Cells(22, Col) = Application.Average(Sh33.Cells(79, Col - 2))
          End If
       Next Col
    Next Lig

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 241
    Points : 106
    Points
    106
    Par défaut
    En fait le #Div/0! on va le retrouver après le calcul de la moyenne.

    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                    sh.Cells(22, Col) = Application.Average(Sh33.Cells(79, Col - 2))
                    If sh.Cells(22, Col).Text = "#Div/0!" Then
                            sh.Cells(22, Col) = 0
                    End If
    mais pas de résultat.

  4. #4
    Invité
    Invité(e)
    Par défaut
    chez moi ça fonctionne mais comme je ne connais pas le résultat attendu!

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 241
    Points : 106
    Points
    106
    Par défaut
    Le résultat attendu est un pourcentage de la moyenne. Je dois avoir un autre pb ailleurs si ça marche chez vous et pas chez moi .

  6. #6
    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 755
    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 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Depuis la version 2007, il existe une formule SIERREUR que tu peux utiliser dans VBA avec WorksheetFunction ou à l'aide de la fonction EVALUATE
    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

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonjour,


    déjà je ne comprends pas ce que tu veux faire avec ta fonction moyenne que tu applique à une seule cellule excel ?
    avec ton code tu peu rajouter une fonction VAL pour éviter d'avoir und DIV/0 si ta cellule est vide ou ne contient pas un nombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ....Application.Average(val(Sh33.Cells(79, Col - 2)))
    mais la moyenne d'une SEULE valeur c'est la valeur ... ( exple : moyenne(1) ben c'est 1 comme moyenne (123) est 123 )

  8. #8
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 241
    Points : 106
    Points
    106
    Par défaut
    Bonjour,
    En fait le code que j'ai envoyé représente juste un bout sinon je fais la moyenne de plusieurs cellules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Application.Average(Sh39.Cells(26, Col - 2), Sh40.Cells(26, Col - 2), Sh40.Cells(79, Col - 2), Sh38.Cells(26, Col - 2))
    J'ai mis en fin de code le code suivant pour me changer les #Div/0! après tous les calculs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        For Lig = 6 To 19
            For Col = 7 To 58
                If sh.Cells(22, Col).Text = "#DIV/0!" Then
                    sh.Cells(22, Col) = 0
                End If
            Next Col
        Next Lig

  9. #9
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    En relisant ton premier post je me demande pourquoi tu testes le contenu de ta cellule (que tu remplis après) plutôt que directement ta formule
    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Lig = 6 To 19
       For Col = 7 To 58
          If IsError(Application.Average(Sh33.Cells(79, Col - 2))) = True Then
                 sh.Cells(22, Col) = 0
            Else: sh.Cells(22, Col) = Application.Average(Sh33.Cells(79, Col - 2))
          End If
       Next Col
    Next Lig
    A+
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  10. #10
    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 755
    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 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En relisant ton premier post je me demande pourquoi tu testes le contenu de ta cellule (que tu remplis après) plutôt que directement ta formule
    Je me pose la même question et comme je l'ai déjà écrit, pour autant que la version d'excel est supérieure à 2003, il suffit d'utiliser la fonction AVERAGE imbriquée dans le IFERROR.
    Exemple avec EVALUATE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B12").Value = Evaluate("=IFERROR(AVERAGE(B2:B11),0)")
    Utilisable bien entendu directement dans Excel sans passer par du VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SIERREUR(MOYENNE(B2:B11);0)
    Pour les versions inférieures à 2007
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTERR(MOYENNE(B2:B11));0;MOYENNE(B2:B11))
    et en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B12").Value = Evaluate("=IF(ISERR(AVERAGE(B2:B11)),0,AVERAGE(B2:B11))")
    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

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 241
    Points : 106
    Points
    106
    Par défaut
    Bonjour à tous,
    merci pour votre implication. J'ai donc repris le code de Igloobel en testant la formule et non le résultat.
    A+

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

Discussions similaires

  1. [VBA-E]contenu d'une cellule gestion erreur macro
    Par matou_aouh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/03/2006, 10h18
  2. Aide sur gestion erreur
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 05/01/2006, 18h05
  3. [Formulaire] Gestion erreur saisie d'une requête
    Par b_steph_2 dans le forum IHM
    Réponses: 6
    Dernier message: 05/01/2006, 16h40
  4. [Sécurité] gestion erreur login mdp
    Par oceane751 dans le forum Langage
    Réponses: 19
    Dernier message: 03/11/2005, 11h58
  5. Question Basique Gestion Erreur VBA ...
    Par Le_Phasme dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h42

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