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 :

Erreur de compilation : Sub ou fonction non définie


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Erreur de compilation : Sub ou fonction non définie
    Bonjour,
    Je suis entrain d'écrire un code VBA pour le calcul des notes d'étudiants. Prenons une UE comportant deux ECU. Lorsque l'étudiant est défaillant dans un ECU le résultat est "Déf." (défaillant) et il a une note 15 dans le second ECU. Le calcul de la moyenne de l'UE fait (Moyenne ECU 1 + Moyenne ECU 2)/2. Ce qui veut dire que je vais obtenir ("Déf." + 15)/2 = 7,5.
    J'arrive à le faire dans la feuille de calcul. Mais en écrivant le code VBA, j'ai des difficultés. Voilà ce j'ai écrit pour que le message (Erreur de compilation: Sub ou fonction non définie) lors de l'exécution de la macro.
    Le problème se pose au niveau de la ligne en gras et qui est soulignée. A toutes fins utiles, je joints le fichier excel avec le code VBA.
    Merci

    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
    Option Explicit 'Obligation de déclarer les variables
    Const DebEtu_Cell = "C5"
    '===================================================
    'Calcul de notes pour les étudiants
    '===================================================
    Public Sub Calcul_Notes()
    Dim MC As Range
    'Se positionner sur le premier étudiant
    Set MC = Range(DebEtu_Cell)
    'Itérer vers le bas tant que la cellule est non vide
    Do While Not IsEmpty(MC.Value)
    'Calcul de la moyenne
    If MC.Offset(0, 1).Value = "" And MC.Offset(0, 2).Value = "" Then
        MC.Offset(0, 3).Value = "Déf."
        ElseIf MC.Offset(0, 1).Value = "" Then
        MC.Offset(0, 3).Value = MC.Offset(0, 2).Value
        Else: MC.Offset(0, 3).Value = (MC.Offset(0, 1).Value) * 1 / 3 + (MC.Offset(0, 2).Value) * 2 / 3
    End If
    If MC.Offset(0, 4).Value = "" And MC.Offset(0, 5).Value = "" Then
        MC.Offset(0, 6).Value = "Déf."
        ElseIf MC.Offset(0, 4).Value = "" Then
        MC.Offset(0, 6).Value = MC.Offset(0, 5).Value
        Else: MC.Offset(0, 6).Value = (MC.Offset(0, 4).Value) * 1 / 3 + (MC.Offset(0, 5).Value) * 2 / 3
    End If
    If MC.Offset(0, 3).Value = "Déf." And MC.Offset(0, 6).Value = "Déf." Then
        MC.Offset(0, 7).Value = "Déf."
        Else: MC.Offset(0, 7).Value = Sum(MC.Offset(0, 3).Value And MC.Offset(0, 6).Value) / 2
    End If
    '
    'Se position sur la cellule du dessous
        Set MC = MC.Offset(1, 0)
    Loop
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour

    Nul besoin de la fonction SUM
    L'opérateur d'addition est l'opérateur +
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 911
    Points
    55 911
    Billets dans le blog
    131
    Par défaut
    Salut

    Sans avoir regardé le reste du code: AND est un opérateur logique, alors que tu dois utiliser l'opérateur arithmétique +. Du coup. SUM n'est plus utile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Else: MC.Offset(0, 7).Value = (MC.Offset(0, 3).Value + MC.Offset(0, 6).Value) / 2
    Cela étant, je serais enclin à réaliser l'opération par formules Excel, éventuellement placées par VBA:
    • tu éviterais les boucles et la sélection des cellules à traiter (gourmand en temps);
    • tu sortirais ta logique métier du code;
    • tu éviterais les imbrications de IF... ENDIF;
    • ton code ne ferait dès lors plus que quelques lignes;
    • si demain ton calcul en F s'effectue différemment, tu dois uniquement modifier la formule sans toucher au reste du code(*), alors que le code que tu proposes risque fort d'être bon à jeter et à reprendre de 0.



    Dans Excel, la formule pour F peut s'écrire comme sur l'illustration suivante:

    Nom : 2018-03-08_213811.png
Affichages : 954
Taille : 7,1 Ko

    Si tu veux réaliser cela en VBA, tu utilises le code suivant (J'ai écrit le code uniquement pour F, à toi d'adapter pour les autres colonnes à droite)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Calcul_Notes()
      Dim Formule As String
      Dim Plage As Range
     
      Set Plage = Range("f5:f" & Range("c1048576").End(xlUp).Row) ' On définit la plage à impacter
      Formule = "=IF(D5="""",IF(E5="""",""DEF."",E5),D5/3+E5*2/3)" ' Transcription de la formule "française" au format international (perso, je préfère)
      Plage.Formula = Formule ' Application de la formule sur la plage définie (équivaut à sélectionner la plage en Excel et à valider la formule par CTRL+ENTER
     
      ' Eventuellement, si tu veux figer les calculs par un copier/coller spécial valeurs
      Plage.Copy
      Plage.PasteSpecial xlPasteValues
      Application.CutCopyMode = False
    End Sub

    (*) Si tu stockais ta formule dans une cellule Excel (par exemple dans une feuille de paramètres), tu n'aurais même pas à modifier ton code, il te suffirait de modifier la formule dans la cellule de la feuille de paramètres...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Remerciement
    Je vous remercie sincèrement pour la solution

  5. #5
    Expert éminent sénior 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
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par amoves Voir le message
    Voilà ce j'ai écrit pour que le message (Erreur de compilation: Sub ou fonction non définie) lors de l'exécution de la macro.
    Le problème se pose au niveau de la ligne en gras et qui est soulignée. A toutes fins utiles, je joints le fichier excel avec le code VBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Else: MC.Offset(0, 7).Value = Sum(MC.Offset(0, 3).Value And MC.Offset(0, 6).Value) / 2
    Sum n'est pas une fonction VBA.
    Pour pouvoir utiliser la fonction Sum de Excel en VBA, il faut préciser que c'est une fonction Excel en utilisant WorksheetFunction.
    https://msdn.microsoft.com/library/f...ice.15%29.aspx

    En plus, le contenu de ton Sum me parait très étrange.
    Mais ne sachant pas ce que contiennent les cellules concernées, difficile d'avoir une certitude.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 084
    Points : 9 872
    Points
    9 872
    Billets dans le blog
    5
    Par défaut
    Sum peut se rapporter à la classe Application ou la sous-classe Worksheetfunction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub toto()
    MsgBox Application.Sum(Cells(1, 1), Cells(2, 1))
    MsgBox Application.WorksheetFunction.Sum(Cells(1, 1), Cells(2, 1))
    End Sub

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour,

    et il vaut mieux éviter WorksheetFunction en cas de résultat en erreur …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. [XL-2010] Erreur de compilation : Sub ou Function non définie
    Par forum2015 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 23/07/2014, 17h04
  2. [XL-2007] Erreur de compilation : sub ou fonction non définie
    Par Marine38500 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/02/2014, 16h37
  3. [XL-2007] Erreur compilation : Sub ou Fonction non définie
    Par DSE76 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 02/07/2013, 14h41
  4. [XL-2007] Erreur de compilation : Sub ou Function non définie
    Par pimpom81 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 27/03/2013, 19h47
  5. Sub ou fonction non définie (Erreur 35)
    Par xavion dans le forum VBA Word
    Réponses: 5
    Dernier message: 14/12/2012, 20h36

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