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 :

transférer des variables d'un sub à l'autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut transférer des variables d'un sub à l'autre
    J'ai le proplème du script erreur d'execution procédure trop longue
    Du coup j'utilise call monsub

    Le problème est que si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private monsub()
    mavariable =5
    end sub
     
    private subprincipale()
    call monsub
    if mavariable =5 then
    'transfert réussi
    else
    'transfert pas réussi
    end if
    end sub
    Dans tous les cas le transfert de la variable dans le subprincipale ne fonctionne pas. comment faire ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Où et comment est déclaré ta variable ?
    Est-ce un exemple ou le cas réel que tu nous proposes ?

    Starec

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut
    c'est un exemple Starec

    Le script est bien trop long c'est pour résumer mon problème
    Je déclare les variables dans les 2 subs concernés.

    Mais la condition ne se réalise pas

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Il faut déclarer tes variables en entête de module, avec la mention Public.

    Le mieux si tu récupères une donnée serait de transformer ta sub MonSub en fonction, ce qui te permettrait de la récupérer sans soucis, mais comme je ne sais pas ce que fais ta sub.

    Starec

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut
    merci starek

    Mon sub que j'appelle est une suite d'évènement de condition

    Si toutes les conditions se réalise alors je lui dis qu'une variable est égale à 5

    je vérifie dans le sub principale que la variable est égale à 5 afin que je vérifie toutes les conditions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public monsub()
    mavariable =5
    end sub
     
    Public subprincipale()
    call monsub
    if mavariable =5 then
    'transfert réussi
    else
    'transfert pas réussi
    end if
    end sub
    Ne marche pas mieux

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Je pense que tu n'as pas compris ce que je t'ai dit.

    En entête de module déclare
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public mavariable as Long
    et enlève les déclarations de mavariable dans tes subs.

    Starec

  7. #7
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut
    Désolé Starek je n'arrive pas a comprendre.
    Voici 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private Sub verification_final()
    Public correcte_finale_joueur1 As Long
    Public correcte_finale_joueur2 As Long
    'ajout du code
    If ((ThisWorkbook.Sheets(1).Cells(22, 6).Value = 3 Or ThisWorkbook.Sheets(1).Cells(22, 6).Value = 4) And (Cells(9, 24).Value = 1 Or Cells(9, 24).Value = 2)) Or ((ThisWorkbook.Sheets(1).Cells(22, 6).Value = 5 Or ThisWorkbook.Sheets(1).Cells(22, 6).Value = 6) And (Cells(9, 24).Value = 1 Or Cells(9, 24).Value = 2 Or Cells(9, 24).Value = 3 Or Cells(9, 24).Value = 4)) Then
        If Cells(9, 25).Value = "" Then
        joueur1_adversaire_match5 = MsgBox("Veuillez remplir l'adversaire du tour final de '" & Cells(9, 1).Value & "' '" & Cells(12, 1).Value & "'", 0 + 16, "Erreur")
        Else
            If Cells(9, 25).Value = Cells(9, 1).Value Then
            joueur1_adversaire2_match5 = MsgBox("L'adversaire du tour final de '" & Cells(9, 1).Value & "' '" & Cells(12, 1).Value & "' ne peut pas être '" & Cells(9, 25).Value & "'", 0 + 16, "Erreur")
            Else
                If Cells(10, 25).Value = "" Then
                joueur1_point_match5 = MsgBox("Veuillez remplir les points du tour final de '" & Cells(9, 1).Value & "' '" & Cells(12, 1).Value & "'", 0 + 16, "Erreur")
                Else
                    If Cells(10, 27).Value = "" Then
                    joueur1_reprise_match5 = MsgBox("Veuillez remplir les reprises du tour final de '" & Cells(9, 1).Value & "' '" & Cells(12, 1).Value & "'", 0 + 16, "Erreur")
                    Else
                        If Cells(13, 27).Value = "" Then
                        joueur1_serie_match5 = MsgBox("Veuillez remplir la meilleur série du tour final de '" & Cells(9, 1).Value & "' '" & Cells(12, 1).Value & "'", 0 + 16, "Erreur")
                        Else
                            If Cells(11, 26).Value = "" Then
                            joueur1_victoire_match5 = MsgBox("Veuillez remplir les chiffres de la victoire, défaite ou nul du tour final de '" & Cells(9, 1).Value & "' '" & Cells(12, 1).Value & "'", 0 + 16, "Erreur")
                            Else
                                correcte_finale_joueur1 = 5
                            End If
                        End If
                    End If
                End If
            End If
        End If
    Else
    correcte_finale_joueur1 = 5
    End If
    If correcte_finale_joueur1 = 5 Then
        If ((ThisWorkbook.Sheets(1).Cells(22, 6).Value = 3 Or ThisWorkbook.Sheets(1).Cells(22, 6).Value = 4) And (Cells(14, 24).Value = 1 Or Cells(14, 24).Value = 2)) Or ((ThisWorkbook.Sheets(1).Cells(22, 6).Value = 5 Or ThisWorkbook.Sheets(1).Cells(22, 6).Value = 6) And (Cells(14, 24).Value = 1 Or Cells(14, 24).Value = 2 Or Cells(14, 24).Value = 3 Or Cells(14, 24).Value = 4)) Then
            If Cells(14, 25).Value = "" Then
            joueur1_adversaire_match5 = MsgBox("Veuillez remplir l'adversaire du tour final de '" & Cells(14, 1).Value & "' '" & Cells(17, 1).Value & "'", 0 + 16, "Erreur")
            Else
                If Cells(14, 25).Value = Cells(14, 1).Value Then
                joueur1_adversaire2_match5 = MsgBox("L'adversaire du tour final de '" & Cells(14, 1).Value & "' '" & Cells(17, 1).Value & "' ne peut pas être '" & Cells(14, 25).Value & "'", 0 + 16, "Erreur")
                Else
                    If Cells(15, 25).Value = "" Then
                    joueur1_point_match5 = MsgBox("Veuillez remplir les points du tour final de '" & Cells(14, 1).Value & "' '" & Cells(17, 1).Value & "'", 0 + 16, "Erreur")
                    Else
                        If Cells(15, 27).Value = "" Then
                        joueur1_reprise_match5 = MsgBox("Veuillez remplir les reprises du tour final de '" & Cells(14, 1).Value & "' '" & Cells(17, 1).Value & "'", 0 + 16, "Erreur")
                        Else
                            If Cells(18, 27).Value = "" Then
                            joueur1_serie_match5 = MsgBox("Veuillez remplir la meilleur série du tour final de '" & Cells(14, 1).Value & "' '" & Cells(17, 1).Value & "'", 0 + 16, "Erreur")
                            Else
                                If Cells(16, 26).Value = "" Then
                                joueur1_victoire_match5 = MsgBox("Veuillez remplir les chiffres de la victoire, défaite ou nul du tour final de '" & Cells(17, 1).Value & "' '" & Cells(12, 1).Value & "'", 0 + 16, "Erreur")
                                Else
                                    correcte_finale_joueur2 = 5
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        Else
            correcte_finale_joueur2 = 5
        End If
    End If
    End Sub
    Le sub me met une erreur de compilation
    Attribut incorrecte dans un sub ou function

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 354
    Par défaut
    Comme le dit fort justement starec
    Tes déclarations de variables public doivent être faites avant le début de ta sub().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public correcte_finale_joueur1 As Long
    Public correcte_finale_joueur2 As Long
     
    Private Sub verification_final()
    'ton code ...
    End Sub

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ajouterai : en début de module donc avant toutes les "Sub" d'un module.

  10. #10
    Membre confirmé Avatar de mat-tech
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 202
    Par défaut
    Bonjour,

    Comme le dit Starec, en dehors du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private Sub verification_final()
    Tu dois déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public mavariable as Long
    De cette facon la variable est public à tous les Sub(), tu ne dois donc plus la redéclarer !

  11. #11
    Invité
    Invité(e)
    Par défaut
    En effet Mat_tech, mais c'est ce que Trust avait déjà écrit !

  12. #12
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Par défaut
    Merci à tous
    mon problème est résolu

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

Discussions similaires

  1. transférer des variables d'une feuille à une autre
    Par canary dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/03/2009, 22h15
  2. passage des variables d'une classe à une autre
    Par zibou7 dans le forum Langage
    Réponses: 4
    Dernier message: 19/02/2007, 16h46
  3. Réponses: 3
    Dernier message: 13/04/2006, 13h57
  4. Transférer des données d'une table à une autre
    Par picoloto dans le forum Langage SQL
    Réponses: 8
    Dernier message: 20/12/2005, 10h01
  5. TRansférer des données d'une table à l'autre
    Par kernel57 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 06/10/2005, 14h05

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