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 :

Code vba qui ne fonctionne plus


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut Code vba qui ne fonctionne plus
    Bonjour à tous,
    J'ai un problème de code, en particulier le calcul de la variable Prd.

    For i = 7 To 19
    Recap.Select
    Cells(i, j).Select
    Prd = WorksheetFunction.AverageIfs(Base.Range("C:C"), Base.Range("B:B"), Recap.Cells(i, 2), Base.Range("A:A"), Recap.Cells(5, j))
    If Prd > 1 Then
    Prd = 1
    Recap.Cells(i, j) = Prd
    Couleur
    Else
    Recap.Cells(i, j) = Prd
    Couleur
    End If
    Next

    A chaque fois j'ai le message d'erreur "Impossible de lire la propriété de AverageIfs de la classe Worksheetfunction"
    Quand je survole les différents arguments, ils affichent bien les valeurs voulues.
    Et si je supprime les 2 derniers critères, tout se calcule bien (mais ce n'est pas le résultat que je recherche).

    Le pire, c'est que ce calcul a fonctionné il n'y a pas si longtemps.
    Si qq'un a une idée de ce qui cloche, ou de la manière d'utiliser cette fonction en vba, je suis preneur.
    Merci
    Fichiers attachés Fichiers attachés

  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
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avez-vous essayé la formule manuellement ne fusse que sur une colonne avec la fonction MOYENNE.SI.ENS, je serai surpris quelle fonctionne
    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 membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut
    Si je demande le même calcul dans une cellule excel avec MOYENNE.SI.ENS j'obtiens le résultat sans aucun problème.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si je demande le même calcul dans une cellule excel avec MOYENNE.SI.ENS j'obtiens le résultat sans aucun problème.
    Alors, le classeur que vous avez joint n'est pas le même que celui que vous utilisez.

    Si j'ai bien compris la fonction, vous utilisez comme plage de critère1 la colonne des noms du tableau structuré de votre feuille "Données" et comme critère1 les cellules de la colonne B, dont le titre est "Opérateur". Or, comme opérateur, vous avez mis des lettres, alors que dans la colonne des noms, vous avez des noms et prénoms. Donc, déjà là, il y a un souci.

    Petites remarques :
    • Pourquoi référencez-vous les colonnes entières de la feuille "Données" alors que vous utilisez un tableau structuré ?
      J'ai placé "Logan GRAPPEY" en cellule B7 à la place de la lettre, renommé votre tableau t_Data au lieu de Tableau4, et écrit la formule suivante : =MOYENNE.SI.ENS(t_Data[%];t_Data[Nom];'Tableau récap'!$B7;t_Data[Date];'Tableau récap'!D$5), et là, cela a fonctionné.
    • Pourquoi utiliser une boucle alors que vous pouvez écrire la formule en une seule instruction pour l'ensemble des colonnes et lignes du tableau, soit D7:AH25 ?
    • Enfin, pourquoi utiliser du VBA alors que de simples formules suffiraient ?
    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

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Alors, le classeur que vous avez joint n'est pas le même que celui que vous utilisez.

    Si j'ai bien compris la fonction, vous utilisez comme plage de critère1 la colonne des noms du tableau structuré de votre feuille "Données" et comme critère1 les cellules de la colonne B, dont le titre est "Opérateur". Or, comme opérateur, vous avez mis des lettres, alors que dans la colonne des noms, vous avez des noms et prénoms. Donc, déjà là, il y a un souci.

    Petites remarques :
    • Pourquoi référencez-vous les colonnes entières de la feuille "Données" alors que vous utilisez un tableau structuré ?
      J'ai placé "Logan GRAPPEY" en cellule B7 à la place de la lettre, renommé votre tableau t_Data au lieu de Tableau4, et écrit la formule suivante : =MOYENNE.SI.ENS(t_Data[%];t_Data[Nom];'Tableau récap'!$B7;t_Data[Date];'Tableau récap'!D$5), et là, cela a fonctionné.
    • Pourquoi utiliser une boucle alors que vous pouvez écrire la formule en une seule instruction pour l'ensemble des colonnes et lignes du tableau, soit D7:AH25 ?
    • Enfin, pourquoi utiliser du VBA alors que de simples formules suffiraient ?
    J'utilise une boucle parce que certains opérateurs travaillent le weekend et donc je n'ai pas de données pour la semaine, donc je veux que le calcule s'arrete avant de faire une erreur.
    Je veux faire ce calcul par vba afin que justement il n'y ait pas de formules dans les cases; juste une valeur fixe.

  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
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Et pour ma remarque "Alors, le classeur que vous avez joint n'est pas le même que celui que vous utilisez." ?
    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
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Et pour ma remarque "Alors, le classeur que vous avez joint n'est pas le même que celui que vous utilisez." ?
    Le tableau envoyé est une version simplifiée, mais les données sont bien celles à utiliser.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le tableau envoyé est une version simplifiée, mais les données sont bien celles à utiliser.
    J'ai l'impression que vous ne comprenez pas ma remarque. Vous demandez de l'aide et vous joignez un classeur avec des données qui ne peuvent fonctionner avec la fonction MOYENNE.SI.ENS

    Nom : 250312 AVERAGEIFS.png
Affichages : 76
Taille : 58,0 Ko
    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

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    J'ai l'impression que vous ne comprenez pas ma remarque. Vous demandez de l'aide et vous joignez un classeur avec des données qui ne peuvent fonctionner avec la fonction MOYENNE.SI.ENS

    Nom : 250312 AVERAGEIFS.png
Affichages : 76
Taille : 58,0 Ko
    Oui, si j'inscris la formule dans les cases du tableau tout fonctionne correctement.
    Seulement je ne veux pas mettre de formule dans ce tableau, je ne veux que le résultat.
    C'est pour ça que je veux faire le calcul par le code, mais malheureusement je n'arrive pas à le faire fonctionner.

  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
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je crois que c'est un dialogue de sourd.
    Comment voulez-vous que l'on vous apporte une aide quelconque si vous déposez un classeur avec des données qui ne permettent pas de tester la formule WorksheetFunction.AverageIfs

    Alors il y a déjà deux raisons pour laquelle vous obtenez une erreur et j'ai des doutes quand vous affirmez que cela fonctionnait

    Dans l'instruction ci-dessous, vous utilisez deux variables i et J. Or j n'est pas incrémentée dans cette boucle. Vous avez une boucle de j bien plus haut et qui ne sert à rien pour cette ligne ci. De plus si la fonction renvoie une erreur comme par exemple #DIV/0!, vous aurez inévitablement un problème. Il vous faut donc gérer cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Prd = WorksheetFunction.AverageIfs(Base.Range("C:C"), Base.Range("B:B"), Recap.Cells(i, 2), Base.Range("A:A"), Recap.Cells(5, j))
    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
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    qq point à revoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Base = ActiveWorkbook.Sheets("SYC")
    et en bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Base = ActiveWorkbook.Sheets("Données")
    voici une version te permet normalement d'avancer
    à tester avec prudence
    Fichiers attachés Fichiers attachés

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2025
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2025
    Messages : 6
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Bonjour
    qq point à revoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Base = ActiveWorkbook.Sheets("SYC")
    et en bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Base = ActiveWorkbook.Sheets("Données")
    voici une version te permet normalement d'avancer
    à tester avec prudence
    Bonjour BENNASR,
    J'ai recopié ton code et ça refonctionne parfaitement!
    Je vois vraiment pas ce qui pouvait clocher...
    Mais merci beaucoup en tous cas!!

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

Discussions similaires

  1. [XL-MAC 2016] code VBA enregistrerPDF() ne fonctionne plus sous MAC
    Par AGoldorak dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/10/2017, 14h40
  2. Code VBA qui ne fonctionne pas
    Par DJOUFOU dans le forum VBA Access
    Réponses: 9
    Dernier message: 10/11/2016, 10h56
  3. Code VBA qui ne fonctionne pas et ne retourne pas d erreurs
    Par Eddy95500 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/10/2015, 12h51
  4. [XL-2010] Fonction VBA qui ne fonctionne plus sous excel 2010
    Par Outinet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2012, 13h49
  5. [XL-2007] Pb de code VBA qui ne fonctionne plus
    Par rch05 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/02/2011, 07h41

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