Comment exploiter des données sur une feuille masquée

Salut le forum

Je souhaite masquer certaines des feuilles d'un de mes fichiers.

J'ai des inquiétudes sur la possibilité de pouvoir exploiter les données contenues dans ces feuilles.

Est-il possible de pouvoir exploiter les données d'une feuille masquée comme une feuille non masquée?

Pour être précis, une macro dont l'objet est de copier des données d'une feuille vers une autre peut-elle bien fonctionner si les données à copier sont sur la feuille protégée?

Sinon y'a t-il une possibilité de pouvoir le faire quand bien la feuille est masquée?

Merci à tous

Bonjour,

Drôle de question.. Fais l'essai et tu verras bien par toi-même

A+

Salut lermite

A part l'erreur comise dans la question ci-dessous, je ne pense pas que ce soit drole.

zombe a écrit :

Pour être précis, une macro dont l'objet est de copier des données d'une feuille vers une autre peut-elle bien fonctionner si les données à copier sont sur la feuille protégée?

Je voulais dire masquée et non protégée. Je pense qsue l'idée générale y était : j'ai des données à exploiter dans une feuille masquée et je souhaite connaitre les limite liées au masquage de la feuille et les solutions éventuelles si je souhaite que le feuille soit masquée.

Merci

Je réitère ma réponse du poste précédant... Tu fais un test !!

Si tu comprend pas, un exemple

Ouvrir Nouveau classeur

Mettre une valeur dans la feuille2 en A1

Mettre le code ci-dessous dans un module et le lancer,

Sub TestFeuilleCachée()
    Sheets("Feuil2").Visible = False
    Sheets("Feuil1").[A1] = Sheets("Feuil2").[A1]
End Sub

Si protégée !! faut alors ajouter la déprotection avec UnProtect.

Ça répond à ta question ?

A+

Salut lermite et le forum

Merci pour votre réponse.

J'ai un cas réel qui doit fonctionner comme suit :

Les éléments à copier se trouvent dans la feuille PARAMETRE.

Cette feuille est protégée et masquée.

Avec le code ci-dessous, j'arrive à ôter le masque, la protection et la copie des éléments vers la destination indiquée.

Le problème que je rencontre est le suivant :

après la copie, la protection de la feuille devrait être selon moi automatique mais c'est pas le cas.

Est-ce une erreur de mon code et comment la rectifier?

Aussi je souhaite que la feuille PARAMETRE soit masquée après l'opération c'est à dire qu'après avoir collée les données de la feuille parametre dans la feuille STATBS tout devrait se réinitialé (feuille parametre protégée et masquée comme avant l'exécution).

Dim a, b, d, e, f, g As String

'Sélection de la valeur de !PARAMETRE E10 et mise en variable

Sheets("parametre").Visible = True
Sheets("parametre").Unprotect "enfant"

    'verification des cellules à copier

    If Range("ae7").Value = "" Then
        MsgBox ("Manque le N° du compte")
        ElseIf Sheets("donne").Range("e21").Value = "" Then
        MsgBox ("Le code utilisateur n'est pas renseigné")

        ElseIf Application.WorksheetFunction.CountIf(Sheets("statses").Range("C2:C" & Sheets("statses").Range("c65536").End(xlUp).Row), Range("ae7").Value) > 0 Then
        MsgBox ("Ce compte est déjà présent dans la feuille statses")
    Else

    'copie des cellules
    a = Range("ae6").Value
    b = Range("ae7").Value  'nom_prenom
    d = Range("ae9").Value  'téléphone
    e = Range("ae8").Value  'n° compte
    f = Range("ae11").Value  'Réf pièce
    g = Range("ae13").Value  'code agent

    'selection de la feuille de destination
    Sheets("statses").Select

    'selection de la première cellule de destination
    Range("b1").Select

    'vérification de la cellule de destination
    If ActiveCell.Value = "" Then 'si la cellule est vide, on colle
        ActiveCell = a
        ActiveCell.Offset(0, 1) = b
        ActiveCell.Offset(0, 2) = e
        ActiveCell.Offset(0, 3) = d
        ActiveCell.Offset(0, 4) = f
        ActiveCell.Offset(0, 5) = g

    Sheets("PARAMETRE").Select
    Range("D3").Select
        Exit Sub
    Else 'la cellule n'est pas vide

        'on boucle tant que la cellule de destination n'est pas vide
        Do While ActiveCell.Value <> ""

        'selection de la cellule du dessous
        ActiveCell.Offset(1, 0).Select

            'si la cellule est vide, on colle
            If ActiveCell.Value = "" Then
        ActiveCell = a
        ActiveCell.Offset(0, 1) = b
        ActiveCell.Offset(0, 2) = e
        ActiveCell.Offset(0, 3) = d
        ActiveCell.Offset(0, 4) = f
        ActiveCell.Offset(0, 5) = g
            Sheets("PARAMETRE").Select
            Range("D3").Select
                Exit Sub
            Else
                'selection de la cellule du dessous
                ActiveCell.Offset(1, 0).Select
            End If

        Loop 'on boucle tant que la cellule n'est pas vide
    End If

    'si la cellule est vide, fin de la boucle, et on colle
    ActiveCell = a
        ActiveCell.Offset(0, 1) = b
        ActiveCell.Offset(0, 2) = e
        ActiveCell.Offset(0, 3) = d
        ActiveCell.Offset(0, 4) = f
        ActiveCell.Offset(0, 5) = g
        Sheets("PARAMETRE").Select
    Range("D3").Select
    Sheets("parametre").Protect "enfant"
    End If

    End Sub

