Enregistrement à date fixe

Résolu/Fermé
refcemad Messages postés 39 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 10 mai 2018 - 12 janv. 2011 à 03:37
refcemad Messages postés 39 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 10 mai 2018 - 13 janv. 2011 à 03:37
Bonjour à tous,

Je suis toute nouvelle sur ce forum que je consulte souvent, d'où ma décision de venir vous poser mes questions.

Alors voilà : j'ai un fichier excel pour lequel je voudrais qu'à chaque début de mois, certaines variables puissent être enregistrées pour pouvoir y revenir.

Ce que je voudrais, c'est une boîte de dialogue qui s'affiche à la première ouverture en début de mois pour m'inciter, voire m'obliger, à effectuer la manip' d'enregistrement (au travers d'un bouton par exemple). (La manip', je pense pouvoir m'en tirer avec l'enregistreur de macro). J'ai donc "simplement" besoin de cette boîte de dialogue. Sachant, pour corser le tout, que ce fichier n'est pas ouvert tous les jours, et qu'il est possible que je ne l'ouvre que le 2 ou le 3 du mois. Mais j'ai impérativement besoin d'enregistrer avant de de continuer sur le nouveau mois.

Suis-je claire, et pensez-vous que ce soit possible ?

Merci de votre aide !
Cordialement



3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 12/01/2011 à 08:37
Bonjour,
Le plus simple pour moi est de procéder comme ceci :
- En Feuil3 Cellule G25 (ou n'importe ou ailleurs dans votre classeur, j'ai pris cet exemple pour que vous puissiez l'adapter facilement) saisir le numéro du mois en cours (exemple puisque nous sommes en janvier saisir : 1)
- lancer une procédure de test à chaque ouverture du classeur :
Si Feuil3!G25 = Numéro_du_mois_en_cours Alors
Envoyer message à l'utilisateur
Feuil3!G25 = Feuil3!G25 + 1
Fin du test
(le fait d'ajouter 1 à Feuil3!G25 permet de ne lancer le test que le mois suivant)
Pour mettre en place ce code :
- ouvrir le classeur concerné,
- taper ALT+F11
- Dans la petite denêtre située à gauche de l'écran, intitulée Projet - vba project, double cliquer sur "This workbook
- dans le haut de la fenêtre centrale, menu déroulant "général", sélectionner : workbook, par défaut il vous indique l'évènement open (sinon menu déroulant "déclarations", sélectionner "open")
Vous obtenez donc ceci :
Private Sub Workbook_Open() 

End Sub

A remplacer par :
Private Sub Workbook_Open() 
If Sheets("Feuil3").Range("G25").Value = Month(Date) Then 
    MsgBox "Veuillez lancer la procédure d'enregistrement" 
    Sheets("Feuil3").Range("G25").Value = Sheets("Feuil3").Range("G25").Value + 1 
End If 
End Sub

On peux même supposer que ce fichier sera utilisé plusieurs années et donc il nous faudrait un deuxième test un peu comme ceci :
Private Sub Workbook_Open() 
If Month(Date) = 1 And Sheets("Feuil3").Range("G25").Value > 2 Then 
    MsgBox "Veuillez lancer la procédure d'enregistrement" 
    Sheets("Feuil3").Range("G25").Value = 2 
    Exit Sub 
End If 
If Sheets("Feuil3").Range("G25").Value = Month(Date) Then 
    MsgBox "Veuillez lancer la procédure d'enregistrement" 
    Sheets("Feuil3").Range("G25").Value = Sheets("Feuil3").Range("G25").Value + 1 
End If 
End Sub

N'hésitez pas à poser vos questions... si vous en avez.
"Laissez-moi deviner... Votre surnom, c'est «Bande Passante»? "
- Le Tribunal des flagrants délires- P.Desproges -
1
refcemad Messages postés 39 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 10 mai 2018 1
13 janv. 2011 à 03:37
Bon, ben ça, ça marche.

Je continue de travailler à mon projet et je reviendrai vers le forum si je bloque encore ailleurs.

Merci et cordialement
0
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
Modifié par cousinhub29 le 12/01/2011 à 08:57
Bonjour,

Personnellement, à la place d'utiliser une cellule d'un quelconque onglet (risque de perte de l'information), j'utiliserai un "nom"....

Par ce code, on peut insérer un nom :

Sub Macro1() 
    ActiveWorkbook.Names.Add Name:="action", RefersToR1C1:=Year(Date) & Format(Month(Date), "00") 
End Sub 


ce nom est donc égal à "201101", soit l'année et le mois....

En ouvrant le fichier, on peut venir contrôler si le nom est toujours égal au mois et à l'année en cours, et le cas échéant, provoquer la macro, tout en mettant à jour le nom....

Comme ceci :

Sub Maj_Mensuel()
Dim Flag As Boolean
Dim Nms As Name
For Each Nms In Names
    If Nms.Name = "action" Then Flag = True: Exit For
Next Nms
If Not Flag Then _
    ActiveWorkbook.Names.Add Name:="action", RefersToR1C1:=Year(Date) & Format(Month(Date), "00")
    'le code
If [action] <> Val(Year(Date) & Format(Month(Date), "00")) Then _
    ActiveWorkbook.Names.Add Name:="action", RefersToR1C1:=Year(Date) & Format(Month(Date), "00")
    'le code
End Sub


Nota, la boucle du début sert à vérifier l'existence du nom défini (utile pour l'initialisation)

bonne journée
1
refcemad Messages postés 39 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 10 mai 2018 1
12 janv. 2011 à 10:37
Merci bien
Malheureusement, c'est bientôt l'heure de la débauche, donc je n'essaierai chacune de vos solutions que demain. Celle de Pijaku m'a l'air pas mal du tout (l'autre va être un peu compliquée pour moi).

A plus tard
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
12 janv. 2011 à 10:42
L'une comme l'autre sont très valables... et aussi simples d'utilisation.
0