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 :

Moyenne sur plage variable VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut Moyenne sur plage variable VBA
    Bonjour à tous,

    Apres avoir longtemps cherché sur le forum, je n'ai malheureusement pas trouvé mon Bonheur, voila mon soucis:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim pSB0 As Integer
    Dim dSB0 As Integer
    Dim Range1 As Range
     
    For i = 5 To 1700
        If Cells(i, 36) = Cells(43, 34) Then
        pSB0 = Cells(i, 36).Row
        ElseIf Cells(i, 36) = Cells(47, 34) Then
        dSB0 = Cells(i, 36).Row
        End If
    Next
    Cells(45, 57) = Application.WorksheetFunction.Average(Range(Cells(pSB0, 53), Cells(dSB0, 53)))

    Mon code VBA consiste, à partir d'un tableau de valeurs, d'effectuer une moyenne sur une plage de valeurs determine grâce à un numéro de ligne.
    Le problem est que ce code me renvoie l'erreur 1004 sur la derniere ligne de mon code. Est-ce à cause des variables pSB0 et dSB0 ?

    Merci d'avance pour l'aide apportée

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par tiger837 Voir le message
    Le problem est que ce code me renvoie l'erreur 1004 sur la derniere ligne de mon code.
    Peux-tu préciser le descriptif de l'erreur en plus du code ?

    Est-ce à cause des variables pSB0 et dSB0 ?
    Ca c'est a toi de nous le dire:
    -As tu essayer de les remplacer par des valeurs fixes pour voir si le problème persiste ?
    -Quels valeurs ont ces deux variables au moment de l'erreur ?
    edit: vu qu'elles ne sont pas initialisées, elles ont pour valeur par défaut 0 si jamais elles ne changent pas de valeurs dans ta boucle ça va causer une erreur.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut
    Le descriptive de l'erreur est "Application-defined or object-defined error"


    Je n'avais pas essayé, mais en remplacant par les valeurs que je devrais obtenir (453 et 500) cela marche sans soucis.

    Il me semble que mes variables valent 0 au moment de l'erreur...

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Il me semble que mes variables valent 0 au moment de l'erreur...
    C'est bien ce que je pensais (cf l'edit de ma première réponse)
    Si au moins l'une des variable vaut 0 tu lui demande de faire une moyenne sur une plage partant d'une ligne qui n'existe pas, d'où l'erreur.
    Donc soit il y a un problème dans ta boucle, soit il suffit de les initialisées avec une valeur strictement positive.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut
    J'ai essayé de les initialiser toutes les deux à 1, mais ca ne fonctionne toujours pas.
    Et je ne vois pas ou il pourrait y avoir un probleme dans ma boucle, puisque les conditions If sont en realite toutes deux verifiees à un moment...

    EDIT: en initialisant a 1, l'erreur change : " Unable to get the Average property of the WorksheetFunction class"

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par tiger837 Voir le message
    J'ai essayé de les initialiser toutes les deux à 1, mais ca ne fonctionne toujours pas.
    Toujours le message d'erreur ? Normalement non
    Par contre si tes valeurs restent à 1 au lieu de la bonne valeur le résultat sera faux

    Et je ne vois pas ou il pourrait y avoir un probleme dans ma boucle, puisque les conditions If sont en realite toutes deux verifiees à un moment...
    Ce n'est visiblement pas l'avis de VBA puis qu'il laisse tes variable à 0 après le passage dans la boucle

    les valeurs que je devrais obtenir (453 et 500)
    essaye le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cells(453, 36) = Cells(43, 34) Then msgbox "453 ok"
    tu obitens quoi ?
    Et celui là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Cells(500, 36) = Cells(47, 34) Then msgbox "500 ok"
    Et si tu ajoutes des .value dèrriere tout tes cells ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Cells(i, 36).value = Cells(47, 34).value Then
    Que contiennent ces cellules ? des nombres ? du texte (attention aux espaces, aux majuscules ...) ?

    en initialisant a 1, l'erreur change : " Unable to get the Average property of the WorksheetFunction class"
    C'est quand tu tentes de faire une moyenne sur des valeurs autres que numérique.
    Oublie cette proposition, elle n'était valable que si c'était normal que ta boucles n'attribue pas de valeurs et qu'il fallait alors penser a les initialiser correctement, or visiblement ce n'est pas le cas puisque tu attendais les valeurs 453,500 , le problème se situe donc dans la boucle.

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

Discussions similaires

  1. pb de macro SAS -moyenne sur plusieurs variables
    Par sas_debutant dans le forum Macro
    Réponses: 3
    Dernier message: 31/10/2009, 00h47
  2. [XL-2007] Moyenne sur colonnes variable
    Par bedoch dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/10/2009, 13h06
  3. somme sur plage variable
    Par cdvhome dans le forum Excel
    Réponses: 3
    Dernier message: 25/02/2008, 18h37
  4. problem sur rstAdd![<variable>] VBA-Access
    Par daniel_gre dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/08/2007, 16h59
  5. [VBA-E] Macro Pour Faire un Tri sur plage variable
    Par tabarly35 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2006, 19h02

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