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 :

problème avec "set plage" [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 18
    Points : 13
    Points
    13
    Par défaut problème avec "set plage"
    * Bonjour, *

    Je reviens de nouveau vers vous
    Dans un tableau,j'ai une colonne qui correspond aux résultats des courses par classes (chaque niveau est séparé par une ligne vide). Je désire créer une macro qui me permet de trouver la classe qui à le moins de point pour chaque niveau. Voici le code que j'ai créé
    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
    Sub Class_niveau()
    '
    ' Macro permettant de classer la meilleur classe d'un niveau
    '
    Dim Cel As Range, Plage As Range
    Dim num_class As String
    Dim note As Integer, note_ref As Integer
     
    Application.ScreenUpdating = False
     
     
            Set Plage = Range("J3:J8")
            note_ref = Range("J3").Value
            For Each Cel In Plage
                If Cel.Value < note_ref And Cel.Value <> "" Then num_class = Cel.Offset(0, -5).Value
            Next
            Set Plage = Nothing
            Range("N18") = num_class
     
            Set Plage = Range("J9:J14")
            note_ref = Range("J9").Value
            For Each Cel In Plage
                If Cel.Value < note_ref And Cel.Value <> "" Then num_class = Cel.Offset(0, -5).Value
            Next
            Set Plage = Nothing
            Range("N20") = num_class
     
            Set Plage = Range("J15:J20")
            note_ref = Range("J15").Value
            For Each Cel In Plage
                If Cel.Value < note_ref And Cel.Value <> "" Then num_class = Cel.Offset(0, -5).Value
            Next
            Set Plage = Nothing
            Range("N22") = num_class
     
            Set Plage = Range("J21:J26")
            note_ref = Range("J21").Value
            For Each Cel In Plage
                If Cel.Value < note_ref And Cel.Value <> "" Then num_class = Cel.Offset(0, -5).Value
            Next
            Range("N24") = num_class
     
            Set Plage = Nothing
     
    End Sub
    Pour le premier niveau cela fonctionne mais pas pour les trois autres.
    Voivi les données qui se trouve dans la plage :
    J9:J14 35,72 31,21 63,81 34,75 67,85 (dernière ligne vide)
    J15:J20 63,88 59,32 28,35 39,25 44,29 (dernière ligne vide)

    Pouvez vous m'indiquer mon erreur

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Peux-tu mettre un classeur exemple (sans données confidentielles) en pièce jointe ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Pas de soucis le voici
    la macro a tester se trouve dans la feuille "classe"

    J'ai trouvé une partie de mon erreur.Je ne réaffectais pas la nouvelle valeur de note_ref

    Problème maintenant les classes ne s'affichent pas dans le tableau
    Fichiers attachés Fichiers attachés

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Une solution
    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
    Sub Class_niveau()
    '
    ' Macro permettant de classer la meilleur classe d'un niveau
    '
    Dim Cel As Range, Plage As Range
    Dim num_class As String
    Dim note_ref As Integer, Ligne As Integer
        Application.ScreenUpdating = False
        For Ligne = 3 To 21 Step 6
            Set Plage = Cells(Ligne, 10).Resize(6, 1)
            note_ref = Range("J3").Value
            note_ref = Cells(Ligne, 10).Value
            For Each Cel In Plage
                If Cel.Value < note_ref And Cel.Value <> "" Then
                    note_ref = Cel.Value
                    num_class = Cel.Offset(0, -5).Value
                End If
            Next
            Cells(17 + Ligne / 3, 14) = num_class
        Next Ligne
        Set Plage = Nothing
    End Sub
    Cordialement.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    merci pour ce code qui est encore une fois plus intelligemment conçu.

    Mais juste pour m'améliorer quelle était l'erreur dans ma version ?

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Il faut que tu regardes l’expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cel.Value < note_ref And Cel.Value <> "" Then note_ref = Cel.Value And num_class = Cel.Offset(0, -5).Value
    L’expression suivante et correcte car l’opérateur AND relie 2 expressions logiques.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cel.Value < note_ref And Cel.Value <> ""
    Par contre, l’expression suivante est incorrecte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Then note_ref = Cel.Value And num_class = Cel.Offset(0, -5).Value
    note_ref = Cel.Value n’est pas une expression logique. Il s’agit d’une instruction qui affecte la valeur de la cellule Cel.Offset(0, -5) à la variable num_class. Le résultat n’est pas Vrai ou Faux.
    Dans ce cas, tu ne peux pas utiliser l’opérateur AND.
    Pour réaliser 2 instructions séquentiellement, il suffit de les placer l’une après l’autre ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                If Cel.Value < note_ref And Cel.Value <> "" Then
                    note_ref = Cel.Value
                    num_class = Cel.Offset(0, -5).Value
                End If
    Cordialement.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2012
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Merci à toi

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

Discussions similaires

  1. Problème avec std::set
    Par DeathMixer dans le forum SL & STL
    Réponses: 2
    Dernier message: 02/06/2009, 16h01
  2. Problème avec les set et la fonction transform
    Par perpau07 dans le forum SL & STL
    Réponses: 5
    Dernier message: 30/10/2008, 21h45
  3. Problème avec un set dans un if dans une boucle
    Par keks06 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 20/05/2008, 09h26
  4. [debutant][Gregoriancalendar] Problème avec le set
    Par britou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 30/06/2004, 16h01

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