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 :

Minimum d'une plage variable [XL-MAC 2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Par défaut Minimum d'une plage variable
    Bonjour

    Voici mon problème
    J'ai des valeurs inscrites dans la plage suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(i, 27),Cells(i+3,27))
    Certaines de ces valeurs peuvent être égales à 0

    Je voudrai récupérer la valeur minimum de cette plage qui ne soit pas égale à 0, le tout en VBA

    Merci d'avance

    Bonne soirée à tous

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    La méthode brutale mais efficace consisterait à faire une boucle For To.
    A chaque tour, tu vérifies avec un If si la valeur est supérieure à 0.
    Si c'est le cas, tu compares la valeur courante à la valeur retenue. Si elle est inférieure, la valeur courante devient la valeur retenue.

    Ne pas oublier d'initialiser la valeur retenue avant le début de la boucle.

    J'espère que tu ne fais pas une macro spécialement pour ça.
    Parce que si c'est le cas, il y a des solutions plus simple que de passer par du VBA.

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la fonction PETITE.VALEUR (SMALL() en anglais) permet d'obtenir la kieme plus petite valeur d'une plage

    en VBA, le minimum d'une plage de nombre positifs, en excluant 0, revient à obtenir l'avant dernier plus petit, c'est à dire la plus petite valeur de rang 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.Small(Range(Cells(i, 27),Cells(i+3,27)), 2)

  4. #4
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Par défaut Méthode brutale
    Merci menhir pour ta réponse
    En effet, je cherche exclusivement du VBA, je continue mes recherches

  5. #5
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Par défaut Petite valeur
    Merci joe.levrai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.Small(Range(Cells(i, 27),Cells(i+3,27)), 2)
    me renvoie ''Erreur de syntaxe''

  6. #6
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Par défaut Petite valeur
    De même, si j'ai plus d'un 0 dans la plage, ça me renvoie 0 quand même !

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Par contre, si tu n'as aucun 0, ça ne donnera pas la plus petite valeur.

    En Excel, je ferais la formule matricielle suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MIN(SI(A1:A10=0;"";A1:A10))
    Au pire, tu mets cette formule dans une cellule, tu récupères le résultat dans une variable et tu effaces la formule.

  8. #8
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Par défaut MIN
    C'est marrant, la formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MIN(SI(A1:A10=0;"";A1:A10))
    me renvoie 0 losqu'une cellule de la plage contient un 0

    Etrange !

  9. #9
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    En passant par Evaluate, pas besoin d'utiliser excel en tremplin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Evaluate("MIN(IF(A1:A10=0,"""",A1:A10))")

  10. #10
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par delube Voir le message
    me renvoie 0 losqu'une cellule de la plage contient un 0
    Je l'ai testée avant de l'envoyer et elle fonctionne.
    Est-ce que tu l'as bien enregistrée comme fonction matricielle ?
    Es-tu sûr que c'est un VRAI 0 qui est dans ta liste ? Ca ne serait pas un nombre avec décimales arrondi par son format ou quelque chose comme ça ?

    Citation Envoyé par joe.levrai Voir le message
    En passant par Evaluate, pas besoin d'utiliser excel en tremplin
    Je n'étais pas sûr que ça fonctionnait avec une formule matricielle ?

  11. #11
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2017
    Messages : 10
    Par défaut Evaluate
    Merci Joe

    En fonction de ma feuille voici ce que j'ai écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveSheet
    n = .Evaluate("MIN(IF(AA" & i & ":AA" & (i + 3) & "=0,"""",AA" & i & ":AA" & (i + 3) & "))")
    End With
    Et ça fonctionne

    Merci à tous pour votre aide

    A bientôt

  12. #12
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Si si, c'est la puissance de la fonction Evaluate.

    La formule peut être matricielle ou non, nul besoin de le spécifier, c'est VBA qui fait le job

    et contrairement à FormulaArray, on peut dépasser les 256 caractères dans l'écriture de la formule

  13. #13
    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
    Salut !

    Citation Envoyé par Menhir Voir le message
    Je n'étais pas sûr que ça fonctionnait avec une formule matricielle ?
    Pour cette raison entre autres, récemment j'ai indiqué même en VBA préférer souvent l'existant d'Excel
    à toute usine à gaz en VBA pur :  Penser Excel Avant VBA  ! …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

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

Discussions similaires

  1. [XL-2003] saisir des formules avec une plage variable de données
    Par nazaire dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/01/2011, 08h35
  2. [XL-2007] Moyennes d'une plage variable
    Par isfet dans le forum Excel
    Réponses: 1
    Dernier message: 18/08/2010, 14h32
  3. Somme sur une plage variable
    Par Sarune dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/08/2008, 13h40
  4. Appliquer une formule à une plage variable
    Par sophiefag dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/04/2008, 23h27
  5. Somme sur une plage variable
    Par mhamedbj dans le forum Excel
    Réponses: 2
    Dernier message: 29/02/2008, 15h56

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