J'ai tenté d'optimiser (et de faire fonctionner) ton code mais c'est impossible de décrypter ce que tu veux faire !!

    'verification des identifiants
   'Sur quel feuille ?????????????????
    If Range("ae7").Value = "" Then
        MsgBox ("Manque le N° du compte")

Tu rend la feuille Paramètres accessible mais tu ne t'en sert nul part ??? du moins ça n’apparaît pas dans le code

Explique (sans code) ce que tu veux EXACTEMENT

A+

Salut lermite

Je souhaite copier des données (AE6:AE13) de la feuille PARAMETRE vers la feuille STATBS.

La copie doit se réaliser si certaines conditions sont vérifiées :

  • la cellule contenant le numero de compte ne doit pas être vide,
  • la cellule code utilisateur (E21) ne doit pas être vide.
La 1ère cellule de destination des éléments copiés sera B3.

Aussi, à chaque fois que la macro sera exécutée et que les conditions sont reunies, les nouveaux éléments copiés seront collés à la suite de la ligne du dessous et ainsi de suite.

NB: la feuille PARAMETRE devra toujours être protégée et masquée car cette feuille contiendra des données secrètes et ne doit pas être accessible aux utilisateurs.

C'est l'idée générale du code joint ci-dessus.

NB: la feuille PARAMETRE devra toujours être protégée et masquée car cette feuille contiendra des données secrètes et ne doit pas être accessible aux utilisateurs.

La feuille sera toujours accessible à l'affichage, clic droit sur un onglet quelconque et afficher.

La protection par mot de passe sert juste a bloquer la modification de la feuille.

Il y a moyen de faire ce que tu veux par VBA, j'y cogite.

A+

Essaye ce code

Sub Copier()
Dim TB(5) As String
Dim LigneVide As Long, i As Integer
    Sheets("PARAMETRE").Visible = xlSheetVeryHidden
    'verification des identifiants

    If Sheets("PARAMETRE").Range("AE7").Value = "" Then
        MsgBox ("Manque le N° du compte")
        Exit Sub
    ElseIf Sheets("donne").Range("e21").Value = "" Then
        MsgBox ("Le code utilisateur n'est pas renseigné")
        Exit Sub
    ElseIf Application.WorksheetFunction.CountIf(Sheets("statses").Range("C2:C" & Sheets("statses").Range("c65536").End(xlUp).Row), Range("ae7").Value) > 0 Then
        MsgBox ("Ce compte est déjà présent dans la feuille statses")
        Exit Sub
    End If
    With Sheets("PARAMETRE")
    'copie des cellules
        TB(0) = .Range("ae6").Value
        TB(1) = .Range("ae7").Value     'nom_prenom
        TB(3) = .Range("ae9").Value      'téléphone
        TB(2) = .Range("ae8").Value      'n° compte
        TB(4) = .Range("ae11").Value      'Réf pièce
        TB(5) = .Range("ae13").Value      'code agent
    End With

    'Avec la feuille de destination
    With Sheets("statses")
        'selection de la première cellule vide
        LigneVide = .Cells(Rows.Count, 2).End(xlUp).Row
        If LigneVide > 1 Then LigneVide = LigneVide + 1
        'Copie les données
        For i = 1 To 5
            .Cells(LigneVide, i + 1) = TB(i)
        Next i
    End With
End Sub

Pa besoin de protection sur la feuille, elle est uniquement accessible en VBA

Si tu veux vraiment la protéger met un mot de passe sur l'IDE.

note que la ligne Sheets("PARAMETRE").Visible = xlSheetVeryHidden n'est nécessaire qu'une seule fois.

J'ai pas tester,

Note, si tu veux voir la feuille Paramètre copie la sub ci-dessous dans un module et la lancer

Sub AFFICHER()
    Sheets("PARAMETRE").Visible = True
End Sub

C'est la seule façon de la voire.

A+

Salut lermite

Merci pour votre solution.

Je fais mes tests et voici mes constats:

- votre code permet de masquer la feuille et le 2è code permet de l'afficher à nouveau.

cela me convient. ce qui restait était la protection de la feuille.

