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 :

Appeler une function [XL-365]


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
    Responsable de compte
    Inscrit en
    Mars 2020
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2020
    Messages : 14
    Par défaut Appeler une function
    Bonjour tout le monde,

    J'ai crée une fonction qui me permettra (normalement) de transférer les valeurs des cellules de la colonne A (feuille précédente) dans les lignes correspondantes de la feuille suivante.
    J'ai essayé d'appliquer cette fonction par l'appel d'une macro avec la fonction Call mais rien ne se produit..
    EDIT : J'ai supprimé la fonction call de ma macro c'est pour ça qu'elle n’apparaît pas dans ci-dessous
    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
    55
    56
    57
     
    'vu que le test 1 a échoué, on cherche à l'aide d'une boucle For de transéférer les valeurs de la colonne A feuille -1 dans les lignes correspondantes dans la colonne A feuille actuelle
    Function Previous(ByRef pLigne As Variant)
     
        Dim comm As Variant, ligne As Variant, bln As Boolean, isheet As Variant
        comm = ActiveSheet.Previous.Cells(Rows.Count, 1).End(xlUp).Row
        For ligne = 2 To comm
            MsgBox (ligne)
            If IsEmpty(Cells(ligne, 1)) Then
                For isheet = ActiveSheet.Index + 1 To Worksheets.Count
                    bln = False
                    'MsgBox ("A" & ligne) 'la macro reconnait les lignes recherchées dans la feuille précédente
                    If Not IsError(comm) Then
                        bln = True
                        Exit For
                    End If
     
                    If ActiveSheet.Cells(pLigne, 2) = ActiveSheet.Previous.Cells(ligne, 2) Then
                        Previous = ActiveSheet.Previous.Cells(ligne, 1).Value
                    End If
     
     
                Next isheet
            End If
        Next ligne
    End Function
     
     
    Sub test()
    Dim comm As Variant, ligne As Variant, bln As Boolean, isheet As Variant, x As Variant
    Dim newcomm As Variant, newligne As Variant, newbln As Boolean, newisheet As Variant
     
     
    comm = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
     
    For ligne = 2 To comm
        If IsEmpty(Cells(ligne, 1)) Then
            For isheet = ActiveSheet.Index + 1 To Worksheets.Count
                bln = False
                'MsgBox (ligne)
                If Not IsError(comm) Then
                    bln = False
                    Exit For
                End If
                ActiveSheet.Cells(ligne, 1).Value = Application.Run("Previous", ligne)
            Next isheet
        End If
    Next ligne
     
    End Sub
    'la  macro permet de "scanner" chaque ligne et à chaque ligne on appel
    ' à la fonction, qui, va récupérer toutes les valeurs de la feuille précédente
    'elle est censé comparer les valeurs entres elles et voir si elles ont
    'les mêmes valeurs, si la valeur est la même, alors les données de la colonne A
    'sont transmises dans les lignes correspondantes
     
    'Je n'arrive pas à appeler une fonction dans la macro , et c'est la fonction citée plus haut
    Merci d'avance.

    Marc,

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 705
    Par défaut
    Bonjour,

    Je n'ai pas regardé ton code en détail, mais d'après ce que tu dis j'ai l'impression que tu confonds les Sub et les Function.
    On n'appelle pas une fonction par un Call.
    Sub => permet de faire un ensemble d'actions
    Function => permet de retourner qqc.

    Exemple tout bête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'Une fonction qui renvoie la somme de 2 entiers
    Function fctSommeEntiers(x As Integer, y As Integer) As Integer
        fctSommeEntiers = x + y
    End Function
     
    'Un sub qui permettra d'ajouter un à la valeur de la cellule A1 à chaque fois qu'on l'appelle
    Sub ajouterUnDansA1()
        Rang("A1").Value = fctSommeEntiers(Range("A1").Value, 1)
    End Sub
    Une fonction personnalisée peut aussi être appelée directement dans la feuille de calcul.

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    J'ai survolé ton code, un remarque importante :
    Les mots du langage (comme Previous) sont réservés au langage,
    il ne faut pas les utiliser pour nommer autre chose (Sub, Function, Module, variable, Objet, ....) :
    4ème point de : Règles d’affectation de noms Visual Basic (VBA) | Microsoft Docs

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

Discussions similaires

  1. VBA appel à une function erreur compilation "tableau attendu"
    Par MarylineS dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/03/2020, 16h40
  2. Utilisation du mot prototype pour appeler une function/method
    Par Mandotnet dans le forum TypeScript
    Réponses: 2
    Dernier message: 19/05/2016, 11h19
  3. appeler une function stockée
    Par clouddd dans le forum C#
    Réponses: 3
    Dernier message: 22/02/2012, 10h39
  4. Appeller une function javascript de la page mère
    Par Anubis dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/07/2007, 15h22
  5. Page Html qui appel une function
    Par grimsk dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 15/09/2006, 20h01

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