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

Excel Discussion :

Empêcher macro enregistrement à l’ouverture de se répéter.


Sujet :

Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 70
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 42
    Points : 54
    Points
    54
    Par défaut Empêcher macro enregistrement à l’ouverture de se répéter.
    Empêcher macro enregistrement à l’ouverture de se répéter.

    Je m’explique j’ai une macro qui à l’ouverture d’un fichier « F1_Start » enregistre le nouveau fichier sous un nom prévu dans l’onglet « Code_Enr » en activant la macro « Enreg_Nom_Fichier » et supprime ensuite l’onglet « Code_enr ».
    ThisWorkbook =
    Private Sub Workbook_Open()
    Enreg_Nom_Fichier
    Depart_enr
    End Sub
    Macro =:
    Sub Enreg_Nom_Fichier()
    ' Enreg_Nom_Fichier Macro
    ''
    Sheets("Code_Enr").Select
    Range("K2").Select
    Selection.Copy
    Range("L2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Range("A1").Select
    ActiveSheet.SaveAs Filename:="H:\Assurance Qualite\Cuisson composites\Four_1\" & Range("L2").Value
    Sheets("Code_Enr").Select
    Application.DisplayAlerts = False
    ActiveWindow.SelectedSheets.Delete
    Application.DisplayAlerts = True
    Sheets("Four 1").Select
    Range("A2").Select
    ActiveWorkbook.Save
    End Sub
    Tout fonctionne très bien mais lorsque je veux ouvrir le fichier créer de cette façon la macro de démarrage se réactive et j’ai le message de débogage qui s’ouvre parce qu’il ne trouve pas l’onglet « Code_enr ». Comment puis-je empêcher la macro de s’exécuter plus d’une fois (à chaque ouverture).

    Merci de m'aider avec ce petit problème.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 54
    Points
    54
    Par défaut
    Bonsoir,

    il faut que tu testes la présence de la feuille "Code_Enr" avant de lancer ta procédure: Enreg_Nom_Fichier

    ++

    El_Titof

  3. #3
    Membre du Club
    Femme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 70
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 42
    Points : 54
    Points
    54
    Par défaut
    Je ne comprend pas ce que tu veux que je fasses, il faut dire que je suis novice en vba.
    Mais pour apporter un éclaircissement je veux empêcher le lancement de la macro "Enreg_Nom_Fichier"

    Alors si tu peux m'expliquer avec plus de détail je t'en serais reconnaissante.

    Merci

  4. #4
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 807
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 807
    Points : 32 105
    Points
    32 105
    Par défaut
    Trouvé sur ce site : un exemple de test d'existence d'un onglet

    donc, place ce code après le End Sub :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function WorkSheetExist(Sheetname as String) as boolean
        Dim i as integer
        WorkSheetExist = False
        For i = 1 To ThisWorkbook.Worksheets.Count
            If ThisWorkbook.Worksheets(i).Name = "Sheetname" Then
                'si elle est présente
                WorkSheetExist = True
                Exit For
            End If
        Next i
    End Function
    Et remplace ta sub par
    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
    Sub Enreg_Nom_Fichier()
        If WorkSheetExist("Code_Enr") Then
            Sheets("Code_Enr").Select
            Range("K2").Select
            Selection.Copy
            Range("L2").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            Range("A1").Select
            ActiveSheet.SaveAs Filename:="H:\Assurance Qualite\Cuisson composites\Four_1\" & Range("L2").Value
            Sheets("Code_Enr").Select
            Application.DisplayAlerts = False
            ActiveWindow.SelectedSheets.Delete
            Application.DisplayAlerts = True
            Sheets("Four 1").Select
            Range("A2").Select
            ActiveWorkbook.Save
        End If
    End Sub
    La fonction est réutilisable pour tout test de présence. Ici, tu rentres toujours dans ta macro, mais si l'onglet "Code_Enr" n'existe pas, alors la fonction renverra "False", et rien dans ton code ne sera executé. C'est comme si tu ne l'avais pas appelée.

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    pas besoin de boucler sur toutes les feuilles pour vérifier si une existe !

    Comme par exemple dans ce post


    Et mieux, directement via une fonction de feuille de calculs, si, si !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function ExistWorkSheet(FEUILLE) As Boolean
             ExistWorkSheet = Evaluate("ISREF(" & FEUILLE & "!A1)")
    End Function

    Et pour vérifier classeur & feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function ExistWorkbookSheet(CLASSEUR, FEUILLE) As Boolean
                              V = Evaluate("ISREF('[" & CLASSEUR & "]" & FEUILLE & "'!A1)")
             ExistWorkbookSheet = IIf(IsError(V), False, V)
    End Function
    Évidemment CLASSEUR comme FEUILLE représentent des noms …


    __________________________________________________________________________________________


    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …


  6. #6
    Membre du Club
    Femme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 70
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 42
    Points : 54
    Points
    54
    Par défaut
    Bonjour et merci à tous.
    J'ai, enfin je crois, bien suivi la procédure que vous m'avez décrite plus haut mais j'ai un message d'erreur lors de l'ouverture
    de mon fichier :
    "Erreur de compilation
    Dub ou Fonction non défini"
    et ensuite VBA m'amène à ma macro "Enr_Nom_Fichier" à If WorkSheetExist.

    Pour bien illustre mon erreur je joint une image de mon code.
    Nom : Codes.gif
Affichages : 768
Taille : 34,4 Ko


    Merci de me supporter dans mon apprentissage de VBA

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 33
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    il ne faut pas que tu modifie ce code:
    Citation Envoyé par Marc-L Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function ExistWorkSheet(FEUILLE) As Boolean
             ExistWorkSheet = Evaluate("ISREF(" & FEUILLE & "!A1)")
    End Function
    Tu as du avoir un message d'erreur du genre variable non déclaré car tu as mis 'Code_Enr' à la place de feuille

    Quand tu appelle ExistWorkSheet("Code_Enr") le nom de ta feuille est stocké dans la variable 'FEUILLE' qui réutiliser dans la fonction, donc ne modifie pas la fonction.

    ++

    El_Titof

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour !

    Mise à jour de la fonction ExistWorkSheet si le nom de la feuille comporte un ou plusieurs espaces …
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function ExistWorkSheet(FEUILLE) As Boolean
             ExistWorkSheet = Evaluate("ISREF('" & FEUILLE & "'!A1)")
    End Function
    Cette fonction prend donc en compte le classeur actif …

    Les espaces étaient déjà pris en compte pour vérifier classeur & feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function ExistWorkbookSheet(CLASSEUR, FEUILLE) As Boolean
                              V = Evaluate("ISREF('[" & CLASSEUR & "]" & FEUILLE & "'!A1)")
             ExistWorkbookSheet = IIf(IsError(V), False, V)
    End Function
    Rappel : CLASSEUR comme FEUILLE représentent des noms …

    __________________________________________________________________________________________


    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion


    __________________________________________________________________________________________
    Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour à tous,

    En plus tu as mis ta fonction dans ThisWorkbook et tu l'appelles d'un autre module.
    Pour pouvoir être appelée d'un autre module elle doit être dans un module standard (Module1 par exemple)

    eric

Discussions similaires

  1. Empêcher nouvel enregistrement au rafraichissement
    Par Stopher dans le forum Langage
    Réponses: 2
    Dernier message: 29/01/2007, 01h51
  2. une macro "enregistrer donnée en cours"
    Par copainvince dans le forum Access
    Réponses: 14
    Dernier message: 19/01/2007, 16h54
  3. Comment empécher l'enregistrement des images par le navigateur ?
    Par zouetchou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 15/08/2006, 23h14
  4. Réponses: 4
    Dernier message: 13/07/2006, 10h33
  5. Empêcher l'enregistrement d'une image
    Par Patrick Seuret dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 23/09/2005, 19h13

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