Macro qui n'écoute pas

Le
MEB
Bonjour,

Je suis plus que débutante en VBA, je suis du genre à créer de petite=
s
automatisations par la création d'une macro à l'aide de l'enregistreur
de macros et d'aller dans le vba pour y ajouter de petites choses.

Donc, j'ai créer cette petite automatisation et je me demande pour
quelle raison l'action ActiveCell.FormulaR1C1 = "=TODAY()" se produit
sur la feuille demandée "Données pour graphique" mais aussi sur une
autre feuille de mon fichier qui s'appelle "Tableau de bord". Je n'y
fais toutefois pas référence dans ma macro.

Qu'est-ce que j'ai fais de pas conforme pour que ça arrive !!

Merci


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Données pour graphique").Visible = True
Sheets("Données pour graphique").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = "=TODAY()"
Range("B1:Q1").Select
Selection.AutoFill Destination:=Range("B1:Q2"),
Type:=xlFillDefault
Range("B1:Q2").Select
Rows("2:2").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Rows("2:2").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Sheets("Données pour graphique").Visible = False
Range("A1").Select
ActiveWorkbook.Close SaveChanges:=True
End Sub
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #20629911
Bonjour MEB,

La macro que tu utilises est en fait une macro événementielle c'est-à-dire
qu'elle est déclencher lorsque tu désires fermer ton classeur que ce soit
par le "x" du coin supérieur droit où par le menu fichier "Quitter".

Sauf que dans ta macro, à la toute fin de celle-ci, tu as mis la ligne de code:

ActiveWorkbook.Close SaveChanges:=True

Cette ligne de code relance à nouveau la procédure (Pour une deuxième fois)
mais lorsque la macro s'est exécutée la première fois, elle a masquée la
feuille par ceci : Sheets("Données pour graphique").Visible = False
mais lors de la deuxième exécution, ta feuille n'est pas affichée, et c'est
la feuille active qui reçoit la date.

Modifie cette ligne
ActiveWorkbook.Close SaveChanges:=True
Par
ActiveWorkbook.Save

et n'oublie pas, si tu as une procédure événementielle dans le ThisWorkbook
de cette nature, ActiveWorkbook.Save va lancer son exécution

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub



"MEB"
Bonjour,

Je suis plus que débutante en VBA, je suis du genre à créer de petites
automatisations par la création d'une macro à l'aide de l'enregistreur
de macros et d'aller dans le vba pour y ajouter de petites choses.

Donc, j'ai créer cette petite automatisation et je me demande pour
quelle raison l'action ActiveCell.FormulaR1C1 = "=TODAY()" se produit
sur la feuille demandée "Données pour graphique" mais aussi sur une
autre feuille de mon fichier qui s'appelle "Tableau de bord". Je n'y
fais toutefois pas référence dans ma macro.

Qu'est-ce que j'ai fais de pas conforme pour que ça arrive !!

Merci


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Données pour graphique").Visible = True
Sheets("Données pour graphique").Select
Range("A2").Select
ActiveCell.FormulaR1C1 = "=TODAY()"
Range("B1:Q1").Select
Selection.AutoFill Destination:=Range("B1:Q2"),
Type:=xlFillDefault
Range("B1:Q2").Select
Rows("2:2").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Rows("2:2").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Sheets("Données pour graphique").Visible = False
Range("A1").Select
ActiveWorkbook.Close SaveChanges:=True
End Sub
Solutions-xl
Le #20629901
On 25 nov, 14:35, MEB
Bonjour,

Je suis plus que débutante en VBA, je suis du genre à créer de peti tes
automatisations par la création d'une macro à l'aide de l'enregistreu r
de macros et d'aller dans le vba pour y ajouter de petites choses.

Donc, j'ai créer cette petite automatisation et je me demande pour
quelle raison l'action  ActiveCell.FormulaR1C1 = "=TODAY()" se prod uit
sur la feuille demandée "Données pour graphique" mais aussi sur une
autre feuille de mon fichier qui s'appelle "Tableau de bord". Je n'y
fais toutefois pas référence dans ma macro.

Qu'est-ce que j'ai fais de pas conforme pour que ça arrive !!

