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 :

MAX fonction en 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
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut MAX fonction en VBA
    Bonjour.


    Je cherche désespérément à convertir cette formule en VBA
    =max(if(A1:A5="TOTO",B1:B5))

    Je cherche à trouver la date la plus récente qui correspond à TOTO.

    A B
    TOTO 2012-01-01
    TATI 2011-02-02
    TOTO 2011-05-05
    TATA 2012-02-01
    TATI 2011-04-01

    Pour le moment j’ai ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub test()
     
    Dim rng1 As Range
    Dim rng2 As Range
    Dim DateOK As date
     
    Set rng1 = Range("A1:A5")
    Set rng2 = Range("B1:B5")
     
    DateOK = Application.WorksheetFunction.Max(rng1, "TOTO", rng2)
    Msgbox DateOK
     
    End Sub

    Il semble que la fonction WorksheetFunction.Max n’accepte pas les criteres de recherche TOTO

    Je suis perdu.

    Merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Par défaut
    Bonjour

    essaies

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    date_recente = [Max(If(A1:A5="TOTO",B1:B5 ))]
    MsgBox Format(date_recente, "dd/mm/yyyy")

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    Bonjour,

    Autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub totorecent()
     
    Sheets("nomdetapage").Select
     
    Dim recent As String
     
    Range("E1").FormulaLocal = "=GRANDE.VALEUR(A1:B65000;NB.SI(A1:B65000; ""=""&""TOTO"")+1)" ' recherche de la date la plus recente
    Selection.NumberFormat = "m/d/yyyy" 'mettre la case au format date
    recent = Cells(1, 5) ' Variable de la date la plus recente
    MsgBox recent
     
    End Sub
    A bientot

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mars 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 3
    Par défaut
    Citation Envoyé par Michel_M Voir le message
    Bonjour

    essaies

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    date_recente = [Max(If(A1:A5="TOTO",B1:B5 ))]
    MsgBox Format(date_recente, "dd/mm/yyyy")
    C'était si simple....

    Merci Michel

    Oups! J'aimerai utiliser des variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim rng1, rng2 As Range
    dim cherche
     
    Set rng1 = Range("A1:A5")
    Set rng2 = Range("B1:B5")
    cherche = "TOTO"
     
    date_recente = [Max(If(rng1=cherche,rng2 ))]
    MsgBox Format(date_recente, "dd/mm/yyyy")
    Incompatibilité de type???

    Y a-t-il une solution?

    Merci

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    sans variables range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim rng1 as string, rng2 As string
    dim cherche
     
    rng1 = Range("A1:A5").address
    rng2 = Range("B1:B5").address
    cherche = "TOTO"
     
    date_recente = [Max(If(rng1=cherche,rng2 ))]
    MsgBox Format(date_recente, "dd/mm/yyyy")
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim rng1, rng2 As Range
    dim cherche
     
    Set rng1 = Range("A1:A5")
    Set rng2 = Range("B1:B5")
    cherche = "TOTO"
     
    date_recente = [Max(If(range(rng1.Address)=cherche,rng2 ))]
    MsgBox Format(date_recente, "dd/mm/yyyy")
    non testé
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Par défaut
    Bonjour,

    Avec des variables il faut utiliser la syntaxe "evaluate" et non les crochets...
    cette syntaxe est délicate (ce qui explique mon retard!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub essai_evaluate(Rng1, Rng2, Cherche)
    Dim DateOK As Long
         DateOK = Evaluate("Max(if(" & Rng1 & "= """ & Cherche & """," & Rng2 & "))")
         MsgBox Format(DateOK, "dd/mm/yyyy")
    End Sub
     
    Sub test3()
    Rng1 = "A1:A5"
    Rng2 = "B1:B5"
    valeur = "TOTO"
    essai_evaluate Rng1, Rng2, valeur
    End Sub

Discussions similaires

  1. min max d'une fonction selon vba/excel
    Par lola19 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/07/2009, 20h22
  2. fonction time vba
    Par prisme7 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2007, 20h50
  3. [VBA-E] Pb insertion d'une fonction par VBA
    Par la-breche dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/03/2007, 13h29
  4. [VBA-E]import de fonction dans vba
    Par vincent.tr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/12/2006, 22h05
  5. Réponses: 7
    Dernier message: 31/08/2006, 09h41

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