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 :

creation fonction appelant divers userform et géré par une variable [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 143
    Par défaut creation fonction appelant divers userform et géré par une variable
    Bonjour à tous,

    Je créé régulièrement des fonctions pour les taches répétitives dans mes programmes.
    Je m'en suis sorti jusqu'à vouloir créer cette fonction.
    ci dessous le code inséré dans le programme que je veux mettre dans une fonction car je l'utilise 15 à 20 fois à la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'SAISIE 6CU PR6
        If Sheets("tab_calc_coll").Range("D34").Value = 0 Then
            With calculcoll.result_6cu_pr6
                .Caption = "PR6 : 0 mètre"
                .ForeColor = &HFFFFFF
                .BackColor = &HFF&
            End With
        Else
            With calculcoll.result_6cu_pr6
                .Caption = "PR6 : " & Sheets("tab_calc_coll").Range("D34").Value & " mètres"
                .ForeColor = &H0&
                .BackColor = &HC0FFC0
            End With
        End If
    pour cet exemple les variables sont :
    2ieme ligne "d34" et 10ième ligne "d34" appelé lign
    3ieme ligne ".result_6cu_pr6" et 9iéme ligne "result_6cu_pr6" appelé cellule
    4iéme ligne "pr6" et 10ième ligne "pr6" variable appelé pr

    et cela donnerai ceci pour moi :
    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
    function saisicab (lign,cellule,pr)
     
        If Sheets("tab_calc_coll").Range(lign).Value = 0 Then
            With calculcoll.(cellule)
                .Caption = pr & " : 0 mètre"
                .ForeColor = &HFFFFFF
                .BackColor = &HFF&
            End With
        Else
            With calculcoll.(cellule)
                .Caption = pr & " : " & Sheets("tab_calc_coll").Range(lign).Value & " mètres"
                .ForeColor = &H0&
                .BackColor = &HC0FFC0
            End With
        End If
    end function
    Cette fonction ne renvoie pas de résultat mais elle se chargera de la mise en forme de plusieurs LABEL dans un userform.

    Le problème que vous trouverez de suite est la variable cellule qui enregistre le nom du label. Effectivement vba ne reconnaît pas ceci !!! J'ai essayé plusieurs solutions sans y arriver.
    j'ai essayé même de mettre en variable l'appel de l'userform jusqu'à la propriété sans plus de succés.
    Je reconnais que je maîtrise très mal les variable de type objet appelant des fonctions spéciales!!!!:
    Je pense que s'il y a solution, elle doit être dans ce type de variable !!!!

    Pouvez vous m'aider ?

    JE VOUS EN REMERCIE PAR AVANCE

  2. #2
    Expert confirmé
    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
    Par défaut
    Bonsoir,

    Une fonction n'exécute pas d'action (à quelques détails près) mais retourne une valeur donc, tu dois utiliser une Sub. Alors, je ne suis pas sûr d'avoir tout compris mais teste déjà ceci pour voir (je suis parti du princique que "calculcoll" est ta Form) :
    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
     
    Sub saisicab(lign As String, cellule As String, pr As String)
     
        If Sheets("tab_calc_coll").Range(lign).Value = 0 Then
     
            With calculcoll.Controls(cellule)
     
                .Caption = pr & " : 0 mètre"
                .ForeColor = &HFFFFFF
                .BackColor = &HFF&
     
            End With
     
        Else
     
            With calculcoll.Controls(cellule)
     
                .Caption = pr & " : " & Sheets("tab_calc_coll").Range(lign).Value & " mètres"
                .ForeColor = &H0&
                .BackColor = &HC0FFC0
     
            End With
     
        End If
     
    End Sub
    Hervé.

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 143
    Par défaut
    bonsoir,



    tu m'en apprends une là !!!! je suis vraiment un débutant encore !!!!!


    je pensais qu'on pouvais faire ce genre de chose qu'avec des fonctions.

    tu as raison pour le nom du form !!!
    je teste et je reviens

    a de suite

    j ai créé cette sub exécuté depuis le form calculcoll :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub g()
    Dim a As String
     
     a = saisicab("k34", "result_6cu_pr6", "pr6")
     
    End Sub
    J'obtient le message :

    erreur de compilation : Fonction ou variable attendue

    apparemment la sub est reconnue à l'écriture du code puisque intuitivement il me montrer les 3 paramètres mais l'appel ne fonctionne pas.

    Juste une info l'exécution de mise en forme s'éxécute alors que le form est ouvert. Je modifie la présentation de l'userform. Je sais pas si cela peut t'aider !!!

    Par contre, si au lieu de créer sub, je créé function cela fonctionne.
    Ton sujet m'intèresse ? Peux tu approfondir ?

    Merci pour ton aide

    d'autre part, avez vous un tutoriel qui m'aiderait à comprendre :

    que tu m'as inséré dans le code!!

    L'aide excel est vraiment très vaste et j'ai du mal à trouver quelque chose dans les tutoriels

  4. #4
    Expert confirmé
    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
    Par défaut
    Bonjour,

    Une sub exécute des actions mais ne retourne pas de valeur donc ceci ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a = saisicab("k34", "result_6cu_pr6", "pr6")
    il te faut l'utiliser de cette façon sans demander une valeur en retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    saisicab "k34", "result_6cu_pr6", "pr6"
    Tu peux avoir une valeur en retour dans une sub mais en passant une variable en argument qui sera modifiée dans le code de la sub car par défaut dans VB les arguments sont passés par référence. Un petit exemple :
    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
     
    Sub Test()
     
        Dim Variable As String
     
        MaProc "Silve", Variable
     
        MsgBox Variable
     
    End Sub
     
    Sub MaProc(Nom As String, Prenom As String)
     
        If Nom = "Silve" Then
     
            Prenom = "Hervé"
     
        Else
     
            Prenom = "Le nom ne correspond pas !"
     
        End If
     
    End Sub
    Apparement, "result_6cu_pr6" est le nom du label et comme tu passe un String et nom un objet, il faut utiliser la propriété "Controls" pour que le compilateur sache à quoi il doit faire référence.

    Hervé.

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 143
    Par défaut EXCELLENT
    Bonsoir,

    excellent cela fonctionne, effectivement n'ayant pas besoin d'une donnée en retour j'ai pas besoin de parenthèse.

    Merci pour cette aide précieuse.

    Merci pour l'explication sur .controls


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

Discussions similaires

  1. [E-03] Creation fonction appelant vlookup
    Par thetacos21 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 24/02/2009, 15h26
  2. Réponses: 11
    Dernier message: 19/07/2007, 11h56
  3. Réponses: 3
    Dernier message: 24/01/2006, 12h27
  4. VBA Excel : Appel d'un userform à l'aide d'une variable
    Par pierrot657 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 02/06/2005, 00h08
  5. Fonction qui transforme chaine de caractère par une autre?
    Par geoffreykill dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 09/12/2004, 15h31

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