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 :

Utilisation formule Excel en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Utilisation formule Excel en VBA
    Bonjour,

    Je cherche actuellement un moyen pour compter le nombre d’éléments différent dans une plage définie. Plutôt que de partir dans une ou plusieurs boucle pour arriver à mes fins, j'ai préféré utiliser les fonctions d'Excel pour parvenir à mes fins. Voici ce que j'obtiens en Excel.

    =SOMMEPROD(1/NB.SI(F270:F272;F270:F272))

    Jusqu'ici pas de problème. A présent, il faut que j'arrive à utiliser cette formule Excel en code VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Dim nbPoste As Double
        Dim rg As Range
     
        Set rg = Sheets(1).Range("F270:F272")
        nbPoste = WorksheetFunction.SumProduct(1 / WorksheetFunction.CountIf(rg, rg))
    Cependant, j'obtiens une erreur d'exécution '13': Incompatibilité de type à la dernière ligne alors que j'ai vérifié que les deux fonctions retournent bien un Double.

    J'ai aussi essayé en ne gardant que le WorksheetFunction.CountIf(rg,rg) mais la même erreur revient.

    En espérant que quelqu'un puisse m'aider.
    Dernière modification par Invité ; 24/05/2017 à 15h13.

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Le deuxième argument de CountIf est une condition, quelle est la condition dans ton cas?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Dans mon cas, la condition est qu'il y est la valeur "M" ou "N" ou "S" de présente dans la plage.

  4. #4
    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
    Bonsoir
    utilise l'enregistreur automatique et tu aura ton code sur plateau
    Bonne continuation

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Voici ce que j'obtiens avec l'enregistreur de macro :

    SUMPRODUCT(1/COUNTIF(R[-2590]C:R[-2588]C,R[-2590]C:R[-2588]C))

    Je suis donc sur la bonne voie mais le CountIf est assez étrange.
    Dernière modification par AlainTech ; 13/08/2017 à 20h24. Motif: Suppression de la citation inutile

  6. #6
    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
    voila un exemple :
    dans mon cas je copie cette formule dans la colonne M depuis M3 à le dernière ligne non vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim DL as long
    DL = .Range("A" & Rows.Count).End(xlUp).Row
     Range("M3").Select
        ActiveCell.FormulaR1C1 = "=IF(COUNTIF(R3C12:RC12,RC[-1])>COUNTIF(R3C3:R" & DL & "C3,RC[-1]),RC[-1],"""")"
        Range("M3").Select
        Selection.AutoFill Destination:=Range("M3:M" & DL), Type:=xlFillDefault
        Range("M3:M" & DL).Select

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je vais vous présenter mon sujet de manière plus globale pour comprendre l'utilisation de cette formule dans mon cas:

    J'ai un fichier de base composé d'un tableau de 76 colonnes et énormément de lignes. Chaque ligne indique une quantité produite par poste durant une journée. Il existe trois types de poste M, S et N. Dans mon tableau, c'est la colonne F qui indique qu'elle est le poste concerné par la saisie.
    L'un des buts de mon outil est d'indiquer le temps de fonctionnement de la chaîne de production sur une journée indiquée par l'utilisateur.
    Par exemple, si l'utilisateur indique le 15/05/2017, ma macro applique un filtre sur le tableau Excel pour obtenir que les saisies de production effectuées le 15/05/2017. Imaginons qu'il y a eu 3 saisies de production le 15/05/2017, dans le cas le plus général on aura tout les postes de productions qui ont été utilisés, on aura donc d'afficher :
    M
    S
    N

    Donc, le temps de fonctionnement sera égal à 3 x temps de production par chaîne. Mais il est aussi possible qu'on est d'afficher ceci :

    M
    M
    N

    Donc, ici il n'y a que 2 postes d'utiliser, soit 2 x temps de production par chaîne.

    C'est pour cela que je cherche à compter les nombre de valeurs uniques dans la colonne F, résultat que je dois récupérer en VBA pour continuer le reste de mes calculs (il y en a beaucoup d'autre de ce genre).
    Dernière modification par AlainTech ; 13/08/2017 à 20h24. Motif: Suppression de la citation inutile

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par Oudouner Voir le message
    =SOMMEPROD(1/NB.SI(F270:F272;F270:F272))
    Convertir la formule en version native donc en anglais (ou directement sa traduction via la propriété  Formula  )

    puis juste utiliser la puissante méthode   Evaluate   !     V = [SUMPRODUCT(1/COUNTIF(F270:F272,F270:F272))]   …

    Et si la feuille de calculs n'est pas active, rattacher cette méthode à la feuille, voir l'aide VBA interne.


    Autre point :   ne jamais utiliser WorksheetFunction sauf pour être sûr de planter le code en cas d'erreur de la formule ‼
    Application étant suffisant …

    ___________________________________________________________________________________________________________

         Merci de cliquer sur en bas à droite de chaque message ayant aidé puis sur pour clore cette discussion …

    ___________________________________________________________________________________________________________
    Je suis Paris, Manchester, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Merci beaucoup de votre aide. J'ai testé la méthode de Marc-L

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Dim nbPoste As Variant
     
        nbPoste = [SUMPRODUCT(1/COUNTIF(F270:F272,F270:F272))]
        nbPoste = Evaluate("SUMPRODUCT(1/COUNTIF(F270:F272,F270:F272))")
    Cependant ma variable nbPoste prend la valeur "Erreur 2007".

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    La feuille de calculs de la plage de la formule est-elle active ?

    Si oui, quel est le résultat de la même formule dans une cellule ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai enfin réussi à obtenir le bon résultat. Le seul problème est que je dois garder la feuille de calcul de la plage de la formule visible alors que j'aurai préféré qu'elle soit non visible (pour ne pas gêner l'utilisateur).

    Merci beaucoup de votre aide à tous.

  12. #12
    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 seul problème est que je dois garder la feuille de calcul de la plage de la formule visible alors que j'aurai préféré qu'elle soit non visible (pour ne pas gêner l'utilisateur)
    J'écris et lit des formules se trouvant dans des feuilles non actives et cachées sans aucun problème mais pour cela il faut donner la référence totale aux cellules concernées (feuille + classeur)
    Si tu avais lu les billets que je t'ai référencé tu aurais pu le réaliser sans peine.
    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

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

Discussions similaires

  1. formule Excel dans VBA
    Par ninette24 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/07/2008, 14h31
  2. formule excel vers VBA
    Par kedas dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/10/2007, 18h18
  3. Parseur formule Excel <-> Code VBA
    Par gretch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2007, 18h08
  4. Correspondance formules excel et VBA
    Par abu143 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/10/2006, 17h54
  5. [EXCEL][VBA] Utilisation des formules Excel en VBA
    Par Amanck dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2005, 15h08

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