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 :

Portée de variables [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut Portée de variables
    Bonjour,

    Développeur VBA en herbe, j'ai un probléme de portée de variable que je n'arrive pas à solutionner.
    J'ai un classeur avec 4 onglets , les onglets 2,3 et 4 étant calculés à partir du premier.
    J'ai prévu une sauvegarde automatique qui gére la duplication et la suppression des feuilles si modification.
    A l'ouverture du classeur, je fais une copie de l'onglet 1 avec une macro "Sub Workbook_Open()"
    Lors d'une modification sur le premier onglet et sur lui seulement, j'ai une macro "Sub Worksheet_Change(ByVal Target As Range)" qui m’incrémente une variable "Modif".
    Je ne sais pas comment déclarer cette variable "Modif" pour qu'une macro "Sub Workbook_BeforeClose(Cancel As Boolean)" gére la sauvegarde de l'onglet 1 (suppression de l'ancienne sauvegarde et renommage de la copie si la variable Modif > 0 ou suppression de la copie de l'onglet 1 si la variable Modif =0.
    J'espére avoir été assez clair dans mon explication.
    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    salut,
    dans un MODULE
    tu déclares
    si tu as déclaré Modif ailleurs (dim Modif ) il faut supprimer cette déclaration
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Bonjour,

    Aprés lecture de tous les tutos que j'ai sur la portée des variables, j'en avait conclu que ça devrait marcher avec comme tu me l'indiques.
    Mais malheureusement ça ne marche pas.
    J'ai confirmé en mettant des un peu partout.
    J'ai volontairement désactivé les fonctions de désactivation de l'écran et d'alertes pour le débuguage
    Voila ce que j'ai comme code dans mon classeur:
    Worbook:
    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
    Public Modif As Integer
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    MsgBox (Modif)
    'Action avant fermeture
    MsgBox ("Before close" & Modif)
    'Vérification si modification du fichier
    If Modif > 0 Then
        'Désactive les messages d'avertissement et l'écran
        'Application.DisplayAlerts = False
        'ScreenUpdate = False
        'Duplication "Old data
        Sheets("Old data").Select
        Sheets("Old data").Copy After:=Sheets(5)
        'Suppression "Very old data"
        Sheets("Very old data").Delete
        'Renomme "Old data (2) en "Very old data"
        Sheets("Old data (2)").Select
        Sheets("Old data (2)").Name = "Very old data"
        'Copie "Training_data_base" en feuille 4, supprime "Old data" et renomme "Training_data_base (2)" en "Old data"
        'Suppression "Very old data
        Sheets("Old data").Select
        Sheets("Old data").Delete
        'Renomme "Training data base(2) en "Old data"
        Sheets("Training_data_base (2)").Select
        Sheets("Training_data_base (2)").Name = "Old data"
        Sheets("Training_data_base").Select
    Else
        Sheets("Training_data_base (2)").Select
        Sheets("Training_data_base (2)").Delete
    'Réactive les messages d'avertissement et l'écran
    Application.DisplayAlerts = True
    ScreenUpdate = True
    End If
    End Sub
     
    Private Sub Workbook_Open()
    'Action à l'ouverture
    MsgBox "Modif = " & Modif & Chr(13) & "Ne pas supprimer de ligne sur la feuille Training_Data_base." & Chr(13) & "Si besoin, vider les cellules." & Chr(13) & "Insérer des lignes en bas de chaque << Class >> pour un nouveau training dans cette << Class >>." & Chr(13) & "Mise à jour manuelle des autres feuilles par JPB"
    'Désactive les messages d'avertissement et l'écran
        'Application.DisplayAlerts = False
        'ScreenUpdate = False
    'Duplication de Training Data Base
    Sheets("Training_data_base").Select
    Sheets("Training_data_base").Copy After:=Sheets(4)
    Sheets("Training_data_base").Select
    'Réactive les messages d'avertissement et l'écran
    Application.DisplayAlerts = True
    ScreenUpdate = True
    End Sub
    Sur l'onglet à surveiller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox (Modif)
    'Action si modification
    Modif = Modif + 1
    MsgBox (Modif)
    End Sub
    Merci de ton aide

  4. #4
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    dans un MODULE
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 8
    Par défaut
    Bonjour,

    Oupssss!
    Un module n'est pas une partie de code d'un objet!
    Je suis un boulet!
    Je viens de rajouter un module avec l'instruction et bien évidemment ça marche.

    Merci beaucoup.

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

Discussions similaires

  1. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  2. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  3. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  4. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05
  5. [FLASH MX 2004][XML]portée de variable
    Par marco_ dans le forum Flash
    Réponses: 8
    Dernier message: 29/04/2004, 15h47

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