Autres Interdire aux données de s’afficher dans les feuilles inactives

Slavko.R

XLDnaute Nouveau
Bonjour à toute la communauté

Voilà ce que je vous propose au menu...

- "Comment puis-je figer une feuille pour la rendre inactive, quand je le veux, bien qu'elle soit liée à une matrice via cette fonction =F1!, (sans annuler la dite fonction)?"
J'ai bien tenté deux ou trois petites choses, comme appliquer les protections en écriture standards. Mais, j'ai le sentiment que cela ne convient pas à ce cas de figure

Aussi, je suis ouvert à tout type de suggestions, à condition, bien entendu:

- Qu'elles fonctionnent (qu'elles s’appliquent au Scenari présenté, ci-après)
- Que cela ne modifie pas de trop la structure du tableau original
- Enfin, je suis sous environnement Windows 10 avec une version 2007 d'Excel

Je reste, également, attentif aux suggestions qui font appellent à Visual basique, en sachant que je maîtrise le concept, mais pas le langage

D'avance, merci du font du cœur à celles et ceux qui ont la gentillesse de bien vouloir se prêter au jeu!

NB: Vous pouvez voir ci dessous la description détaillé du projet en illustration et vous avez aussi le tableau complet en 'PJ', si nécessaire.

1606145027018.png
1606145066936.png
1606145110821.png
1606145146858.png
 

Pièces jointes

  • Diapositive1.GIF
    Diapositive1.GIF
    110.2 KB · Affichages: 21
  • Diapositive3.GIF
    Diapositive3.GIF
    118.7 KB · Affichages: 16
  • Diapositive2.GIF
    Diapositive2.GIF
    150.6 KB · Affichages: 15
  • Diapositive4.GIF
    Diapositive4.GIF
    143.1 KB · Affichages: 15
  • RépartitionDesDépenses.xlsm
    507.2 KB · Affichages: 7
Solution
Bonjour Slavko,
En PJ un essai de ce qui est faisable avec deux boutons pour voir si ça vous va :
- Reset : J'ai rajouté une demande de confirmation. C'est plus sécure.
- Archive : -On demande le nom désiré pour la feuille à archivée
-On duplique la feuille "RépartitionDépenses"
-On supprime les deux boutons
-On protège la feuille ( sans mot de passe, donc simple à déprotéger au cas où )

VB:
Sub Reset()
    If MsgBox("Etes vous sûr de tout vouloir effacer ?", 292, "RESET") = 6 Then
        Sheets("RépartitionDépenses").Select
        Range("C3:J128").ClearContents
    End If
End Sub

Sub Archive()
    Resultat = InputBox("Entrez le nom de la feuille ?", "New archive name") 'La variable...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Slavko,
Comme toutes les cellules de Archive xxx réfèrent à =RépartitionDépenses!E6, il vous sera impossible de conserver l'archivage.
Question : Pourquoi une fois le mois rempli dans RépartitionDépenses vous ne dupliquez pas cette feuille et la renommée Archive xxx. Cela conserverait vos données intactes.
 

Slavko.R

XLDnaute Nouveau
Bonjour cher Sylvanu

Je te suis grée de faire l'effort de consacrer un peu de ton temps à mon cas et te remercie également pour ce début d'échange très fructueux.
je trouve, en effet, ta question très pertinente.

Il est vrai que je n'ai pas précisé que je souhaiterai que cette opération d'archivage ne soit pas mécanique. J'ai omis de donner cette info, désolé...
En fait, je souhaiterai qu'elle soit au même titre que la saisie des données systématique et automatique, ce serait en fait, une sorte d'archivage automatique.
L'archivage devra s'enclencher dès le terme de chaque mois échu.

Mais bien entendu, si dans ce cas de figure, ta réponse est la seule alternative possible?
Alors, je prends, car cela signifie qu'il n'y a rien d'autre à faire (que c'est trop complexe et que je demande l'impossible).

Cordialement, Slavko. R
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Sans une tonne de VBA, le plus simple serait d'avoir un bouton Archivage qui ouvre un msgbox pour entrer un nom. Le VBA duplique la feuille en mettant le nom comme nom de feuille.

PS : en A3 au lieu de mettre
VB:
=SI(A2="Janvier";"01/01/2021";SI(A2="Février";"01/02/2021";SI(A2="Mars";"01/03/2021";SI(A2="Avril";"01/04/2021";SI(A2="Mai";"01/05/2021";SI(A2="Juin";"01/06/2021";SI(A2="Juillet";"01/07/2021";SI(A2="Aout";"01/08/2021";SI(A2="Septembre";"01/09/2021";SI(A2="Octobre";"01/10/2021";SI(A2="Novembre";"01/11/2021";SI(A2="Décembre";"01/12/2021"))))))))))))
mettez plus simplement :
Code:
=CNUM("1 "&A2&" 2021")
ou encore
=A1
 

