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 :

Deuxième argument non accepté dans ma sub "Erreur Attendu :=" [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut Deuxième argument non accepté dans ma sub "Erreur Attendu :="
    Bonjour à tous et à toutes,

    Alors j'ai une première Sub à tester qui prend un seul argument, la sub fonctionne très bien.
    Je voulais partir de la même sub et ajouter un deuxième argument, et je me fais jeter par l'interpréteur avec une erreur "Attendu :=" , alors même que le corps de la routine est strictement inchangé, je me suis seulement contenté d'ajouter un deuxième argument à ma sub

    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
    Public TABSSDB() As Variant
    Public Sub atester(col)
      Set mondico = CreateObject("Scripting.Dictionary")
      Set mondico2 = CreateObject("Scripting.Dictionary")
      Set wsess = Sheets("EMPLOIS")
     
      For Each c In wsess.Range(wsess.Cells(2, col), wsess.Cells(200000, col).End(xlUp))
         If Not mondico.Exists(c.Value) Then
            mondico.Add c.Value, c.Value
          End If
      Next c
      ReDim TABSSDB(mondico.Count)
      For Each c In wsess.Range(wsess.Cells(2, col), wsess.Cells(200000, col).End(xlUp))
          If Not mondico2.Exists(c.Value) Then
            mondico2.Add c.Value, c.Value
            TABSSDB(mondico2.Count) = c.Value
          End If
      Next c
    End Sub
     Public Sub atester_2(col_1 As Integer, col_2 As Integer)
     
      Set mondico3 = CreateObject("Scripting.Dictionary")
      Set mondico4 = CreateObject("Scripting.Dictionary")
      Set wsess = Sheets("EMPLOIS")
     
      For Each c In wsess.Range(wsess.Cells(2, col_1), wsess.Cells(200000, col_1).End(xlUp))
         If Not mondico3.Exists(c.Value) Then
            mondico3.Add c.Value, c.Value
          End If
      Next c
      ReDim TABSSDB(mondico3.Count)
      For Each c In wsess.Range(wsess.Cells(2, col_1), wsess.Cells(200000, col_1).End(xlUp))
          If Not mondico4.Exists(c.Value) Then
            mondico4.Add c.Value, c.Value
            TABSSDB(mondico4.Count) = c.Value
          End If
      Next c
     
    End Sub

    du coup bon un petit coup de pouce pour m'aider à comprendre cette erreur déroutante, que je ne m'attendais pas à rencontrer à ce stade


    merci bcp
    Gorz

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 3 453
    Points : 6 858
    Points
    6 858
    Par défaut
    Bonjour,

    As-tu séparé les arguments par une virgule ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    atester_2 valeur1, valeur2

  3. #3
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut
    oui dans ma fenêtre execution j'appelle

    par exemple

    c'est vraiment exactement le même bout de code dans la routine, en plus mis à part que dico 1 et 2 deviennent 3 et 4, c'est vraiment juste la première ligne de la sub, où l'on définit les paramètres d'entrée qui change, qui passe de 1 à 2 arguments... bref je suis perplexe

    EDIT: je viens de réessayer en écrivant atester_2 1, 2 au lieu de atester_2(1,2) comme tu m'as suggéré effectivement ça marche

    si tu as une explication je suis preneur parce que là...

  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
    10 521
    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 : 10 521
    Points : 24 978
    Points
    24 978
    Billets dans le blog
    29
    Par défaut
    Bonjour,
    Il y a deux manières d'appeler une procédure Sub.
    Prenons comme exemple l'appel à la procédure ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub AfficheNomPrenom(Nom As String, Prenom As String)
      MsgBox Nom & " " & Prenom
    End Sub
    Il y a deux syntaxes possibles
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AfficheNomPrenom "Einstein", "Albert"
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call AfficheNomPrenom("Einstein", "Albert")
    Pour les procédures Function trois syntaxes possibles (les deux premières utilisées comme un sub, la troisième utilisée comme une fonction en récupérant la valeur renvoyée
    1. Call MsgBox("Ceci est un test", vbInformation, "Test")
    2. MsgBox "Ceci est un test", vbInformation, "Test"
    3. response = MsgBox("Ceci est un test", vbInformation + vbYesNo, "Test")
    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
    Ma dernière contribution : VBA - Les macros complémentaires

  5. #5
    Membre habitué
    Profil pro
    Collégien
    Inscrit en
    janvier 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2008
    Messages : 263
    Points : 157
    Points
    157
    Par défaut
    j'entends bien mais du coup dans mon cas de figure c'est étrange que la syntaxe sans parenthèse fonctionne mais pas la synthaxe avec parenthèse...
    celà dit tant que ça marche d'une façon ou d'une autre, mais j'aime bien comprendre...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 2 256
    Points : 4 948
    Points
    4 948
    Par défaut
    Bonjour

    Citation Envoyé par Gorzyne Voir le message
    j'entends bien mais du coup dans mon cas de figure c'est étrange que la syntaxe sans parenthèse fonctionne mais pas la synthaxe avec parenthèse...
    celà dit tant que ça marche d'une façon ou d'une autre, mais j'aime bien comprendre...
    Comme t'a dit Philippe () c'est une règle de syntaxe !
    Il n'y a rien à comprendre :c'est comme ça.

    On peut résumer :
    - quand la sub ou la fonction sont appelées directement : pas de parenthèses,
    - quand on utilise Call ou quand on affecte la fonction à une variable : parenthèses obligatoires
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/04/2009, 14h34
  2. Argument non facultatif Dans un INSERT
    Par le_dilem dans le forum VBA Access
    Réponses: 15
    Dernier message: 09/03/2009, 17h15
  3. [MySQL] argument non valide dans une requete mysql
    Par rinuom99 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/10/2008, 13h53
  4. nombre d'argument non specifie dans une fonction
    Par elmcherqui dans le forum C++
    Réponses: 2
    Dernier message: 27/05/2008, 19h10

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