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 :

fonction a plusieurs arguments.


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut fonction a plusieurs arguments.
    Bonjour à tous ,

    j'ai créé une fonction qui permet d'insérer une formule dans une cellule dont la position est déterminée par une variable et dont la plage de calcul dépend aussi de variables.
    Mais j'ai un soucis: "Erreur de compilation:erreur de syntaxe"

    Voici la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub f(q As Integer, i As Integer, k As Integer)
    a=2
    While Sheets("feuil3").Cells(q, a).Value <> ""
    Sheets("feuil3").Cells(q + 1, a).FormulaR1C1 = "=i-SUM(R" & q + 2 & "C" & a &_
    ":R" & q + 3 + k & "C" & a & ")"
    a=a+1
    wend
    Ensuite j'appelle cette fonction dans le corps de mon programme comme suit:

    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
    Sub calcul_effectif()
     
    Dim i As Integer 
    Dim k As Integer 
    Dim x As Integer 
    Dim y As Integer 
    Dim z As Integer 
     
    i = 9
    k = 14
    x = 7
    y = 37
    z = 66
     
    f (x,i,k)
    f (y,i,k)
    f (z,i,k)
     
    end sub
    Les variables i,k,x,y,z seront fixes pour l'exemple mais a terme elles seront renseignées par une user forme dont les valeurs seront modifiables.

    En fait ma fonction ne renvoie pas de valeur a proprement parlé donc je me demande si je n'ai pas tout faux?!

    Si vous avez une idée c'est avec plaisir
    Merci par avance.

    M.A.S

  2. #2
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    j'ai testé de mon côté, et ça marche avec les changements suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub f(q As Integer, i As Integer, k As Integer)
    a = 2
    While Sheets("feuil3").Cells(q, a).Value <> ""
        Sheets("feuil3").Cells(q + 1, a).FormulaR1C1 = "=" & i & "-SUM(R" & q + 2 & "C" & a & _
                                                            ":R" & q + 3 + k & "C" & a & ")"
        a = a + 1
    Wend
     
    End Sub
    (j'ai sorti la variable i de la chaine de caractères qui constitue la formule)

    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
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim k As Integer
    Dim x As Integer
    Dim y As Integer
    Dim z As Integer
     
    i = 9
    k = 14
    x = 7
    y = 37
    z = 66
     
    Module1.f x, i, k
    Module1.f y, i, k
    Module1.f z, i, k
     
    End Sub
    Bon, pour le coup j'ai mis dans un Module1 la Sub de départ, mais ça change rien si elle n'y est pas, faudra juste enlever "Module1."
    Par contre, j'ai supprimé les parenthèses pour les arguments
    Moi, j'aime pas facebook.

    Musiciens de France

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    it works !

    Merci c'est génial ca marche à 90%
    J'ai des questions:
    1- J'ai tout mis dans ma "feuil3", quel serait la différence si je mettais la fonction dans le "module1" ?
    2- Une question toute bête pourquoi enlevé les "()" lors de l'appel de la fonction?
    3- En quoi sortir la variable "i" fait la différence?
    4- Excel VBA est très bizarre j'ai écrit sans faire exprès :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("feuil3").Cells(q + 1, a).FormulaR1C1 = " = " & i & "-SUM(....
    en mettant des espaces avant et après le 2ème symbole "=" et il m'affiche le résultat dans ma cellule avec un "=" devant le résultat.... bizarre non ? (en enlevant ces espaces ça fonctionne bien...)
    5- En fait le corps de mon appel plusieurs fois la fonction :
    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
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim k As Integer
    Dim x As Integer
    Dim y As Integer
    Dim z As Integer
     
    i = 9
    k = 14
    x = 7
    y = 37
    z = 66
     
    f x, i, k
    f y, i, k
    f z, i, k
     
    End Sub
    et là l'exécution s'arrête au premier appel de fonction il ne fait pas
    Y a t il quelque chose à rajouter?

    Ouf voilà pour les question

    Merci encore pour vos réponses!

    M.A.S

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    1- J'ai tout mis dans ma "feuil3", quel serait la différence si je mettais la fonction dans le "module1" ?
    C'est ce qui est fait par commodore, d'ou la notation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Module1.f x, i, k
    Module1.f y, i, k
    Module1.f z, i, k

    3- En quoi sortir la variable "i" fait la différence?
    Si tu le laisses dans le String, il est pris comme texte ("i") tandis que si tu fais string + i + string tu as sa valeur.

    4- Excel VBA est très bizarre j'ai écrit sans faire exprès :
    Code :
    Sheets("feuil3").Cells(q + 1, a).FormulaR1C1 = " = " & i & "-SUM(....
    en mettant des espaces avant et après le 2ème symbole "=" et il m'affiche le résultat dans ma cellule avec un "=" devant le résultat.... bizarre non ? (en enlevant ces espaces ça fonctionne bien...)
    C'est logique car une formule ne commence pas par une espace mais plutot par = ou +. Si cela commence par un espace, il traite en string.

    et là l'exécution s'arrête au premier appel de fonction il ne fait pas
    Code :
    f y, i, k
    f z, i, k
    Qu'est ce qui te fait dire cela ? Il plante ou tu penses que... ?
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Citation:
    1- J'ai tout mis dans ma "feuil3", quelle serait la différence si je mettais la fonction dans le "module1" ?
    C'est ce qui est fait par commodore, d'ou la notation
    J'ai bien vu que c'était ce qu'avait fait commodore... seulement je me demandais si cela avait un avantage de la faire dans module plutôt que dans la feuille ?

    2- Une question toute bête pourquoi enlever les "()" lors de l'appel de la fonction?
    Dans quel cas mettons les "'()" pour un appel de fonction dans quel autre ne les mettons pas ?
    La question tient toujours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Citation:
    3- En quoi sortir la variable "i" fait la différence?
    Si tu le laisses dans le String, il est pris comme texte ("i") tandis que si tu fais string + i + string tu as sa valeur.
    Oki merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Citation:
    4- Excel VBA est très bizarre j'ai écrit sans faire exprès :
    Code :
    Sheets("feuil3").Cells(q + 1, a).FormulaR1C1 = " = " & i & "-SUM(....
    en mettant des espaces avant et après le 2ème symbole "=" et il m'affiche le résultat dans ma cellule avec un "=" devant le résultat.... bizarre non ? (en enlevant ces espaces ça fonctionne bien...)
    C'est logique car une formule ne commence pas par une espace mais plutot par = ou +. Si cela commence par un espace, il traite en string.
    Ce n'est pas ce que je voulais dire, il fait l'opération et affiche le résultat mais il rajoute un "=" devant. ex: pour une somme de la cellule A1=1 et B1=2, il va noter dans C1 non pas" =SUM(A1;B1)" mais "=3" ... ma question était jute de la curiosité mais elle tient toujours

    Pour ma question 5 j'allais éditer pour la supprimer, c'est moi qui avait craqué

    En tout cas merci de vos efforts pour m'expliquer

    M.A.S

  6. #6
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    1- J'ai tout mis dans ma "feuil3", quel serait la différence si je mettais la fonction dans le "module1" ? c'est une question de propreté de code, mais pas obligatoire. Certains mettront tout dans la procédure évènementielle, et c'est respectable, d'autres, comme moi, feront apparitre l'algo au travers des noms des fonctions et procédures appelées.

    2- Une question toute bête pourquoi enlevé les "()" lors de l'appel de la fonction?
    Les mystères syntaxiques de VBA
    Moi, j'aime pas facebook.

    Musiciens de France

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Citation Envoyé par Commodore Voir le message
    2- Une question toute bête pourquoi enlevé les "()" lors de l'appel de la fonction?
    Les mystères syntaxiques de VBA

    Pourquoi ?
    Ah...
    Tout simplement parce que ce qui est qualifié ici de fonction n'est finalement qu'une routine (à remplacer avantageusement par une Sub)... puisqu'aucune valeur n'est retournée ...
    les () servent précisément à indiquer qu'on se réfère à la valeur retournée (absente ici !) ...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Ok tout s'éclaire !

    Merci à tous pour votre aide

    M.A.S

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

Discussions similaires

  1. error 2064 / fonction a plusieurs arguments
    Par tom250908 dans le forum Débuter
    Réponses: 4
    Dernier message: 30/01/2013, 16h40
  2. [Prototype] Ajax.Request et onSuccess : appel de fonction avec plusieurs arguments
    Par gregbond dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 18/10/2012, 17h00
  3. passer plusieurs argument à une fonction callback
    Par Z-fly dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 04/07/2008, 18h05
  4. Réponses: 2
    Dernier message: 23/05/2008, 18h45
  5. Réponses: 3
    Dernier message: 25/07/2006, 09h25

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