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 :

VBA: Cacher/Afficher une feuille en fonction d'un userform [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Janvier 2016
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Janvier 2016
    Messages : 72
    Points : 41
    Points
    41
    Par défaut VBA: Cacher/Afficher une feuille en fonction d'un userform
    Bonjour à tous ,

    J'aurais besoin d'aide concernant un petit problème de programmation en VBA. J'ai compris l'erreur de mon fichier mais ne trouve pas de solutions.

    Voici le fonctionnement de mon fichier :

    Je dispose d'un fichier EXCEL composé de 2 feuilles de base ("TBR","Checklist") et d'un userform lui-même composé de 3 boutons (ajouter, effacer, quitter).

    Lorsque j'ouvre mon fichier EXCEL ou que j'appuie sur un bouton "+" le userform apparait.

    A partir du moment où mon userform est ouvert je créer une nouvelle checklist à partir de ma feuille de base "Checklist" et je l'ajoute par incrémentation dans ma feuille "TBR" en cliquant sur le bouton ajouter de mon userform.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Ajouter_Click()
     
       Sheets("Checklist").Copy After:=Sheets(Sheets.Count) 'copie la checklist vierge remplie dans le userform et la colle à la dernière feuille du classeur
       ActiveSheet.Name = PN.Value
       Sheets("TBR").[B1].Value = ActiveSheet.Name
       Sheets("Checklist").Select
       ActiveWindow.SelectedSheets.Visible = False
     
    End Sub
    Ce que j'aimerais, c'est qu'à l'aide de mon bouton ajouter de mon userform je puisse ajouter autant de nouvelle checklist que je souhaite.
    Le problème est que j'ai fait en sorte de cacher la feuille de base "Checklist" (qui permet de créer les nouvelles checklists) à chaque clique du bouton "ajouter" pour éviter toutes modifications de la part d'un utilisateur de ma feuille de base.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Ajouter()
     
        If Création.Visible = False Then
            Sheets("Checklist").Visible = True
            Création.Show
        End If
     
    End Sub
    De ce fait je ne peux créer qu'une seule checklist à la fois car la ligne Sheets ("Checklist").select de mon premier code est en erreur si je clique une seconde fois sur le bouton ajouter vu que ma feuille de base "Checklist" ne redevient pas visible après avoir cliqué sur le bouton ajouter.

    Ma première idée était de faire une boucle avec un do while mais je n'ai pas réussi.

    J'espère avoir été assez claire... Avez-vous une idée, des pistes d'actions?

    Merci d'avance à ceux qui répondront à cette discussion

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Points : 172
    Points
    172
    Par défaut
    Bonjour Aurelu.

    Pour éviter tout problèmes, il vaut mieux éviter les .Select.
    Tu peux aisément écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Checklist").Visible = False
    Dans ton premier code, ce qui éviter de la sélectionner.

  3. #3
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Pas sûr d'avoir bien compris... Essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Ajouter_Click()
    Dim NF As Variant 'déclare la variable NF (Nombre de Feuilles)
    Dim C As Byte 'déclare la variable C (Compteur)
     
    NF = Application.InputBox("Combien de feuilles faut-il créer ?", "AJOUT", Type:=1) 'définit la boîte d'entrée NF
    If NF = False Or NF = 0 Then Exit Sub 'si bouton "Annuler" ou si NF = 0, sort de la procédure
    For C = 1 To NF 'boucle de 1 à NF
        Sheets("Checklist").Copy After:=Sheets(Sheets.Count) 'copie la checklist vierge remplie dans le userform et la colle à la dernière feuille du classeur
        ActiveSheet.Name = PN.Value & "_" & C
        Sheets("TBR").[B1].Value = ActiveSheet.Name
    Next C 'prochaine valeur de la boucle
    Sheets("Checklist").Visible = False
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  4. #4
    Membre du Club
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Janvier 2016
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Janvier 2016
    Messages : 72
    Points : 41
    Points
    41
    Par défaut
    Merci pour vos aides et conseils . J'ai réussi à résoudre mon problème après plusieurs relecture. J'ai juste supprimer une ligne de mon ancien code et rajouter des lignes de codes pour initialiser mon userform pour chaque utilisation de celui-ci.

    Je mets mon code au cas où ça puisse servir à quelqu'un.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Ajouter_Click()
     
        Sheets("Checklist").Copy After:=Sheets(Sheets.Count) 'copie la checklist vierge remplie dans le userform et la colle à la dernière feuille du classeur
        ActiveSheet.Name = PN.Value
        Sheets("TBR").[B1].Value = ActiveSheet.Name
        Worksheets("Checklist").Range("C2").ClearContents
        Worksheets("Checklist").Range("C3").ClearContents
        Worksheets("Checklist").Range("B3").ClearContents
        Worksheets("Checklist").Range("E2").ClearContents
        Moment.Value = ""
        Choix_Change
        Choix.Value = ""
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Quitter_Click()
        Création.Hide 'quitte le userform
        Sheets("Checklist").Visible = False
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Initialize()
        Choix_Change
        Choix.Value = ""
        PN.Value = ""
        Designation.Value = ""
        Nom.Value = ""
        Moment.Value = ""
    End Sub
    Une bonne journée à vous

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    histoire de..., 1ère procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Ajouter_Click()
     
    With Sheets("Checklist")
      .Copy After:=Sheets(Sheets.Count) 'copie la checklist vierge remplie dans le userform et la colle à la dernière feuille du classeur
      ActiveSheet.Name = PN.Value
      Sheets("TBR").[B1].Value = ActiveSheet.Name
      Union(.Range("B3"), .Range("C2:C3"), .Range("E2")).ClearContents
      Moment.Value = ""
      Choix_Change
      Choix.Value = ""
    End With
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

Discussions similaires

  1. [XL-2013] XL 2016 - Macro pour cacher/afficher une feuille
    Par Citrax dans le forum Excel
    Réponses: 2
    Dernier message: 03/12/2015, 18h01
  2. Réponses: 5
    Dernier message: 31/03/2010, 13h20
  3. [VBA-E] Afficher une feuille excel pour la modifier
    Par z980x dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/05/2006, 22h21
  4. [VBA-E] controle pour afficher une feuille excel
    Par SpaceFrog dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/02/2006, 11h17
  5. [VBA] Copie d'une feuille (avec graphique)
    Par ed_dexia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/10/2005, 09h56

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