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 :

fermer des feuilles copiées en VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut fermer des feuilles copiées en VBA
    Bonjour,

    Je suis en train de créer un formulaire. Dans ce formulaire, lorsque je coche une case,une feuille excel s'ouvre et lorsque je la décoche, celle-ci se masque. Lorsque je clique sur une autre case, la même feuille est copiée. Le tout est programmé en VBA et fonctionne bien.

    J'aimerai svoir s'il y a un moyen de faire en sorte que lorsque je décoche la case de la feuille originale, les feuilles copiées se masquent elles aussi.

    J'ai pensé à créer les situations suivantes, mais je ne suis pas certain:

    1)Est-ce que je passe par le formulaire en utilisant la case_Click() ou si je devrais me faire une fonction à part?

    2) Est-ce préférable de créer un tableau à une dimension qui compte le nombre de copie et qui ferme exactement le même nombre de feuilles?

    Ou y a-t-il un moyen plus rapide, plus efficace ou plus simple?
    Merci

  2. #2
    Membre chevronné Avatar de jackborogar
    Homme Profil pro
    Etudiant Ingénierie Financière
    Inscrit en
    Avril 2012
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingénierie Financière
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 290
    Par défaut
    Bonjour,

    Dans ton case_Click(), marque ce code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For i = 1 To 3 Step 1
     
     
    Sheets("Feuil1").Copy after:=Sheets(Sheets.Count)
     
     
    ActiveSheet.Name = "newfeuille" & i
     
    Sheets("newfeuille" & i).Visible = False
     
     
    Next i
    Ce que j'ai fait est que j'ai créer (je sais pas cb tu en veux) trois copies de ta feuille. Je l'ai nomme puis "Sheets("newfeuille" & i).Visible = False" les masques.


    J'espère t'avoir aidé,

    Cdt,

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut
    Bonjour,

    Merci pour le code ça m'a avancé un peu. Toutefois, le code ne masque pas les onglets copiés. Voici ce que j'ai fait.

    Aussi, je me demandais s'il y avait moyen de remplacer le nombre 3 par une variable correspondant au nombre de click. (Il me semble que je pourrais mettre For 1 to coipe_feuille). Je pense que la difficulté vient du fait que les onglets doivent etre visible ou non selon si la case est cochée ou non.


    Je te remercie pour ton code il a fonctionné à merveille!

    Voici ce que j'ai tenté de faire:
    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
    Private Sub copie_feuille_click()
    Dim i As Integer
     
        For i = 1 To 3
     
            Sheets("feuille").Copy Before:=Sheets(Sheets.Count)
            ActiveSheet.Name = "feuille" & i
     
            If case_feuille= False Then
                Sheets("feuille" & i).Visible = False
            Else
                Sheets("feuille" & i).Visible = True
            End If
        Next i
    End Sub

    Merci!

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,

    cela ressemble à une erreur sur tes variables ... il est impératif de rajouter la ligne

    Option Explicit

    en haut de toutes tes pages de codes...

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Je n'ai pas vraiment suivi la discussion mais une chose m'étonne.
    Pourquoi se compliquer la vie avec un IF.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If case_feuille= False Then
       Sheets("feuille" & i).Visible = False
     Else
       Sheets("feuille" & i).Visible = True
    End If
    Alors que ce serait plus simple comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("feuille" & i).Visible = case_feuille
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut
    Bonjour à tous,

    Premièrement, merci d'avoir pris le temps de me répondre, sachez que c'est très apprécié!

    @bbil: ne t'inquitès pas j'utilise toujours "option explicit" par précaution

    Grâce à tous vos commentaires, j'ai résussi à faire quelque chose qui fonctionne c'est peut-être un peu complexe, mais comme le tout fonctionne, je le laisserai comme ça.

    Je vous montre ce que j'ai fait en gros au cas où vous ou un futur lecteur aurait ce problème.

    La première procédure est une case à cocher dans un userformpour afficher la feuille 1. Alors que la seconde est un bouton à cliquer dans ce même userform pour copier la feuille 1.


    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 case_feuille1_click()
    Dim i As Integer
     
     If case_feuille1 = True Then
        Worksheets("feuille1").Visible = True
        Else
                Worksheets("feuille1").Visible = False
         For i = 1 To 3
                Sheets("feuille1" & i).Visible = False
         Next i
     End If
     
    End 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
    Private Sub copie_feuille1_click()
    Dim i As Integer
     
     
            For i = 1 To 3
              If case_feuille1 = True Then
                Sheets("feuille1").Copy Before:=Sheets("feuille A")
                ActiveSheet.Name = "feuille 1" & i
                Sheets("feuille 1" & i).Visible = True
     
              End If
            Next i
     
    End Sub
    J'ai une derrnière question, je me demande comment faire pour que dans la seconde procédure, je puisse remplacer le nombre 3 par le nombre de click sur le bouton. Si j'enlèvais le "For i=1 to 3", je crois que cela fonctionnerai, mais je ne suis pas certain que cela sera efficace puisque je renomme les onglets avec le For.

    Merci

  7. #7
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu peux utiliser le compteur de feuilles pour le nommage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub copie_feuille1_click()
    Dim i As Integer
        If case_feuille1 = True Then
            i = Worksheets.Count
            Sheets("feuille1").Copy Before:=Sheets("feuille A")
            ActiveSheet.Name = "feuille " & 10 + i
            Sheets("feuille " & 10 + i).Visible = True
        End If
    End Sub
    Cordialement.

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par stag_ing Voir le message
    Bonjour à tous,

    ...
    @bbil: ne t'inquitès pas j'utilise toujours "option explicit" par précaution
    ...
    Et bien si tu l'utilisais .. tu aurais du avoir une erreur sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If case_feuille= False Then
    ou il manque un 1 ... case_feuille1

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut
    C'est parce que j'utilise feuille ou feuille 1 dans le forum, mais mon programme contient des noms de variable significatifs, c'est pourquoi je n'avais pas de problème de option explicit.

    Merci quand même de l'avoir signalé, cela aurait effectivement pu être une erreur!

  10. #10
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut
    En fait, maintenant il ne me reste qu'à faire en sorte que mes fonctions prennent en compte le fait qu'il existe ou non une feuille copiée. En ce moment, si je n'ai pas copié de feuille, le programme ne s'exécute pas.

    J'ai tenté d'attribuer à ma feuille une variable (feuille_copie=Sheets("Feuille1"))
    feuille_copie étant une variable de type variant et d'utiliser If IsMissing(feuille_copie)...

    Cependant, cela ne fonctionne pas. Quelqu'un aurait-il un tuyau?
    Merci!

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

    Informations professionnelles :
    Activité : Engineering

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

    C'est un peu nébuleux mais si j'ai bien compris ce que tu cherches à faire, je procéderais comme ceci :

    Aux indices des feuilles copiées, j'ajouterais un "-" ce qui permet de mieux manipuler leurs noms par la suite. Ce qui donnera Feuil1 (feuille originale), Feuil1-1 (1ère copie), Feuil1-2 (2ème copie), Feuil1-3 (3ème copie), etc...
    A chaque nouvelle copie (à chaque click sur le bouton) il suffira de compter combien de feuilles comporte "Feuil1" dans leur nom en délimitant le nom de la feuille au "-" via la fonction Split (ce qui évitera les problèmes de confusion avec les feuilles Feuil11, Feuil111, etc...)

    En clair...cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub copie_feuille()
    Dim i As Byte, n As Byte, Sh As Worksheet
     
    Set Sh = Sheets("Feuil1") '<-- feuille originale
     
    For i = 1 To Sheets.Count
        If Split(Sheets(i).Name, "-")(0) = Sh.Name Then n = n + 1
    Next
     
    Sh.Copy Before:=Sheets(Sheets.Count)
    ActiveSheet.Name = Sh.Name & "-" & n
    Set Sh = Nothing
    End Sub
    Ensuite pour afficher ou masquer la feuille originale et toutes ses copies en un click, on utilise le même procédé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub masquer_feuille()
    Dim i As Byte, Sh As Worksheet
     
    Set Sh = Sheets("Feuil1") '<-- feuille originale
     
    For i = 1 To Sheets.Count
        If Split(Sheets(i).Name, "-")(0) = Sh.Name Then Sheets(i).Visible = False '<-- True pour rendre visible
    Next
    Set Sh = Nothing
    End Sub

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Par défaut
    C'est en plein ce qu'il me manquait!!!
    Merci le tout fonctionne maintenant

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

Discussions similaires

  1. [XL-2010] Proteger des feuilles excel en vba
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/06/2015, 14h50
  2. Réponses: 12
    Dernier message: 09/01/2014, 15h45
  3. [VBA] Dissocier des feuilles Excel avec VBA
    Par lezinve dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2006, 16h30
  4. [VBA-E] Lancement de la macro avant l'ouverture des feuilles
    Par repié dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/02/2006, 16h07
  5. [VBA] [Excel] Selection des feuilles
    Par KOFJCH dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/12/2005, 18h18

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