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 :

Impossibilité d'utiliser une procédure à 2 arguments


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Par défaut Impossibilité d'utiliser une procédure à 2 arguments
    Bonjour tout le monde,

    Je n'arrive pas dans mon code à appeler une procédure à 2 arguments.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub go()
     
    copydata(PAP, occurrencecopydataPAP)
     
    End Sub
    Lors de la compilation, excel me répond "erreur de compilation : erreur de syntaxe" en surlignant la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copydata(PAP, occurrencecopydataPAP)
    Voici l'entete de la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub copydata(ByVal text As String, ByRef u As Long)
    Dans mon code, occurrencecopydataPAP est une variable déclarée en début de module donc global et de type Long.

    Par ailleurs, alors que je codais cette fonction, il est arrivé à plusieurs reprises, sans que je comprenne pk, qu'excel me renvoit un message d'erreur en soulignant la même ligne et en disant :
    "erreur de compilation
    := attendu"

    Je ne vois pas vraiment mon erreur, un pb de syntaxe apparemment. Merci pour votre aide

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Pour mettre les paramètres entre parenthèses lors de l'appel d'une procédure SUB, il faut utiliser l'instruction CALL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call copydata(PAP, occurrencecopydataPAP)
    Sinon enlève les parenthèses.

  3. #3
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Deux choses.
    1- Si votre variable est déclarée en "Global", pourquoi la passer en paramètre de votre fonction?
    C'est inutile.
    2- Qu'est ce que PAP?
    Une variable? => si oui déclarée As What?
    Un String? => Si oui, il manque les guillemets : "PAP"

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Par défaut
    Donc si j'ai bien compris DocMarti, les 2 écritures suivantes sont équivalentes et juste ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    copydata PAP, occurrencecopydataPAP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call copydata(PAP, occurrencecopydataPAP)
    Merci pour le rappel du call, je l'oublie tout le temps.

    Pijaku, tu soulèves un point intéressant.

    1- Si votre variable est déclarée en "Global", pourquoi la passer en paramètre de votre fonction?
    C'est inutile.
    En fait, la procédure copydata va être appliqué 10 fois en tout ! Donc plutot que d'écrire le code 10 fois, je préfère appeler 10 fois la procédure. Mais du coup j'ai besoin de 2 arguments en entrée, un string (par exemple PAP, HS, INMUNOLOGICAS etc... => ce sont des termes médicaux certes, mais ce sont surtout des strings) et une variable globale 'occurrencecopydataPAP'. Remarquons déjà que cette variable global sera assigné à un string particulier (par ex, occurrencecopydataPAP avec PAP, occurrencecopydataHS avec HS etc...). Pk global ? Car à chaque appel de la procédure pour un string donné, je souhaite incrémenter la variable associée ! D'où la nécessité d'utiliser une variable global qui par ailleurs est un argument de la procédure. Pijaku, es-tu d'accord ou il y a t-il mieux à faire selon toi ?

    D'ou ta seconde question :
    2- Qu'est ce que PAP?
    Une variable? => si oui déclarée As What?
    Un String? => Si oui, il manque les guillemets : "PAP"
    C'est un string, j'avais effectivement oublié les guillemets


    Question subsidiaire concernant les strings : est-ce que "DOSIS (12/cs)" peut-être considéré comme un string ?

    Merci à vous deux !!!

  5. #5
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par forum2015 Voir le message
    Car à chaque appel de la procédure pour un string donné, je souhaite incrémenter la variable associée ! D'où la nécessité d'utiliser une variable global qui par ailleurs est un argument de la procédure. Pijaku, es-tu d'accord ou il y a t-il mieux à faire selon toi ?
    As tu essayé ton code sans la passer en paramètre de ta fonction? Elle va s'incrémenter de toutes manière puisque globale. Essaye...
    Question subsidiaire concernant les strings : est-ce que "DOSIS (12/cs)" peut-être considéré comme un string ?
    Il ne faut pas confondre String et "mot" ou "phrase"... Un String est une chaine de caractères...
    Donc "DOSIS (12/cs)", tout comme "§µ$£^:a 78*+", tout comme "bachibouzouk" ou "123456" sont des String.
    Le truc, c'est les guillemets...

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Par défaut
    As tu essayé ton code sans la passer en paramètre de ta fonction? Elle va s'incrémenter de toutes manière puisque globale
    En fait non car dans ma procédure, la variable n'est pas définie explicitement. Autrement dit, je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedureenquestion(text As String, u As Integer)
     
    'code.....
     
    u = u+1
     
    'code suite...
     
    End Sub
    et quand j'appelerai ma procédure, il faut que je mette ma variable globale en paramètre pour qu'il sache qu'elle variable incrémenter. Sinon, il ne sais pas quelle variable globale incrémenté (pourquoi incrémenter occurrencecopydataPAP et pas occurrencecopydataHAP ou encore occurrencecopydataAMI par ex).

    Une autre solution serait sinon d'utiliser un if dans la procédure qui en fonction du string mis en argument, incrémente la bonne variable globale. Et alors, plus besoin de la mettre en argument de la procédure. Tu en penses quoi ? Sachant que j'ai 25 variables globales (donc 25 appel de fonction), je sais que je peux utiliser case et if. Je ne sais jamais lequel utilisé. J'ai cru comprendre que les performances sont assez similaires, seulement que le code est souvent plus lisible avec case. Est-ce le cas ou il y a t-il qq chose qui justifierai le choix de l'un devant l'autre ?

    Merci pour tout en tout cas, je vais tester sa !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/04/2009, 16h31
  2. Réponses: 2
    Dernier message: 23/09/2008, 17h16
  3. Utiliser une procédure stockée Oracle
    Par jsd03 dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 18/08/2008, 16h45
  4. [Divers] Peut-on utiliser une procédure stockée dans Crystal ?
    Par noumian dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 19/06/2008, 21h50
  5. Utiliser une procédure stockée dnas Framework C8
    Par Darcynette dans le forum Cognos
    Réponses: 4
    Dernier message: 14/12/2007, 19h22

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