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

Excel Discussion :

Mise en place fonction Min avec Index VBA


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Mise en place fonction Min avec Index VBA
    Bonjour,

    Je souhaite trouver un minimum dans une plage définie par 2 bornes variables.
    Dans mon tableau j'ai en:
    - Colonne 1 des dates
    - Colonne 2 des températures

    L'utilisateur choisi la date et l'heure de début et de fin pour la plage a traiter.
    L'outil VBA trouve un minimum en colonne 2 comprise entre les lignes des dates choisies.

    Voilà le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
     
    Cellule_utile = Cells(num_ligne, 1).Value - 1 + 18 / 24 
    Cellule_Tmin_debut = Application.Match(CDbl(Cellule_utile), Sheets("Data 1").Columns(1), 0)
     
     
    Cellule_utile_2 = Cells(num_ligne, 1).Value + 18 / 24
    Cellule_Tmin_fin = Application.Match(CDbl(Cellule_utile_2), Sheets("Data 1").Columns(1), 0)
     
     
    With Worksheets("Data 1")
            Set Plage_temp = .Range(.Cells(2, 1), .Cells(.Rows.Count, 2).End(xlUp))
            Set Plage_Tmin = .Range(.Cells(WorksheetFunction.index(Plage_temp, Cellule_Tmin_debut, 2), 2), .Cells(WorksheetFunction.index(Plage_temp, Cellule_Tmin_fin, 2), 2))
     
    End With
     
     
        Tmin = WorksheetFunction.Min(WorksheetFunction.index(Plage_temp, Cellule_Tmin_debut, 2), WorksheetFunction.index(Plage_temp, Cellule_Tmin_fin, 2))
      ' Tmin = WorksheetFunction.Min(Plage_Tmin)
     
      Cells(num_ligne_DJU, 4).Value = Tmin
    J'ai essayé les deux méthodes pour trouver la température minimale.
    La valeur renvoyé est pour la première méthode, la température minimale entre les deux valeurs des deux bornes, soit l'une soit l'autre. Ne considère pas les températures entre les bornes.
    La valeur renvoyé est pour la deuxième méthode (en commentaire), une température, ne correspondant ni au minimum, ni au maximum, ni la moyenne de ma plage.

    Pourriez-vous m'aider sur ce coup là?

    Merci!

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 115
    Points : 180
    Points
    180
    Par défaut
    Bonjour

    Il me semble qu'il y a confusion des genres.

    Pourquoi faire du code VBA avec WorksheetFunction?
    Si la définition de la plage entre les cellules Cellule_Tmin_debut et Cellule_Tmin_fin est correcte,
    Il suffit de demander le Min de cette plage soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim myRange As Range
    Cellule_utile = Cells(num_ligne, 1).Value - 1 + 18 / 24
    Cellule_Tmin_debut = Application.Match(CDbl(Cellule_utile), Sheets("Data 1").Columns(1), 0)
     
     
    Cellule_utile_2 = Cells(num_ligne, 1).Value + 18 / 24
    Cellule_Tmin_fin = Application.Match(CDbl(Cellule_utile_2), Sheets("Data 1").Columns(1), 0)
     
    Set myRange = Range(Cellule_Tmin_debut, Cellule_Tmin_fin)
     
    Cells(num_ligne_DJU, 4) = WorksheetFunction.Min(myRange)
     
    Set myRange = Nothing
    Sinon, sans VBA en transformant les données en tableau (Onglet "Insertion", pavé "Tableau", Bouton "Tableau"), on peut avoir des sous-totaux, des moyennes, etc...en fonction des données filtrées.



    Cordialement

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour votre réponse bien éclairante!
    En effet, j'ai voulu appliquer les formules utilisées sans macros... aux macros. Du coup, avec le peu d'expérience dans ce domaine, l'erreur m'avait pas interpellé.
    Votre code s'applique si les données sont toutes sur la même colonne alors que moi j'ai deux colonnes différentes.

    Du coup après avoir légèrement modifié le code, mon petit calcul marche à la perfection!

    Voici la dernière version qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    With Worksheets("Data 1")
            Set Plage_Tmin = .Range(.Cells(Cellule_Tmin_debut, 2), .Cells(Cellule_Tmin_fin, 2))
            End With
     
        Tmin = WorksheetFunction.Min(Plage_Tmin)
    Après coup, ça parait tout de même évident!

    Il me reste encore beaucoup à apprendre...

    Merci beaucoup!

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

Discussions similaires

  1. Mise en place des notifications avec GCM
    Par gégé140488 dans le forum Android
    Réponses: 1
    Dernier message: 10/10/2012, 18h21
  2. [AC-2007] Fonction Min avec critère
    Par doncamelo dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 25/07/2012, 16h42
  3. Réponses: 4
    Dernier message: 17/06/2011, 21h56
  4. [Toutes versions] fonction MIN avec critères
    Par taquatzieu dans le forum Excel
    Réponses: 5
    Dernier message: 16/11/2010, 08h41
  5. Réponses: 5
    Dernier message: 19/12/2005, 17h45

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