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 :

Déclarer une variable dans une macro et l'appeler dans une autre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Par défaut Déclarer une variable dans une macro et l'appeler dans une autre
    Bonjour à tous ;

    J'ai un souci avec ma macro , en fait je déclare des variables avec les numéros des colonnes dont j'ai besoin dans un macro A par contre j'utilise cette variable dans un macro B que j'appel dans ma première macro A et ça ne marche pas quand je fais ça !!
    PS: je suis débutante Voilà ma macro A

    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
    SUb A()
     
    If Sheets("RECAP").Range("AW7").Value <> "0" And Sheets("RECAP").Range("AW12").Value = "" Then
    Dim i As Integer
    i = 49
    Sheets("BL1").Visible = True
    Sheets("BL1").Activate
    Call B
    Sheets("RECAP").Range("AW12").Value = "BL Généré"
    Sheets("RECAP").Range("AW29").Value = "BL Généré"
    Sheets("BL1").Protect
    Sheets("BL1").Activate
    End If
     
    Sub B()
    Dim FeuillePrecedente As String
    FeuillePrecedente = ActiveSheet.Name
     
    Dim ligneA As Long
    ligneA = Sheets(FeuillePrecedente).Range("C47").End(xlUp).Row + 2
     
    If Sheets("RECAP").Cells(24, i).Value <> "0" Then
    Sheets("RECAP").Cells(24, i).Copy
    ligneA = Sheets(FeuillePrecedente).Range("B51").End(xlUp).Row + 2
    Sheets(FeuillePrecedente).Cells(ligneA, 2).PasteSpecial Paste:=xlPasteValues
     
    end sub
    en fait j'ai 10 onglets et j'ai voulu adapter la macro B à tous les onglets
    Voilà c'est une partie des macros pour vous expliquer la situation.


    Merci d'avance pour votre aides !

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Par défaut
    Bonjour AMY974,
    tu as deux possibilités je pense,

    1. soit ta variable i tu la déclares en global (global i as Integer par exemple), tu pourras t'en servir dans ta macro B

    2. soit ta macro B tu la lances avec un ou plusieurs paramètres obligatoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub B (toto As Integer)
    ' tu te sers de la variable toto qui aura la valeur du paramètre appelé
    End sub
    et dans la macro A tu appelles la macro B avec le paramètre adéquat, i vraisemblablement Call B(i).
    ce qui implique que ta macro B va se lancer après ta macro A, en utilisant une variable calculée par la macro A.

    J’espère que cela t'aidera.

    Foxi

  3. #3
    Nouveau candidat au Club
    Inscrit en
    Juillet 2002
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 2
    Par défaut
    Bonjour,

    Peut-être peux tu passer dans ta macro B des variable en input :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sub B(val1 as string, Val2 as integer, …)
    Comme ça tu pourrais passer en autre le nom de ta feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          Sub B(NomFeuille as string)
                Shette(NomFeuille).Visible = True
                Sheets(Nomfeuille).Activate
    Si tu veux retourner une valeur de la fonction B dans le code de la fonction A tu peux remplacer le mot sub par function avec une affectation de ta valeur dans une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sub a()
      dim retour as string
     
      retour = b()
     
    end sub
     
    function b() as string
      b ="variable de retour"
    end function
    dernier points va voir les instanciation des variable en utilisant byref ou byval.

    Personnellement je séparerait les action sur chacune des feuille :
    - dans la fonction A les actions concernant la feuille RECAP
    - dans la fonction B les actions concernant la feuille B1.

    J'espère que ces pistes t'aideront dans ton développement.

  4. #4
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Par défaut
    Merci pour vos réponses .

    J'ai utilisé la 2éme solution de foxicolix est ça été simple, efficace et rapide .

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

Discussions similaires

  1. [MySQL] Des variables de champ dans du texte lui meme appelé d'une variable de champ
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/05/2017, 21h11
  2. [Toutes versions] Selection d'une variable via Radiobouton afin de l'inclure dans une macro
    Par Tomz57 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/04/2015, 16h56
  3. Réponses: 6
    Dernier message: 18/04/2007, 11h47
  4. Réponses: 1
    Dernier message: 27/02/2007, 11h28
  5. Réponses: 6
    Dernier message: 18/01/2007, 10h24

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