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 :

Transformer procédure en Fonction [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut Transformer procédure en Fonction
    Bonjour le Forum,

    Je me retrouve à nouveau confronté à un petit souci, je vous explique:

    j'ai 3 sub:
    - Sub1
    - Sub2
    - Sub3

    et la 4ème à faire évoluer (Sub4)

    voici mon code de la Sub4:
    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
    Sub Recherche()
     
    Dim c As Range, Plage As Range
    Dim Mot As String, cmpt As Byte
    Dim MotsRecherches As Variant
    Dim I As Integer
    Dim ShCible As Worksheet
    Dim LigneFeuilleCible As Long
     
            ' Feuille cible
            Set ShCible = Sheets("Feuille1")
     
            LigneFeuilleCible = ShCible.Cells(ShCible.Rows.Count, 2).End(xlUp).Row + 1
            MotsRecherches = Array("Mot1", "Mot2", "Mot3", "Mot4", "Mot5", "Mot6")
     
            'Feuille cible
            Set Plage = Sheets("Feuille5").UsedRange
     
            With ShCible
                 For I = LBound(MotsRecherches, 1) To UBound(MotsRecherches, 1)
                     Set c = Plage.Find(What:=MotsRecherches(I), LookAt:=xlPart)  
                     If Not c Is Nothing Then
     
                        .Cells(LigneFeuilleCible, 2) = MotsRecherches(I)
     
                        Exit For
                     End If
                     Set c = Nothing
                 Next I
             End With
     
         Set Plage = Nothing
         Set ShCible = Nothing
     
    End Sub
    Ce que je souhaite faire est de faire évoluer ceci en Feuille2 ou Feuille3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' Feuille cible
            Set ShCible = Sheets("Feuille1")
    En gros si Sub1 actif alors Feuille1
    si Sub2 actif alors Feuille2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' Feuille cible
            Set ShCible = Sheets("Feuille2")
    si Sub3 actif alors Feuille3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ' Feuille cible
            Set ShCible = Sheets("Feuille3")
    Pour info, j'active les Sub1,2 et 3 dans un userform grâce à 3 optionbutton, mais le Sub4 se trouve dans un module à part de celui de Usf

    Merci d'avance

    Seb

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Si j'ai bien compris votre demande, il faut exécuter une routine en fonction de celle qui l'appelle
    Donc, vous pouvez juste passer votre 'Sub4' en fonction et passer la feuille en paramètre ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ShCible = Sheets(SheetName)
    et bien sur, vous le spécifier dans la routine appelante du style
    Call Function_ExSub4("Feuille1")

    Bonne continuation

  3. #3
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut Transformer Sub en Fonction
    Re et bonjour Vinc_Bilb,

    Merci pour ton intéressement,

    Je m'en doutais qu'il fallait passer mon Sub4 en fonction

    Hors, je n'ai jamais fait cela sauf pour de simple fonction

    Je ne vois pas par quoi commencer, voici un essai:

    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
    Private Function Recherche()
     
    Dim c As Range, Plage As Range
    Dim Mot As String, cmpt As Byte
    Dim MotsRecherches As Variant
    Dim I As Integer
    Dim ShCible As Worksheet
    Dim LigneFeuilleCible As Long
     
            ' Feuille cible
            Set ShCible = Sheets(sheetName)
     
            LigneFeuilleCible = ShCible.Cells(ShCible.Rows.Count, 2).End(xlUp).Row + 1
            MotsRecherches = Array("Mot1", "Mot2", "Mot3", "Mot4", "Mot5", "Mot6")
     
            'Feuille cible
            Set Plage = Sheets("Feuille5").UsedRange
     
            With ShCible
                 For I = LBound(MotsRecherches, 1) To UBound(MotsRecherches, 1)
                     Set c = Plage.Find(What:=MotsRecherches(I), LookAt:=xlPart)  
                     If Not c Is Nothing Then
     
                        .Cells(LigneFeuilleCible, 2) = MotsRecherches(I)
     
                        Exit For
                     End If
                     Set c = Nothing
                 Next I
             End With
     
         Set Plage = Nothing
         Set ShCible = Nothing
     
    End Function
    J'imagine que la dedans, il faut que je déclare les feuilles entre parenthèse
    Merci encore

    Seb

  4. #4
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Bonjour le forum, et bonjour Vinc,

    On dit que la nuit porte conseil.....

    Pourrais-tu me dire à quoi correspond ceci?
    Le "sheetname", cela veut dire "nom de feuille", mais pas quoi je remplace cela?

    dans ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Function Recherche()
    Entre-parenthèse, il faut que je déclare les feuilles j'imagine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Feuille1 as worksheet, Feuille2 as worksheet, etc...)
    Enfin comme tu peux le voir, je patauge.....

    Merci de pour tes futurs conseils

    Seb

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Une fonction ça retourne quelque chose!
    Alors que la tu ne retourne rien!
    Sub Recherche(feuille as string).
    Et tu l'appel Recherche "feuill1"

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, est-ce que cela éclaircira la situation, à lire et assimiler : Les fonctions personnelles dans Excel

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

Discussions similaires

  1. Procédure et fonction : les différences et les usages de chacune ?
    Par cpattin dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 06/08/2007, 00h28
  2. procédure ou fonction stockée qui retourne un résultat
    Par PoichOU dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 28/05/2007, 16h03
  3. Réponses: 3
    Dernier message: 22/03/2006, 15h38
  4. Mysql5: différences entre procédures et fonctions
    Par El Riiico dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 25/11/2005, 05h43
  5. Réponses: 5
    Dernier message: 14/10/2005, 12h11

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