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 :

macro ne fonctionne pas [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    Par défaut macro ne fonctionne pas
    Bonjour

    j'avais une macro voir ci dessous qui fonctionnait bien. Elle me permettait, à partir d'une colonne d'un tableau, de retrouver laquelle des classes avait le plus petit nombre de point et afficher le résultat dans des lignes précises.

    Malheureusement cela ne fonctionne plus et je ne vois pas l'erreur dans le code. Pouvez vous m'aider ?

    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
    Sub meilleur_classe()
    '
    ' permet 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
     
      Range("A1").Select
     
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    1) je n'ouvre et n'ouvrirai jamais un classeur tiers et n'ai donc pas ouvert le tien !
    2) ce qui "saute aux yeux" --->>
    - la ligne 13 de ton code est rigoureusement inutile (variable "écrasée" en ligne 14)
    - il suffit que, par malchance, la première valeur d'un groupe soit la plus petite du groupe pour que la variable num_class correspondante ne soit pas redéfinie !
    Remède évident : attribuer également une valeur à la variable num_class comme tu le fais pour la variable note_ref, juste avant la boucle for each cel (et donc : la note et la classe du premier élément du groupe)
    Note : je me suis contenté de signaler cette erreur fondamentale. Cette correction ne signifie pas que j'applaudis ton mécanisme.

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Variable à déclarer en double: Dim note_ref en double
    Ligne à tester: If Cel.Value <= note_ref
    Réinitialiser la variable à la fin de chaque boucle: num_class = ""

    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
        Dim Cel As Range, Plage As Range
        Dim num_class As String
        Dim note_ref As Double, Ligne As Integer 'note_ref en double
        Application.ScreenUpdating = False
        For Ligne = 3 To 21 Step 6
            Set Plage = Cells(Ligne, 10).Resize(6, 1)
            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.2, 14) = num_class
            num_class = ""
        Next Ligne
    Cdlt

  4. #4
    Membre averti
    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
    Par défaut
    Citation Envoyé par unparia Voir le message
    - la ligne 13 de ton code est rigoureusement inutile (variable "écrasée" en ligne 14)
    - il suffit que, par malchance, la première valeur d'un groupe soit la plus petite du groupe pour que la variable num_class correspondante ne soit pas redéfinie !
    cette erreur était tellement grosse que je ne l'avais pas vu


    Citation Envoyé par unparia Voir le message
    Remède évident : attribuer également une valeur à la variable num_class comme tu le fais pour la variable note_ref, juste avant la boucle for each cel
    Ce rajout à corrigé le bug GRAND MERCI à toi

    Citation Envoyé par unparia Voir le message
    Cette correction ne signifie pas que j'applaudis ton mécanisme.
    Je n'ai aucune prétention sur mon "mécanisme", j’essaie d'apprendre et suis ouvert à toute solution plus logique, simple....

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

Discussions similaires

  1. [XL-2007] une formule dans une macro ne fonctionne pas je ne sais pas quel est le problème
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/11/2010, 12h59
  2. [XL-2003] MFC - VBA -Macro ne fonctionne pas
    Par jorisphi dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 07/01/2010, 12h22
  3. copie de cellule avec macro ne fonctionne pas
    Par dyjoca88 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/06/2009, 17h46
  4. macro ne fonctionne pas sous 2007
    Par jijie dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/09/2008, 07h24
  5. XL-Macro ne fonctionne pas avec version small business edition
    Par emorex6 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 14/01/2008, 14h08

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