Slavko.R

XLDnaute Nouveau
Rebonjour,

Tout d'abord un grand remerciement pour ta contribution, qui a permit de simplifier efficacement ma formule d'entrée. J'ai bien sûre testé le code et sans surprise c'est un sans faute.
Il est vrai que l'emploi d'une requête sous condition alourdie beaucoup les arguments et c'est toujours délicat.

Ensuite, comme je l'ai fait comprendre je ne suis qu'un humble profane dans l'art de maîtriser Excel, à l'inverse de toi que, je pressent comme étant très pointu en la matière.

Hors, si je comprends le concept du module 'VB'.
En revanche, je ne suis pas assez avancé pour écrire la ligne de commande qui me permettra de créer ce fameux bouton.

à moins que cela soit beaucoup plus simple que je ne l'imagine, à l'instar du bouton "Reset" que j'ai placé sur la feuille matricielle?

Peux-tu m'éclairer à ce sujet? Quand penses-tu?

Cordialement, Slavko. R
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Slavko,
En PJ un essai de ce qui est faisable avec deux boutons pour voir si ça vous va :
- Reset : J'ai rajouté une demande de confirmation. C'est plus sécure.
- Archive : -On demande le nom désiré pour la feuille à archivée
-On duplique la feuille "RépartitionDépenses"
-On supprime les deux boutons
-On protège la feuille ( sans mot de passe, donc simple à déprotéger au cas où )

VB:
Sub Reset()
    If MsgBox("Etes vous sûr de tout vouloir effacer ?", 292, "RESET") = 6 Then
        Sheets("RépartitionDépenses").Select
        Range("C3:J128").ClearContents
    End If
End Sub

Sub Archive()
    Resultat = InputBox("Entrez le nom de la feuille ?", "New archive name") 'La variable reçoit la valeur entrée dans l'InputBox
    If Resultat <> "" Then                                      'Si la valeur est non vide on archive
        Application.ScreenUpdating = False                      ' On fige l'écran
        Sheets(Sheets.Count).Copy After:=Sheets(Sheets.Count)   ' On copie la feuille à la fin des feuilles
        Sheets(Sheets.Count).Select
        ActiveSheet.Name = Resultat                             ' On la renomme
        For Each Sh In ActiveSheet.Shapes                       ' On supprime les boutons
            Sh.Delete
        Next
        ActiveSheet.Protect                                     ' On la protège
        Sheets("RépartitionDépenses").Select                    ' On revient sur la feuille initiale
    End If
End Sub
 

Pièces jointes

  • RépartitionDesDépenses (4).xlsm
    48.3 KB · Affichages: 2

Slavko.R

XLDnaute Nouveau
Bonjour cher professeur 'S' Excel

Félicitation pour ce petit coup de main et chapeau l'artiste, c'est du grand art.
Tu es le HOUDINI du 'VB' sur Excel, tu changes la réalité pour faire ce qui semble improbable.
Encore une fois, merci.

Je testerai ce weekend à la maison (Je suis sur mon 'PC' de bureau!!).
J'aurai ainsi plus de temps à consacrer aux essais.

Mais, je ne me fais aucun doute que c'est encore un sans faute et que cela fonctionnera.
J'ai parcouru la feuille de VBA et regardé les lignes de commandes, les arguments ne semblent pas très complexes. Donc, aucune raison pour que cela "bloque"

Même, s'il subsiste un petit pourcentage d'erreur (informatique oblige, à l'image de l'homme, tantôt compliqué, tantôt imparfait).
Pour ma part, le problème dans son ensemble est résolu
(Ce qui importe ici, c'est la problématique, le résultat n'est pas dans l'immédiat la priorité).

La problématique du sujet était la suivante, rappel: "Est il possible de figer une feuille Excel pour la rendre inactive, quand je le veux, bien qu'elle soit liée à une matrice via cette fonction =F1!, (sans annuler la dite fonction)?"

La réponse est oui, le problème est "résolu".
Tu as trouvé une solution qui répond directement à la question.

Hors, il faut encore affiner les réglages, pour rendre cette feuille opérationnel dès, le: 01/ 01/ 2021 et elle le sera, je n'aie aucun doute là dessus, vu que tu as fais le plus dure.

Donc; encore une fois, oui c'est résolu...

Cordialement, Slavko. R
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Thank's.
Si résolu passer ce post en résolu.
 

Discussions similaires

Statistiques des forums

Discussions
312 174
Messages
2 085 942
Membres
103 053
dernier inscrit
Beubax