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 :

Problème variable public [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Problème variable public
    Bonjour a tous,

    Voila je suis confronté a un problème avec des variables qui ne suivent pas le mouvement... Un petit morceau de code vous éclaireront mieux que de nombreuses lignes de ma part

    Code du fichier x, que l'utilisateur ouvre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public version As Double
    Public dossier As String
    Sub verif()
     
    version = 1
    dossier = Workbooks(1).Path
     
    Workbooks.Open Filename:="XXX\Liste PG Info.xls"
        Application.Run "'Liste PG Info.xls'!auto_pasopen"
     
    End Sub
    Ceci est dans le programme x, a l'ouverture on vérifie que l'utilisateur a la dernière version du programme.

    Code dans le fichier Liste PG Info :
    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
    Sub auto_pasopen()
     
    mauvaise = "Votre version n'est plus d'actualité ! Veuillez recopier le derniere version du programme qui se trouve dans le répertoire suivant : " & dossier & "."
    pastrouve = "Programme non réferencé ! Veuillez en informer le service informatique."
    fichier = Workbooks(1).Name
     
    trouve = False
    y = 4
     
    Do While Cells(y, 1) <> ""
        If Cells(y, 1).Value = fichier Then
            If Cells(y, 2) = Version Then
                Exit Do
                trouve = True
            End If
            If Cells(y, 2) > Version Then
                MsgBox (mauvaise)
                Application.Quit
            End If
        End If
    y = y + 1
    Loop
     
    If trouve = False Then
        MsgBox (pastrouve)
    End If
     
    Workbooks("Liste PG Info.xls").Close False
     
    End Sub
    Les variables version et dossier apparaissent comme vide ... J'ai un peu de mal et je dois déployer ce morceau de macro sur un certain nombre de programme :/

    Merci d'avance de votre aide.

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    La portée de la variable "Public" se limite au projet du classeur concerné.
    Pour passer ces variables à un autre classeur, passe les en paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub verif()
    Dim Version As Double, Dossier As String
     
    Version = 1
    Dossier = Workbooks(1).Path
     
    Workbooks.Open Filename:="XXX\Liste PG Info.xls"
        Application.Run "'Liste PG Info.xls'!auto_pasopen", Version, Dossier
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub auto_pasopen(Version As Double, Dossier As String)
    '...
    '...
    '...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Merci fring, je pensais justement que comme c'est deux fichiers différents il fallait les passer en public.
    Ne travaillant pas demain je ne pourrais qu'essayer ça jeudi, je passerais donc ce sujet en résolu ce jour si tout va bien.
    Sinon je ne suis pas un expert en vba, que penses-tu de mon code, au niveau de la syntaxe utilisée, "propreté" etc ?

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 2
    Points : 5
    Points
    5
    Par défaut
    En effet, les variables publics se limitent au projet.
    En passant en variable tu n'auras pas de problème !

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par nonohzx Voir le message
    Sinon je ne suis pas un expert en vba, que penses-tu de mon code, au niveau de la syntaxe utilisée, "propreté" etc ?
    Quelques petits détails :
    • je ne travaillerais pas avec l'index du classeur Workbooks(1) parce que si le classeur en question n'est pas le premier ouvert ça risque de coincer, utilise plutôt Workbooks("NomDuClasseur") ou ThisWorkbook si il s'agit du classeur contenant la macro
    • s'appliquer à déclarer toutes les variables (mauvaise, pastrouve, fichier, y)


    En y regardant de plus près, toute la procédure pourrait se trouver dans le classeur X que l'utilisateur ouvre, ce qui donnerait :
    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
    Sub verif()
    Dim Version As Double, Dossier As String, Fichier As String
    Dim Mauvaise As String, PasTrouve As String, Trouve As Boolean, y As Integer
    Dim Wbk As Workbook
     
    Version = 1
    With Workbooks(1) '<-- à adapter
        Dossier = .Path
        Fichier = .Name
    End With
    Mauvaise = "Votre version n'est plus d'actualité ! Veuillez recopier le derniere version du programme qui se trouve dans le répertoire suivant : " & Dossier
    PasTrouve = "Programme non réferencé ! Veuillez en informer le service informatique."
    Trouve = False
    y = 4
     
    'on peut figer l'écran pour masquer l'ouverture du classeur "Liste PG Info"
    Application.ScreenUpdating = False
     
    'ouverture du classeur "Liste PG Info" et affectation de ce classeur à la variable Wbk
    Set Wbk = Workbooks.Open("XXX\Liste PG Info.xls")
     
    With Wbk.Sheets(1) '<-- feuille à adapter si ce n'est pas la première feuille
        Do While .Cells(y, 1) <> ""
            If .Cells(y, 1).Value = Fichier Then
                If .Cells(y, 2) = Version Then
                    Trouve = True
                    Exit Do
                ElseIf .Cells(y, 2) > Version Then
                    MsgBox Mauvaise, vbCritical
                    Application.Quit
                End If
            End If
            y = y + 1
        Loop
        If Trouve = False Then MsgBox PasTrouve, vbExclamation
        Wbk.Close False
    End With
     
    Set Wbk = Nothing '<-- libération de la mémoire
    Application.ScreenUpdating = True '<-- réactivation de l'écran
     
    End Sub

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Fring,
    J'avais l'intention de nommer le classeur au lieu de laisser WorkBooks(1), mais comme j'avais déjà un problème avec 2 variables je voulais pas en ajouter une troisième. L'idée de tout faire dans le premier programme est excellente, pourquoi faire compliqué quand on peut faire simple ..
    Tes conseils m'ont bien aider et ta macro (comme prévu) fonctionne parfaitement, je te remercie beaucoup.
    Je remercie aussi briceap
    Forum toujours aussi rapide et agréable c'est un plaisir
    passage du sujet en résolu.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Réouverture du sujet :/ il y a quelque chose de bizarre ...
    Revoici le code pour se remettre dans le bain, j'ai apporté quelques modifs :
    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
    Sub verif()
    '*** Déclaration des variables
    Dim Version As Double, Dossier As String, Fichier As String
    Dim Mauvaise As String, PasTrouve As String, Trouve As Boolean, y As Integer
    Dim Wbk As Workbook
    '***
     
     
    Version = 1 '<-- A changer a chaque modification meme mineur du programme
     
    'With ThisWorkbook '<-- Récupération du chemin et du nom du programme
        'Dossier = .Path
        'Fichier = .Name
    'End With
     
    Dossier = "J:\P09-Gestion des systemes d'information\BAO" '<-- Dossier fixé a la racine de la BAO
    Fichier = "XXX" '<-- Nom du programme initial
     
    Application.StatusBar = "Vérification de la version en cours"
    Mauvaise = "Votre version n'est plus d'actualité ! Veuillez recopier la dernière version du programme qui se trouve dans le répertoire suivant : " & Dossier
    PasTrouve = "Programme non réferencé ! Veuillez en informer le service informatique."
    Trouve = False
    y = 3
     
    'Masquer l'ouverture du classeur "Liste PG Info"
    Application.ScreenUpdating = False
     
    'Ouverture du classeur "Liste PG Info" et affectation de ce classeur à la variable Wbk
    Set Wbk = Workbooks.Open("J:\P09-Gestion des systemes d'information\BAO\Liste PG Info.xls")
     
    With Wbk.Sheets(1)
        Do While .Cells(y, 1) <> ""
            If .Cells(y, 1).Value = Fichier Then
                If .Cells(y, 2) = Version Then
                    Trouve = True
                    Exit Do
                ElseIf .Cells(y, 2) > Version Then
                    MsgBox Mauvaise, vbCritical
                    Application.Quit
                End If
            End If
            y = y + 1
        Loop
        If Trouve = False Then MsgBox PasTrouve, vbExclamation
        Wbk.Close False
    End With
     
    Set Wbk = Nothing '<-- libération de la mémoire
    Application.StatusBar = False
    Application.ScreenUpdating = True '<-- réactivation de l'écran
     
    End Sub
    Maintenant place au problème lorsque je lance le programme, en sachant que la version est inférieure a la version actuelle, le message enregistré dans la variable mauvaise devrait alors s'afficher en vb critical et excel devrait se fermer, sauf que le c'est pas du tout ce qui se passe... le message mauvaise apparait puis le message PasTrouvé puis l'input box de la suite du programme, d'ailleurs peu importe ce qu'on l'on renseigne on a une erreur et enfin en fesant soit fin ou débogage a la suite de cette erreur le programme se ferme...
    Par contre quand on lance le programme en pas a pas, il fonctionne parfaitement bien comme si le programme allait trop vite et zappait le application.quit pour l’exécuter plus tard.

    L'un de vous aurait-il une solution ? :/
    Merci d'avance

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

Discussions similaires

  1. [AC-2003] problème variable public
    Par le méruvien dans le forum Access
    Réponses: 3
    Dernier message: 14/01/2014, 15h26
  2. [XL-2010] Problème Variable Public d'un Userform vers un Module
    Par MEUCORACAO dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/04/2013, 14h45
  3. Problème de variable Public
    Par tornade69 dans le forum VB.NET
    Réponses: 4
    Dernier message: 14/07/2009, 15h05
  4. Problème variable public vba
    Par benoi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/12/2008, 12h06
  5. Problème avec variable public
    Par Mchupakabra dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 20/04/2008, 21h40

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