[VBA / macro excel] remise à vide de cellules à chaque début de mois. [Résolu]

Messages postés
20
Date d'inscription
jeudi 13 novembre 2008
Statut
Membre
Dernière intervention
19 juillet 2013
- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 25 avril 2012 à 16:18
Bonjour à tous,

Je souhaiterai savoir s'il était possible à l'ouverture d'un classeur excel, de prendre en compte la date (inscrite dans une cellule via "(date)" ) et qu'à chaque 1er du mois, une macro d'ouverture inscrit 0 dans chaque cellule d'une zone de colonne définie ? De plus il faudrait que cette macro ne soit executé qu'une fois par mois. Autrement dit, une seule fois à l'ouverture du 1er du mois, et que les ouverture suivante n'entraine pas la mise à 0 ; juqu'au mois suivant.

Merci de votre attention ^_^

ps : une petite question HS : quelle est la commande qui permet sous VBA d'enregistrer le classeur ?
Afficher la suite 

18 réponses

Meilleure réponse
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
3
Merci
Bonjour hazzel


Pour que le code ci-dessous fonctionne, tu dois avoir une cellule nommée DerniereInit dans ta feuille. Celle-ci enregistre la date de la dernière remise à zéro, ce qui permet d'obtenir une raz et une seule en début de mois.


Dans cet exemple, la zone de colonne à remettre à zéro est B1:B30.



Sub auto_open()
    Dim zone As Range, r As Range
    Set zone = Range("B1:B30")
    If Day(Date) = 1 And Month(Range("DerniereInit").Value) <> Month(Date) Then
        For Each r In plage
            r.Value = 0
        Next
    Range("DerniereInit").Value = Date
    End If
End Sub


Pour enregistrer le classeur, utilise la méthode Save de l'objet Workbook

Amicalement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 216 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Orohena
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
3
Merci
userrrqi115 a tout à fait raison, la procédure événementielle Workbook_Open est préférable à Auto_Open, qui est obsolète. Il vaut mieux également préciser la feuile de calcul sur laquelle s'opère la mise à jour. Avec ces corrections, mon sub devient :

Private Sub WorkBook_Open()
    Dim zone As Range, r As Range
    Set zone = WorkSheets("Feuil1"). Range("B1:B30")
    If Day(Date) = 1 And Month(Range("DerniereInit").Value) <> Month(Date) Then
        For Each r In zone
            r.Value = 0
        Next
    Range("DerniereInit").Value = Date
    End If
End Sub

Amicalement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 216 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Orohena
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
0
Merci
Bien lire



For Each r In zone


au lieu de



For each r in plage


Sorry
Commenter la réponse de cs_Orohena
Messages postés
181
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
4 février 2011
0
Merci
Hello hazzel,

