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 :

trouver le maximum de chaque groupe vb


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 19
    Par défaut trouver le maximum de chaque groupe vb
    Bonjour,

    je doit trouver l'effectif le plus grand de chaque groupe

    dans un fichier excel, j'ai:
    colone A: GROUPE et colonne B: effectif
    j'ai scinder le fichier sur plusieur colonnes afin de trouver le maximum dans chaque groupe avec vb mais mon tuteur ne veut pas que je scinde le fichier, merci de m'aider car je ne trouve pas de solution.

    je vous envoie un fichier exemple en pièce jointe avec le code vb.

    cordialement
    isabela
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    Une proposition

    Dans un module public, on se construit une fonction personnalisée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Rng: Plage de recherche du critère
    'Crit: Critère
    'MxRng: Plage de recherche du max correspondant
     
    Public Function MaxIf(Rng As Range, ByVal Crit As String, MxRng As Range) As Double
    Dim Frml As String
     
    Frml = "=MAX(IF(" & Rng.Address & "=""" & Crit & """," & MxRng.Address & ",""""))"
    MaxIf = Evaluate(Frml)
    End Function
    Sur ton fichier, on l'applique comme une fonction d'excel

    Exemple en D4 pour rechercher le maximum du groupe A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MaxIf(A2:A23;"A";B2:B23)

  3. #3
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 19
    Par défaut
    Bonjour mercatog,

    merci pour votre réponse aussi rapide, ça ne fonctionne pas, quand j'éxécute il me dit erreur 424 objet requis.
    vous pouvez me donner une idéé svp?
    merci

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    en suivant exactement les explications complètes de Mercatog, cela fonctionne parfaitement chez moi.

  5. #5
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 19
    Par défaut
    Bonjour Godzestla,

    vous utilisez excel 2007 ou 2003?
    moi je travaille sur 2007 et ça na pas fonctinné

  6. #6
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Isabela,
    j'utilise 2003, mais je doute que ton problème vienne de la.

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour Godzestla, isabela

    Tu as bien mis la fonction dans un module public.
    Tu utilise la fonction directement sur la feuille (comme une fonction Excel) ou tu l'utilise dans une procédure?

    1. Pour l'utiliser directement dans une feuille, mettre la formule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MaxIf(A2:A23;"A";B2:B23)
    2. Pour l'utiliser dans une procédure (exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Test()
     
    With Sheets("Feuil1")
        MsgBox MaxIf(.Range("A2:A23"), "A", .Range("B2:B23"))
    End With
    End Sub
    Maintenant explique nous comment tu l'utilise.

  8. #8
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 19
    Par défaut
    Bonjour,

    je l'utilise dans une procédure, avec vb.

    j'ai essayé avec le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Test()
     
    With Sheets("Feuil1")
        MsgBox MaxIf(.Range("A2:A23"), "A", .Range("B2:B23"))
    End With
    End Sub
    et ça fonctionne, mais ma base de donné contient 16000 ligne et 3000 groupe, comment je fais...?

  9. #9
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Re,

    tu n'as toujours pas répondu à cette question de Mercatog?
    Tu as bien mis la fonction dans un module public.
    Car ta réponse ici ne veut pas dire grand-chose !
    Bonjour,

    je l'utilise dans une procédure, avec vb.

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une proposition, données en Feuil 1 colonnes A:B et résultat en Feuil2
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    'Activer la référence Microsoft Scripting Runtime
    Sub Test()
    Dim Kol As New Collection
    Dim LastLig As Long, i As Long, j As Long
    Dim PlageA As Range, PlageB As Range
    Dim Groupe As Object
    Dim Gpe As String
     
    With Worksheets("Feuil1")
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = 2 To LastLig
            Gpe = .Range("A" & i).Value
            If Trim(Gpe) <> "" Then
                On Error Resume Next
                Kol.Add Gpe, Gpe
                On Error GoTo 0
            End If
        Next i
        Set PlageA = .Range("A2:A" & LastLig)
        Set PlageB = .Range("B2:B" & LastLig)
    End With
     
    With Sheets("Feuil2")
        .UsedRange.ClearContents
        .Range("A1:B1").Value = Array("Groupe", "Max")
        If Kol.Count > 0 Then
            For i = 1 To Kol.Count
                .Range("A" & i + 1).Value = Kol(i)
                .Range("B" & i + 1).Value = MaxIf(PlageA, Kol(i), PlageB)
            Next i
        End If
    End With
    Set Kol = Nothing
    Set PlageA = Nothing
    Set PlageB = Nothing
    End Sub
     
     
    'Rng: Plage de recherche du critère
    'Crit: Critère
    'MxRng: Plage de recherche du max correspondant
     
    Public Function MaxIf(Rng As Range, ByVal Crit As String, MxRng As Range) As Double
    Dim Frml As String
     
    Frml = "=MAX(IF(" & Rng.Parent.Name & "!" & Rng.Address & "=""" & Crit & """," & MxRng.Parent.Name & "!" & MxRng.Address & ",""""))"
    MaxIf = Evaluate(Frml)
    End Function
    PS: Dans la fonction MaxIf, j'ai ajouté la feuille aux plages.

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

Discussions similaires

  1. Maximum pour chaque groupe
    Par im-souf dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2012, 11h22
  2. Réponses: 13
    Dernier message: 06/07/2006, 11h25
  3. Récupérer les maximums pour chaque ensemble ?
    Par vynce dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/12/2005, 09h52
  4. Trouver un maximum entre 2 chiffres sans tests
    Par orichimaru dans le forum Algorithmes et structures de données
    Réponses: 32
    Dernier message: 25/03/2005, 11h05
  5. [CR] trouver le maximum ?
    Par Etienne51 dans le forum Formules
    Réponses: 3
    Dernier message: 25/06/2004, 17h04

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