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 en fonction d'une clé


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 232
    Par défaut trouver le maximum en fonction d'une clé
    Bonjour forum,

    Je veux mettre en vba l'équivalent de la fonction excel max.si.ens.
    J'ai la colonne A ou j'ai mes clés et la colonne AF ou j'ai les valeurs ou trouver le maximum en fonction de la clé. Pour chaque clé je veux inscrire le maximum trouver dans la colonne AG.
    Pour se faire j'ai écrit le programme ci-dessous; Quand je l’exécute ça me met: " erreur de compilation next sans for. "

    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
    49
    50
    51
    52
    53
    54
    Sub retenir()
     
    Dim i, j, k, max, cle As Integer
     
    i = 5
    j = 5
    k = 5
    max = 0
    cle = 0
    For i = 5 To 261
     
        For j = i + 1 To 261
     
        cle = Range("A" & i).Value
     
        max = Range("AF" & i).Value
     
        If Range("A" & j).Value <> cle Then
     
        Next j
     
        Else
     
            If Range("AF" & j).Value > max Then
     
            max = Range("AF" & j).Value
     
            Else: max = Range("AF" & i).Value
     
             End If
     
        End If
     
     Next j
     
    For k = i To 261
     
        If Range("A" & k).Value <> "" Then Next k
     
        Else
     
            If Range("A" & k).Value = Range("A" & i).Value Then
     
            Range("AG" & k).Value = max
     
            Else
           End If
        End If
     
    Next k
     
    Next i
     
    End Sub
    Pourriez-vous svp m'apporter vos lumières ?

    Merci beaucoup!

  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

    Si pour trouver pour chaque clé le maximum correspondant, utilise un tableau croisé dynamique! c'est fait pour ça.

    Si pour un exercice scolaire, revois tes boucles car tu mélange tout.

  3. #3
    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
    bonjour
    aussi y a la fonction standard excel BDMAX et BDMIN.. beaucoup de tuto et exemple sur le net
    BONNE CONTINUATION

  4. #4
    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 erlerwade Voir le message
    Quand je l’exécute ça me met: " erreur de compilation next sans for. "
    Le premier problème que tu aurais dû repérer, c'est qu'il y a plus de Next que de For.

    Mais je pense que ton plus gros problème, c'est que tu as voulu croiser une structure If et une structure For.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        If Range("A" & j).Value <> cle Then
        Next j
        Else
    Ca, c'est interdit.

    Une formulation correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        For j = i + 1 To 261
            cle = Range("A" & i).Value
            max = Range("AF" & i).Value
            If Range("A" & j).Value = cle Then max = Range("AF" & IIf(Range("AF" & j).Value > max, j, i)).Value
        Next j
    Cela dit, pour faire l'équivalent d'un MAX.SI.ENS(), il serait beaucoup plus simple d'utiliser cette fonction avec un Evaluate ou un WorksheetFunction.
    https://docs.microsoft.com/fr-fr/off...ation.evaluate
    https://docs.microsoft.com/fr-fr/off...ksheetfunction

  5. #5
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 232
    Par défaut
    Merci beaucoup!

    Une formulation correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            If Range("A" & j).Value = cle Then max = Range("AF" & IIf(Range("AF" & j).Value > max, j, i)).Value 
        Next j
    Il n’y-aurait pas d'erreur de frappe ou c'est moi qui ne comprend pas la structure de ton if test ?

  6. #6
    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 erlerwade Voir le message
    Il n’y-aurait pas d'erreur de frappe ou c'est moi qui ne comprend pas la structure de ton if test ?
    Ma structure est calquée sur la tienne.
    Je n'ai pas cherché à corriger ton algorithme mais juste ta syntaxe.

    Qu'est-ce qui te fait penser qu'il puisse y avoir une erreur de frappe ?
    C'est une erreur signalée par l'éditeur ? Un message à l'exécution ? Un résultat incorrect ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,

    Citation Envoyé par Menhir Voir le message
    Qu'est-ce qui te fait penser qu'il puisse y avoir une erreur de frappe ?
    Ca peut le iif (avec deux i) qui le dérange.
    Mais ce n'est pas une erreur de frappe :https://support.office.com/fr-fr/art...0-647539C764E3

  8. #8
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 232
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Ma structure est calquée sur la tienne.
    Je n'ai pas cherché à corriger ton algorithme mais juste ta syntaxe.
    Ta partie que tu me propose est-elle censée remplacer ma partie de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    or i = 5 To 261
     
        For j = i + 1 To 261
     
        cle = Range("A" & i).Value
     
        max = Range("AF" & i).Value
     
        If Range("A" & j).Value <> cle Then
     
        Next j

    Citation Envoyé par Menhir Voir le message
    Qu'est-ce qui te fait penser qu'il puisse y avoir une erreur de frappe ?
    le "IIF" dans ta formule m'a perturbé. Je ne connaissais pas avant.

    Merci beaucoup pour l'aide !

  9. #9
    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 erlerwade Voir le message
    Ta partie que tu me propose est-elle censée remplacer ma partie de code
    Elle remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        For j = i + 1 To 261
        cle = Range("A" & i).Value
        max = Range("AF" & i).Value
        If Range("A" & j).Value <> cle Then
        Next j
        Else
            If Range("AF" & j).Value > max Then
            max = Range("AF" & j).Value
            Else: max = Range("AF" & i).Value
             End If
        End If
     Next j
    Cela dit, comme je l'ai déjà suggéré, je pense que ton algorithme ne tient pas la route.
    Mais je ne l'ai pas regardé en détail.
    D'autant plus que tout ça pourrait se faire en une seule ligne de code, comme signalé dans mon premier message.

Discussions similaires

  1. Aide pour une ramener une info en fonction d'une date maximum
    Par dessinateurttuyen dans le forum SQL
    Réponses: 7
    Dernier message: 31/10/2008, 16h52
  2. trouver le maximum d'une colonne
    Par Scalpyxx dans le forum SAS Base
    Réponses: 7
    Dernier message: 03/09/2008, 17h10
  3. Trouver le numéro de ligne d'une fonction
    Par supertoms dans le forum VBA Access
    Réponses: 4
    Dernier message: 28/04/2008, 20h10
  4. Réponses: 3
    Dernier message: 13/03/2008, 09h40
  5. Trouver valeur maximum d'une variable matricielle
    Par Mr_JF dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/02/2008, 15h36

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