pour ce qui est de la partie de prendre en compte une date à l'ouverture du classeur il te faut utiliser l'evennement suivant :
Private Sub Workbook_Open()     (à saisir dans la fenêtre code de l'objet Workbook)
et de la faire suivre des instructions voulues (sélection d'une cellule, déterminer la date du jour, test sur cette dernière et exécution si test ok)

pour le HS, voici l'instruction te permettant d'enregister le classeur sur lequel tu es:
ActiveWorkbook.SaveAs Filename:="Lecteur:\Dossier\Sous dossier\workbook.xls", FileFormat:=xlNormal _
        , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
        CreateBackup:=False
Je regrette de te donner cela car tu aurais pu tout aussi bien l'obtenir à l'aide de l'enregistreur de macro...

BR

USERRRQI115
Simple user
Great brain

Pensée du jour : " Ouvrez votre esprit, voyez la porte fermée en tant que celle qui n'est pas encore ouverte".
Commenter la réponse de userrrqi115
Messages postés
20
Date d'inscription
jeudi 13 novembre 2008
Statut
Membre
Dernière intervention
19 juillet 2013
0
Merci
Un grand merci à tous,
Pour se qui est de la macro d'ouverture,  elle fonctionne à merveille, encore merci ^_^

En se qui concerne la macro pour enregistrer, j'ai bien essayé de la faire en macro automatique, mais à chaque fois le module était vide, et impossible de connaître la formule VBA : /


Dans mon classeur j'ai deja une macro d'ouverture donnant l'heure et la date, auquel j'ai rajouté la macro que vous m'avez conseillé!
Commenter la réponse de cs_hazzel
Messages postés
2
Date d'inscription
jeudi 22 juillet 2010
Statut
Membre
Dernière intervention
10 août 2010
0
Merci
bonjour
est ce que vous pouvez m'aider pour faire un programme qui peut fair quelque chose comme :

Private Sub Workbook_Open()
Dim x As Integer, y As Integer

For x = 1 To 3
For y = 1 To 5
For F = 1 To 5
For H = 1 To 5
Cells(x, y) = "[lmnop.xlsx]Feuil1!cells(F, H)"
Next H
Next F
Next y
Next x


End Sub

merci pour votre aide
Commenter la réponse de trahim
Messages postés
10
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
21 mai 2012
0
Merci
Bonjour !

Moi j'aimerais qu'à l'ouverture de mon fichier BON_COMMANDE.xls ma page soit vierge !

Quel est le code à utilisr svp ?

Merciii
Commenter la réponse de Nemo1106
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
214
0
Merci
Bonjour, nemo110G
Ouvre ton aide VBA sur le mot ClearContents.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
10
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
21 mai 2012
0
Merci
Je n'ai pas ClearContents, j'ai seulement ClearArrows ou ClearCircles :/
Commenter la réponse de Nemo1106
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
214
0
Merci
Je n'ai pas ClearContents

Tu es allé dans l'aide VBA, a frappé ClearContents et rien n'a été trouvé ?
Ru es sûr ?
Si oui : avec quelle version de Excel ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
10
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
21 mai 2012
0
Merci
la version c'est 2003 oui j'suis sûre
Commenter la réponse de Nemo1106
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
214
0
Merci
Tu es "sûre" !
Ben ... je viens de regarder sur un portable avec Excel 2003 (que je mets rarement en route) ===>> cette rubrique y est bel et bien !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
10
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
21 mai 2012
0
Merci
beh en cliuqnat sur F1 et en mettant ClearContents dans l'espace réservé il ne trouve rien
Commenter la réponse de Nemo1106
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
214
0
Merci
va DANS ton aide VBA. Elle est là pour cela !
Et si installée ===> elle fonctionne fort bien
Si pas installée ===>> à installer dans les plus brefs délais.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
214
0
Merci
Et regarde : je mùe suis même "fendu" pour voir si, en plus, on ne la trouvait pas dans msdn pour Excel 2003 ===>> quelques secondes et ===>>
Tapez le texte de l'url ici.
Comment expliques-tu cette différence de réflexes, toi ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
10
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
21 mai 2012
0
Merci
lol merci bcp !
Commenter la réponse de Nemo1106
Messages postés
10
Date d'inscription
mardi 17 avril 2012
Statut
Membre
Dernière intervention
21 mai 2012
0
Merci
RE bonjour !

Je me permets de revenir vers vous...

Voilà mon pb:

J'ai 2 tables ds ma base de données access : COMMANDE (cle primaire Num_ref) ET FOURNISSEUR (clé primaire Nom_ent et clé étrangère Num_ref)

J'ai fait un code permettant d'enregistrer des valeurs dans ces 2 tables d'ACCESS via EXCEL par un bouton de macro et par une requête.

Cependant, les enregistrements pour la table COMMANDE se fait à merveille mais pour la table FOURNISSEUR pas du tt. J'aimerais comprendre.

Voici mon code :

For ligne = 20 To 32
If Val(Feuil1.Cells(ligne, 1)) > 0 Then

objRS.AddNew 'ajoute à la table

'TABLE COMMANDE
objRS("Num_ref").Value = Feuil1.Cells(11, 3)
objRS("Num_ligne").Value = Feuil1.Cells(ligne, 1)
objRS("Qte_pdt").Value = Feuil1.Cells(ligne, 2)
objRS("Libelle_pdt").Value = Feuil1.Cells(ligne, 3)
objRS("Ref_pdt").Value = Feuil1.Cells(ligne, 4)
objRS("Num_aff").Value = Feuil1.Cells(ligne, 5)
objRS("P_U").Value = Feuil1.Cells(ligne, 6)

' TABLE FOURNISSEUR
' objRS("Nom_Ent").Value = Feuil1.Nom_Ent.Text
' objRS("Ad_ent").Value = Feuil1.Cells(3, 5)
' objRS("Nom_FRN").Value = Feuil1.Cells(4, 5)
' objRS("Tel_FRN").Value = Feuil1.Cells(5, 5)
' objRS("Mail_FRN").Value = Feuil1.Cells(6, 5)
objRS.Update 'ecriture ds la table
End If
Next


J'espère que vous avez compris !!
Merci bcp
Commenter la réponse de Nemo1106
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
214
0
Merci
Cette nouvelle question n'a plus rien à voir avec l'objet de la présente discussion. C'est évident.
Tu es donc invité à ouvrir une nouvelle discussion, à part entière.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu