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 :

[DEB ]Paramètres Procédure [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 112
    Points : 98
    Points
    98
    Par défaut [DEB ]Paramètres Procédure
    Bonjour à tous
    J'ai lu cette contribution https://bidou.developpez.com/article/VBA/

    J'avoue que je n'ai pas bien saisie le passage d'arguments à une procédure/ fonction

    Voici un bout de code appelant une procédure nommée Valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    If Co(i) <> Co(j) And Ro(i) <> Ro(j) Then
     
     
                     If (DeltaRo <= 2 And DeltaCo <= 2) Or MRo <= 2 And MCo <= 2 Then
                     X = WorksheetFunction.Min(MCo, DeltaCo)
                     Y = WorksheetFunction.Min(MRo, DeltaRo)
                     Valeur
                        GoTo Jump
                     End If
     End If
    et voici la procédure qui modifie juste les valeurs d'un tableau en fonction des valeurs X etY

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub Valeur()
     
    If Not (X = 2 Or Y = 2) Then Score(i) = Score(i) + 1: Score(j) = Score(j) + 1
    End Sub
    Cela marche très bien,mais est ce que j'aurai du essayer d'écire qqchose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Sub Valeur(ByRef X As Integer, ByRef Y As Integer, ByRef i As Integer, ByRef j As Integer)
    End sub
    mais à ce moment là comment appeler la procédure
    J'avais essayé
    mais cela provoque une erreur de syntaxe

    Ma question est donc: quand faut-il mettre des arguments et comment appeler la procédure avec des variables

    Merci de m'avoir consacré de votre temps

  2. #2
    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 677
    Points
    18 677
    Par défaut

    Bonjour, bonjour !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Message(SUJET$, VERBE$, COMP$, Optional TEMPS$)
        MsgBox SUJET & " " & VERBE & " " & COMP & " " & TEMPS
    End Sub
     
     
    Sub Demo()
        Message "Il", "fait", "beau", "aujourd'hui."
    End Sub
    _________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    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)

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonjour,

    lors de l'appel de ta procédure enlève les parenthèses..

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il y a deux manières d'appeler une procédure Sub ayant des paramètres
    Soit avec l'instruction Call, les parenthèses sont de rigueur pour passer les arguments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call Valeur(5, 20, 100, 40)
    Soit en appelant la procédure par son nom et là il ne faut pas de parenthèses
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 112
    Points : 98
    Points
    98
    Par défaut parmètres Procédure
    Ok merci pour l'appel de la procédure.
    Mais quels paramètres dois je mettre dans la définition de la procédure
    Ceci est il correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Sub Valeur(ByRef X As Integer, ByRef Y As Integer, ByRef i As Integer, ByRef j As Integer)
    If Not (X = 2 Or Y = 2) Then Score(i) = Score(i) + 1: Score(j) = Score(j) + 1
    End Sub
    ou aurais je du mettre le tableau Score aussi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub Valeur(ByRef X As Integer, ByRef Y As Integer, ByRef i As Integer, ByRef j As Integer,ParamArray Score() as Integer)
    If Not (X = 2 Or Y = 2) Then Score(i) = Score(i) + 1: Score(j) = Score(j) + 1
    End Sub
    ou rien du tout puisque les variables sont prises en compte malgré tout.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub Valeur()
    If Not (X = 2 Or Y = 2) Then Score(i) = Score(i) + 1: Score(j) = Score(j) + 1
    End Sub
    Quelle est la bonne syntaxe ?
    Merci

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Si tes variables sont "prises en compte", c'est qu'elles sont déclarées en tête du module concerné ou Public dans un autre module.
    Dans ce cas, il ne faut pas les passer en paramètres.

    En pratique,
    • si on veut écrire une routine ou fonction générique (réutilisable) sans devoir se soucier du nom des variables qu'elle traite, il vaut mieux faire un passage par paramètres.
    • si le passage par paramètres rend l'écriture du code complexe comme dans un appel de fonctions ou routines en cascade, il est parfois préférable de déclarer certaines variables au niveau Module ou Public.
      Cette dernière façon de faire rend tes routines moins génériques car dépendantes du nom de la ou des variable(s) à traiter.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2012
    Messages : 112
    Points : 98
    Points
    98
    Par défaut
    Merci à tous et en particulier à AlainTech

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

Discussions similaires

  1. [WD14] Paramètre procédure globale
    Par AUZUR dans le forum WinDev
    Réponses: 6
    Dernier message: 19/08/2009, 09h25
  2. [deb]Création procédure stockée[VS2008]
    Par noname_971 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 24/09/2008, 19h01
  3. Problème Paramètres procédure pl/sql
    Par tofke dans le forum PL/SQL
    Réponses: 4
    Dernier message: 12/07/2007, 15h41
  4. paramètre procédure stockée
    Par joe.lindien dans le forum Requêtes et SQL.
    Réponses: 19
    Dernier message: 20/04/2007, 12h43
  5. [SQLSERVER]Pb passage paramètre procédure stockée
    Par galinijay dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/08/2005, 11h59

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