Merci

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheets("Données pour graphique").Visible = True
    Sheets("Données pour graphique").Select
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "=TODAY()"
    Range("B1:Q1").Select
    Selection.AutoFill Destination:=Range("B1:Q2"),
Type:=xlFillDefault
    Range("B1:Q2").Select
    Rows("2:2").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNon e,
SkipBlanks _
        :úlse, Transpose:úlse
    Rows("2:2").Select
    Application.CutCopyMode = False
    Selection.Insert Shift:=xlDown
    Sheets("Données pour graphique").Visible = False
    Range("A1").Select
    ActiveWorkbook.Close SaveChanges:=True
End Sub



Bonjour
Oui, c'est étonnant !
Il n'y a pas d'autre macro, (événementielle par exemple)
Merci de nous dire ce que doit faire la macro, ou envoyer un fichier
joint
Vous pouvez aussi mettre un point d'arrêt pour debugger la macro

Philippe NOSS
www.solutions-xl.com
FFO
Le #20630091
Salut à toi

Peux tu transmettre ton document sans données confidentielles pour l'essayer

ici :


http://www.cijoint.fr/index.php

Communiques le lien pour le récupérer
MEB
Le #20632741
On 25 nov, 09:21, FFO
Salut à toi

Peux tu transmettre ton document sans données confidentielles pour l'es sayer

ici :

http://www.cijoint.fr/index.php

Communiques le lien pour le récupérer



Merci à vous tous pour vos bons conseils, le tout fonctionne à
merveille.

