Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro qui n'écoute pas

8 réponses
Avatar
MEB
Bonjour,

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

Donc, j'ai cr=E9er cette petite automatisation et je me demande pour
quelle raison l'action ActiveCell.FormulaR1C1 =3D "=3DTODAY()" se produit
sur la feuille demand=E9e "Donn=E9es pour graphique" mais aussi sur une
autre feuille de mon fichier qui s'appelle "Tableau de bord". Je n'y
fais toutefois pas r=E9f=E9rence dans ma macro.

Qu'est-ce que j'ai fais de pas conforme pour que =E7a arrive !!

Merci


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Donn=E9es pour graphique").Visible =3D True
Sheets("Donn=E9es pour graphique").Select
Range("A2").Select
ActiveCell.FormulaR1C1 =3D "=3DTODAY()"
Range("B1:Q1").Select
Selection.AutoFill Destination:=3DRange("B1:Q2"),
Type:=3DxlFillDefault
Range("B1:Q2").Select
Rows("2:2").Select
Selection.Copy
Selection.PasteSpecial Paste:=3DxlPasteValues, Operation:=3DxlNone,
SkipBlanks _
:=3DFalse, Transpose:=3DFalse
Rows("2:2").Select
Application.CutCopyMode =3D False
Selection.Insert Shift:=3DxlDown
Sheets("Donn=E9es pour graphique").Visible =3D False
Range("A1").Select
ActiveWorkbook.Close SaveChanges:=3DTrue
End Sub

8 réponses

Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

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
Avatar
Solutions-xl
On 25 nov, 14:35, MEB wrote:
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
Avatar
FFO
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
Avatar
MEB
On 25 nov, 09:21, FFO wrote:
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
Avatar
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à!
Avatar
MEB
On 25 nov, 16:04, "michdenis" wrote:
| 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 !!
Avatar
MEB
On 26 nov, 07:24, MEB wrote:
On 25 nov, 16:04, "michdenis" wrote:





> | 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
Avatar
michdenis
http://cjoint.com/?lAq6dItrSH



"MEB" a écrit dans le message de groupe de discussion :

On 25 nov, 16:04, "michdenis" wrote:
| 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 !!