J'ai protégé et masqué la feuille PARAMETRE pour voire si les copies se réaliseraient ; ce qui fut fait.

Le seul problème que je rencontre est la 1ère cellule de destination

'selection de la première cellule vide
LigneVide = .Cells(Rows.Count, 2).End(xlUp).Row

Le collage commence en A3 au lieu de B3.

Pouvez-vous voir cela?

La ligne que tu montre n'a rien à voir avec le problème que tu souligne.

Et si ça commence en A au lieu de B c'est que tu à modifier le code que je t'ai montré, explique c e que tu a fais

A+

Salut lermite

Merci pour le feedback.

J'ai vu mon erreur en revoyant mes modifications.

C'est en cherchant à vous donner les explications que j'ai vu la source de mon erreur.

Au lieu de For i = 1 to 5 j'avais changé comme ceci for i = 0 to 5

J'ai corrigé et c'est super.

Je souhaite ajouter qques paramètres :

en supposant que je dois faire des statistiques hebdomadaires ou mensuelles, est-il possible de faire en sorte que si je commence une nouvelle semaine, que les éléments à copier soient collés sur une nouvelle page.

Même raisonnement si les statistiques doivent se faire mensuellement.

Merci

Dans la ligne

 With Sheets("statses")

Tu n'a que de changer le nom de la feuille et les données seront copiées dessus.

A+

Salut lermite

Etant donné que mon fichier sera utilisé par d'autres personnes et que je ne serai pas là pour toujours changer le nom de la feuille, je souhaite tout automatisé. Suis entrain de chercher les critères pour cela mais j'ai pas encore trouvé. si vous en avez, merci de m'en proposer sinon je vous reviendrai

Automatiser ne pose aucun problème, juste qu'il faudrait connaitre les critères qui détermine la feuille

Ok. voici ce que je pense définir comme critères:

Je fais mes statistiques du du lundi au samedi.

je souhaite que le nom de l'onglet porte le nom de la semaine (Ex: STATSBSMS_S13-18).

Pour la semain suivante (20 au 25 aout), le nom de l'onglet change à STATBSMS_S20-25 et ainsi de suite.

Lorsque je passe à une nouvelle semaine, cela devra entrainer une réinitialisation de la feuille.

Pour ne pas jouer sur les mots, j'ai préféré joindre un fichier pour mieux traduire mon besoin.

La feuille STATBSMS_S13-18 est la feuille qui comportera les statistiques de la semaine en cours.

A partir du 1er jour de la nouvelle semaine on devra avoir un onglet nommé STATBSMS_S20-25;cette feuille centralisera les statistiques correspondant à la dite semaine. elle devra toujours se presenter comme celle du fichier joint.

Techniquement je ne sais pas comment vous procederai, je ne sais pas si vous le ferai en transformant la feuille contenant les statistiques antérieures.

Telles sont mes idées. si vous avez une meilleure offre, je suis preneur.

Encore merci pour le coup de main.

44onglet-change.xlsx (29.39 Ko)

Je veux bien t'aider mais de là à te pondre ton appli en entier il y a de la marge.

Quelque conseils..

1°) Voir comment on peu définir le 1er et dernier jour d'une semaine

2°) Voir comment créer une nouvelle feuille avec le nom qui comprend ces jours.

Fais déjà ça pour avancer

A+

Salut lermite et le forum

Si le nom d'un onglet peut se faire par la valeur d'une cellule, je pense que je pourrai automatiser cela par formule qui sera utilisé dans la macro.

J'attend votre réponse svp.

Bonne idée avec le nom de l'onglet dans une cellule.

Tu peu alors mettre

With Sheets(Range("A1").Value)

par exemple..

Coçntinue à cogiter.;

Et n'oublie pas de te servir de l'éditeur de macros, notamment pour créer une nouvelle feuille et changer son nom.

A+

Salut lermite

Merci pour l'appréciation et pour le soutien positif que vous m'apportez.

J'ai trouvé dans un forum un code qui permet de créer des feuilles et je l'ai adapté à mon cas.

Ca fonctionne mais il me manque qquechose.

Lorsque le nvel onglet est crée, l'ancien demeure toujours alors qu'il ne sert plus.

Je manque pour le moment d'idée pour permettre la suppresion de l'ancien feuille.

Ci-dessous le code que je laisse à votre appréciation:

Sub dupliquer_feuilles1()
 Dim Nom As String
 Dim f As Worksheet
 Nom = Worksheets("feuil1").Range("h15")
 If Nom = "" Then MsgBox "Vous devez entrer un numéro de semaine": Exit Sub
 For Each f In ThisWorkbook.Worksheets
 If f.Name = Nom Then Exit Sub

 Next f
 Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count)
 Sheets(Sheets.Count).Name = Worksheets("feuil1").Range("h15")
 End Sub
Rechercher des sujets similaires à "comment exploiter donnees feuille masquee"