Cependant, j'aimerais savoir s'il existe un moyen que cette même macro
s'exécute de façon automatique à 8h00 tous les matins que j'ouvre le
fichier ou non. J'imagine que ça impliquerait une macro qui ouvrirait
le fichier (il contient des liens avec d'autres fichiers) et qui
accepterait les macros.

Merci encore une fois pour la collaboration de tous
michdenis
Le #20631681
| Cependant, j'aimerais savoir s'il existe un moyen que cette même macro
| s'exécute de façon automatique à 8h00 tous les matins que j'ouvre le
| fichier ou non. J'imagine que ça impliquerait une macro qui ouvrirait
| le fichier (il contient des liens avec d'autres fichiers) et qui
| accepterait les macros.

Oui c'est possible. La seule restriction le fichier doit être fermé. Si
une instance du fichier est déjà ouverte, il sera impossible d'enregistrer
le fichier à la fin de l'exécution.

Voilà comment procéder :

Il s'agit de créer un VBScript que tu feras exécuter par le planificateur
de tâches de Windows selon une heure désirée et une horaire que tu
détermineras. Pour ce faire, évidemment, Windows doit être ouvert
et opérationnel.

Tu copies ce qui suit dans l'application "NotePad" et tu t'assures de
donner au fichier une extension .vbs lors de l'enregistrement.
------------------------
Dim oXL
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True ' or False
set Wk = oXL.workbooks.open("c:Mes DocumentsClasseur1.xls")
oxl.run "Bonjour"
Wk.save
wk.close
oxl.quit
Set oXL = Nothing
-------------------------

Si tu ne veux rien voir à l'écran , mais
oxl.visible = false

Indique le nom et le chemin du classeur à ouvrir où est
ta macro dans la ligne de code :
set Wk = oXL.workbooks.open("c:Mes DocumentsClasseur1.xls")

Pour actionner ta macro , indique le nom de la macro à exécuter.
Dans mon exemple , elle s'appelle "Bonjour"
La macro doit être situé dans un module standard
oxl.run "Bonjour"

Maintenant ouvre le planificateur de Windows et suit les indications.
Tu indiques le fichier à excécuter "TonFichier.vbs"
Et voilà!
MEB
Le #20637801
On 25 nov, 16:04, "michdenis"
| Cependant, j'aimerais savoir s'il existe un moyen que cette même macr o
| s'exécute de façon automatique à 8h00 tous les matins que j'ouvre le
| fichier ou non. J'imagine que ça impliquerait une macro qui ouvrirait
| le fichier (il contient des liens avec d'autres fichiers) et qui
| accepterait les macros.

Oui c'est possible. La seule restriction le fichier doit être fermé. Si
une instance du fichier est déjà ouverte, il sera impossible d'enregi strer
le fichier à la fin de l'exécution.

Voilà comment procéder :

Il s'agit de créer un VBScript que tu feras exécuter par le planifica teur
de tâches de Windows selon une heure désirée et une horaire que tu
détermineras. Pour ce faire, évidemment, Windows doit être ouvert
et opérationnel.

Tu copies ce qui suit dans l'application "NotePad" et tu t'assures de
donner au fichier une extension .vbs lors de l'enregistrement.
------------------------
Dim oXL
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True ' or False
set Wk = oXL.workbooks.open("c:Mes DocumentsClasseur1.xls")
oxl.run "Bonjour"
Wk.save
wk.close
oxl.quit
Set oXL = Nothing
-------------------------

Si tu ne veux rien voir à l'écran , mais
oxl.visible = false

Indique le nom et le chemin du classeur à ouvrir où est
ta macro dans la ligne de code :
set Wk = oXL.workbooks.open("c:Mes DocumentsClasseur1.xls")

Pour actionner ta macro , indique le nom de la macro à exécuter.
Dans mon exemple , elle s'appelle "Bonjour"
La macro doit être situé dans un module standard
oxl.run "Bonjour"

Maintenant ouvre le planificateur de Windows et suit les indications.
Tu indiques le fichier à excécuter "TonFichier.vbs"
Et voilà!



Re-Bonjour,

J'ai fait ce que tu m'as indiqué mais j'ai un problème lors de
l'exécution de la tâches. le message suivant m'apparaît :
---------------------------------------------------------------
Script : O:PandémiePan-2009-08 - Tableau de bordautomatisation.vbs
Ligne : 1
Caract. : 1
Erreur : Invalid Character
Code : 800A0408
Source : Microsoft VBScript compilation erreur
---------------------------------------------------------------


Voici ce que j'ai inscrit dans le Notepad :
---------------------------------------------------------------
Dim oXL
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True
set Wk = oXL.workbooks.open("O:PandémiePAN-2009-08 - Tableau de bord
TABLEAU DE BORD - PANDÉMIE.xls")
oxl.run "Cumulatif"
Wk.save
wk.close
oxl.quit
Set oXL = Nothing
----------------------------------------------------------------
Qu'est-ce qui peut bien se passer ???

Merci vous êtes des anges !!
MEB
Le #20638161
On 26 nov, 07:24, MEB
On 25 nov, 16:04, "michdenis"




> | Cependant, j'aimerais savoir s'il existe un moyen que cette même ma cro
> | s'exécute de façon automatique à 8h00 tous les matins que j'ouv re le
> | fichier ou non. J'imagine que ça impliquerait une macro qui ouvrira it
> | le fichier (il contient des liens avec d'autres fichiers) et qui
> | accepterait les macros.

> Oui c'est possible. La seule restriction le fichier doit être fermé . Si
> une instance du fichier est déjà ouverte, il sera impossible d'enre gistrer
> le fichier à la fin de l'exécution.

> Voilà comment procéder :

> Il s'agit de créer un VBScript que tu feras exécuter par le planifi cateur
> de tâches de Windows selon une heure désirée et une horaire que t u
> détermineras. Pour ce faire, évidemment, Windows doit être ouvert
> et opérationnel.

> Tu copies ce qui suit dans l'application "NotePad" et tu t'assures de
> donner au fichier une extension .vbs lors de l'enregistrement.
> ------------------------
> Dim oXL
> Set oXL = WScript.CreateObject("EXCEL.application")
> oXL.Visible = True ' or False
> set Wk = oXL.workbooks.open("c:Mes DocumentsClasseur1.xls")
> oxl.run "Bonjour"
> Wk.save
> wk.close
> oxl.quit
> Set oXL = Nothing
> -------------------------

> Si tu ne veux rien voir à l'écran , mais
> oxl.visible = false

> Indique le nom et le chemin du classeur à ouvrir où est
> ta macro dans la ligne de code :
> set Wk = oXL.workbooks.open("c:Mes DocumentsClasseur1.xls")

> Pour actionner ta macro , indique le nom de la macro à exécuter.
> Dans mon exemple , elle s'appelle "Bonjour"
> La macro doit être situé dans un module standard
> oxl.run "Bonjour"

> Maintenant ouvre le planificateur de Windows et suit les indications.
> Tu indiques le fichier à excécuter "TonFichier.vbs"
> Et voilà!

Re-Bonjour,

J'ai fait ce que tu m'as indiqué mais j'ai un problème lors de
l'exécution de la tâches. le message suivant m'apparaît :
---------------------------------------------------------------
Script :  O:PandémiePan-2009-08 - Tableau de bordautomatisation.vb s
Ligne :   1
Caract. : 1
Erreur :  Invalid Character
Code :   800A0408
Source :  Microsoft VBScript compilation erreur
---------------------------------------------------------------

Voici ce que j'ai inscrit dans le Notepad :
---------------------------------------------------------------
Dim oXL
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True
set Wk = oXL.workbooks.open("O:PandémiePAN-2009-08 - Tableau de bor d
TABLEAU DE BORD - PANDÉMIE.xls")
oxl.run "Cumulatif"
Wk.save
wk.close
oxl.quit
Set oXL = Nothing
----------------------------------------------------------------
Qu'est-ce qui peut bien se passer ???

Merci vous êtes des anges !!- Masquer le texte des messages précéde nts -

- Afficher le texte des messages précédents -



C'est beau, j'ai trouvé par moi-même.

Merci
michdenis
Le #20638401
http://cjoint.com/?lAq6dItrSH



"MEB"
On 25 nov, 16:04, "michdenis"
| Cependant, j'aimerais savoir s'il existe un moyen que cette même macro
| s'exécute de façon automatique à 8h00 tous les matins que j'ouvre le
| fichier ou non. J'imagine que ça impliquerait une macro qui ouvrirait
| le fichier (il contient des liens avec d'autres fichiers) et qui
| accepterait les macros.

Oui c'est possible. La seule restriction le fichier doit être fermé. Si
une instance du fichier est déjà ouverte, il sera impossible d'enregistrer
le fichier à la fin de l'exécution.

Voilà comment procéder :

Il s'agit de créer un VBScript que tu feras exécuter par le planificateur
de tâches de Windows selon une heure désirée et une horaire que tu
détermineras. Pour ce faire, évidemment, Windows doit être ouvert
et opérationnel.

Tu copies ce qui suit dans l'application "NotePad" et tu t'assures de
donner au fichier une extension .vbs lors de l'enregistrement.
------------------------
Dim oXL
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True ' or False
set Wk = oXL.workbooks.open("c:Mes DocumentsClasseur1.xls")
oxl.run "Bonjour"
Wk.save
wk.close
oxl.quit
Set oXL = Nothing
-------------------------

Si tu ne veux rien voir à l'écran , mais
oxl.visible = false

Indique le nom et le chemin du classeur à ouvrir où est
ta macro dans la ligne de code :
set Wk = oXL.workbooks.open("c:Mes DocumentsClasseur1.xls")

Pour actionner ta macro , indique le nom de la macro à exécuter.
Dans mon exemple , elle s'appelle "Bonjour"
La macro doit être situé dans un module standard
oxl.run "Bonjour"

Maintenant ouvre le planificateur de Windows et suit les indications.
Tu indiques le fichier à excécuter "TonFichier.vbs"
Et voilà!



Re-Bonjour,

J'ai fait ce que tu m'as indiqué mais j'ai un problème lors de
l'exécution de la tâches. le message suivant m'apparaît :
---------------------------------------------------------------
Script : O:PandémiePan-2009-08 - Tableau de bordautomatisation.vbs
Ligne : 1
Caract. : 1
Erreur : Invalid Character
Code : 800A0408
Source : Microsoft VBScript compilation erreur
---------------------------------------------------------------


Voici ce que j'ai inscrit dans le Notepad :
---------------------------------------------------------------
Dim oXL
Set oXL = WScript.CreateObject("EXCEL.application")
oXL.Visible = True
set Wk = oXL.workbooks.open("O:PandémiePAN-2009-08 - Tableau de bord
TABLEAU DE BORD - PANDÉMIE.xls")
oxl.run "Cumulatif"
Wk.save
wk.close
oxl.quit
Set oXL = Nothing
----------------------------------------------------------------
Qu'est-ce qui peut bien se passer ???

Merci vous êtes des anges !!
Publicité
Poster une réponse
Anonyme