Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en pièce
jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à
condition qu'une modification ait été apportée à une cellule sur l'une des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche à
déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne
comportera qu'une copie du classeur contenant les feuilles effectivement
modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas de
problèmes,
par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis
créer une variable du genre NomFeuilleModif(i) avec i = compteur.
Mon problème est que i s'incrément à chaque modif et que je n'arrive pas à
limiter la valeur de i en fonction du nom de la feuille.
En clair je voudrais que i s'incrémente si et seulement si il s'agit de la
première modif sur cette feuille.
J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les
doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
---
Ce message est certifié sans virus connus par AVG 6.0 Free
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
LeSteph
Bonsoir, Puisque tu connais bien les macros et qu'il y a déjà tout un processus en place , suggestion:
Utiliser l'évènnement Onchange de chaque Worksheet du Workbook qui fixera la valeur d'une variable à Vrai ou Faux pour chacune des feuilles puis, Utiliser l'évènnement beforeClose pour l'envoi de chaque feuille.
LeSteph
"Gercha" a écrit dans le message de news:40ba0922$0$26915$
Bonjour,
Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en pièce jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à condition qu'une modification ait été apportée à une cellule sur l'une des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche à déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne comportera qu'une copie du classeur contenant les feuilles effectivement modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas de problèmes, par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis créer une variable du genre NomFeuilleModif(i) avec i = compteur. Mon problème est que i s'incrément à chaque modif et que je n'arrive pas à limiter la valeur de i en fonction du nom de la feuille. En clair je voudrais que i s'incrémente si et seulement si il s'agit de la première modif sur cette feuille. J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
Bonsoir,
Puisque tu connais bien les macros et qu'il y a déjà
tout un processus en place , suggestion:
Utiliser l'évènnement Onchange de chaque Worksheet du Workbook
qui fixera la valeur d'une variable à Vrai ou Faux pour chacune des feuilles
puis,
Utiliser l'évènnement beforeClose pour l'envoi de chaque feuille.
LeSteph
"Gercha" <ger.STOPSPAMcha@free.fr> a écrit dans le message de
news:40ba0922$0$26915$626a14ce@news.free.fr...
Bonjour,
Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en pièce
jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à
condition qu'une modification ait été apportée à une cellule sur l'une
des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche à
déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne
comportera qu'une copie du classeur contenant les feuilles effectivement
modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas de
problèmes,
par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis
créer une variable du genre NomFeuilleModif(i) avec i = compteur.
Mon problème est que i s'incrément à chaque modif et que je n'arrive pas à
limiter la valeur de i en fonction du nom de la feuille.
En clair je voudrais que i s'incrémente si et seulement si il s'agit de la
première modif sur cette feuille.
J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les
doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
---
Ce message est certifié sans virus connus par AVG 6.0 Free
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
Bonsoir, Puisque tu connais bien les macros et qu'il y a déjà tout un processus en place , suggestion:
Utiliser l'évènnement Onchange de chaque Worksheet du Workbook qui fixera la valeur d'une variable à Vrai ou Faux pour chacune des feuilles puis, Utiliser l'évènnement beforeClose pour l'envoi de chaque feuille.
LeSteph
"Gercha" a écrit dans le message de news:40ba0922$0$26915$
Bonjour,
Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en pièce jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à condition qu'une modification ait été apportée à une cellule sur l'une des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche à déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne comportera qu'une copie du classeur contenant les feuilles effectivement modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas de problèmes, par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis créer une variable du genre NomFeuilleModif(i) avec i = compteur. Mon problème est que i s'incrément à chaque modif et que je n'arrive pas à limiter la valeur de i en fonction du nom de la feuille. En clair je voudrais que i s'incrémente si et seulement si il s'agit de la première modif sur cette feuille. J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
Hervé
Bonjour Gercha,
A mettre dans un module de classe que tu doit nommer "ClsChangement" afin de ne pas avoir à utiliser l'événement Change de chaque feuille : '-------------------------------------------------- Public WithEvents Changement As Application
Private Sub Changement_SheetChange(ByVal Sh As Object, _ ByVal Target As Range) Modif Sh.Name End Sub '-------------------------------------------------- A mettre dans un module standard. Une collection est utiliser pour stocker les noms des feuilles modifiées afin d'éviter les doublons : '-------------------------------------------------- Public Chgment As New ClsChangement Public Col As New Collection
Public Sub Initialiser() Set Chgment.Changement = Application End Sub
Public Sub Modif(NomFeuille As String) On Error Resume Next Col.Add NomFeuille, NomFeuille End Sub '------------------------------------------------- A mettre dans le module du classeur : '------------------------------------------------- Private Sub Workbook_Open() Initialiser End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim I As Integer 'si le classeur a été ouvert puis refermé sans modif If Col.Count = 0 Then Exit Sub For I = 1 To Col.Count 'évite la sélection de la feuille active 'en interdisant la sélection multiple 'dans le cas où aucun changement n'a été fait 'dans celle-ci If I = 1 Then Worksheets(Col(I)).Select (True) End If 'sélectionne toutes les feuilles où il y a eu 'modification Worksheets(Col(I)).Select (False) Next 'copie les feuilles dans un nouveau classeur ActiveWindow.SelectedSheets.Copy Set Col = Nothing End Sub '--------------------------------------------------- En espérant t'avoir aidé, bonne journée. Hervé.
"Gercha" a écrit dans le message news: 40ba0922$0$26915$
Bonjour,
Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en pièce jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à condition qu'une modification ait été apportée à une cellule sur l'une des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche à déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne comportera qu'une copie du classeur contenant les feuilles effectivement modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas de problèmes, par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis créer une variable du genre NomFeuilleModif(i) avec i = compteur. Mon problème est que i s'incrément à chaque modif et que je n'arrive pas à limiter la valeur de i en fonction du nom de la feuille. En clair je voudrais que i s'incrémente si et seulement si il s'agit de la première modif sur cette feuille. J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
Bonjour Gercha,
A mettre dans un module de classe que tu doit nommer "ClsChangement" afin de
ne pas avoir à utiliser l'événement Change de chaque feuille :
'--------------------------------------------------
Public WithEvents Changement As Application
Private Sub Changement_SheetChange(ByVal Sh As Object, _
ByVal Target As Range)
Modif Sh.Name
End Sub
'--------------------------------------------------
A mettre dans un module standard. Une collection est utiliser pour stocker
les noms des feuilles modifiées afin d'éviter les doublons :
'--------------------------------------------------
Public Chgment As New ClsChangement
Public Col As New Collection
Public Sub Initialiser()
Set Chgment.Changement = Application
End Sub
Public Sub Modif(NomFeuille As String)
On Error Resume Next
Col.Add NomFeuille, NomFeuille
End Sub
'-------------------------------------------------
A mettre dans le module du classeur :
'-------------------------------------------------
Private Sub Workbook_Open()
Initialiser
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim I As Integer
'si le classeur a été ouvert puis refermé sans modif
If Col.Count = 0 Then Exit Sub
For I = 1 To Col.Count
'évite la sélection de la feuille active
'en interdisant la sélection multiple
'dans le cas où aucun changement n'a été fait
'dans celle-ci
If I = 1 Then
Worksheets(Col(I)).Select (True)
End If
'sélectionne toutes les feuilles où il y a eu
'modification
Worksheets(Col(I)).Select (False)
Next
'copie les feuilles dans un nouveau classeur
ActiveWindow.SelectedSheets.Copy
Set Col = Nothing
End Sub
'---------------------------------------------------
En espérant t'avoir aidé, bonne journée.
Hervé.
"Gercha" <ger.STOPSPAMcha@free.fr> a écrit dans le message news:
40ba0922$0$26915$626a14ce@news.free.fr...
Bonjour,
Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en pièce
jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à
condition qu'une modification ait été apportée à une cellule sur l'une
des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche à
déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne
comportera qu'une copie du classeur contenant les feuilles effectivement
modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas de
problèmes,
par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis
créer une variable du genre NomFeuilleModif(i) avec i = compteur.
Mon problème est que i s'incrément à chaque modif et que je n'arrive pas à
limiter la valeur de i en fonction du nom de la feuille.
En clair je voudrais que i s'incrémente si et seulement si il s'agit de la
première modif sur cette feuille.
J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les
doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
---
Ce message est certifié sans virus connus par AVG 6.0 Free
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
A mettre dans un module de classe que tu doit nommer "ClsChangement" afin de ne pas avoir à utiliser l'événement Change de chaque feuille : '-------------------------------------------------- Public WithEvents Changement As Application
Private Sub Changement_SheetChange(ByVal Sh As Object, _ ByVal Target As Range) Modif Sh.Name End Sub '-------------------------------------------------- A mettre dans un module standard. Une collection est utiliser pour stocker les noms des feuilles modifiées afin d'éviter les doublons : '-------------------------------------------------- Public Chgment As New ClsChangement Public Col As New Collection
Public Sub Initialiser() Set Chgment.Changement = Application End Sub
Public Sub Modif(NomFeuille As String) On Error Resume Next Col.Add NomFeuille, NomFeuille End Sub '------------------------------------------------- A mettre dans le module du classeur : '------------------------------------------------- Private Sub Workbook_Open() Initialiser End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim I As Integer 'si le classeur a été ouvert puis refermé sans modif If Col.Count = 0 Then Exit Sub For I = 1 To Col.Count 'évite la sélection de la feuille active 'en interdisant la sélection multiple 'dans le cas où aucun changement n'a été fait 'dans celle-ci If I = 1 Then Worksheets(Col(I)).Select (True) End If 'sélectionne toutes les feuilles où il y a eu 'modification Worksheets(Col(I)).Select (False) Next 'copie les feuilles dans un nouveau classeur ActiveWindow.SelectedSheets.Copy Set Col = Nothing End Sub '--------------------------------------------------- En espérant t'avoir aidé, bonne journée. Hervé.
"Gercha" a écrit dans le message news: 40ba0922$0$26915$
Bonjour,
Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en pièce jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à condition qu'une modification ait été apportée à une cellule sur l'une des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche à déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne comportera qu'une copie du classeur contenant les feuilles effectivement modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas de problèmes, par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis créer une variable du genre NomFeuilleModif(i) avec i = compteur. Mon problème est que i s'incrément à chaque modif et que je n'arrive pas à limiter la valeur de i en fonction du nom de la feuille. En clair je voudrais que i s'incrémente si et seulement si il s'agit de la première modif sur cette feuille. J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
Gercha
"LeSteph" a écrit dans le message de news:40ba0c09$0$25527$
Bonsoir, Puisque tu connais bien les macros et qu'il y a déjà tout un processus en place , suggestion:
Utiliser l'évènnement Onchange de chaque Worksheet du Workbook qui fixera la valeur d'une variable à Vrai ou Faux pour chacune des feuilles
puis, Utiliser l'évènnement beforeClose pour l'envoi de chaque feuille.
Bonjour,
en fait j'utilise déjà la fonction Onchange pour vérifier qu'une modification a été apportée à une feuille. A chaque modif, j'appelle une routine et c'est dans cette routine que je voudrais discriminer si la feuille a déjà fait l'objet d'une modif ou pas. Si déjà modif ==> sortie de la routine. Si pas de modif ==> enregistrement du nom dans une variable qui sera utilisée pour lister les feuilles modifiées lorsque l'utilisateur ferme le fichier.
Merci quand même.
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
"LeSteph" <cocosteph@free.fr> a écrit dans le message de
news:40ba0c09$0$25527$626a14ce@news.free.fr...
Bonsoir,
Puisque tu connais bien les macros et qu'il y a déjà
tout un processus en place , suggestion:
Utiliser l'évènnement Onchange de chaque Worksheet du Workbook
qui fixera la valeur d'une variable à Vrai ou Faux pour chacune des
feuilles
puis,
Utiliser l'évènnement beforeClose pour l'envoi de chaque feuille.
Bonjour,
en fait j'utilise déjà la fonction Onchange pour vérifier qu'une
modification a été apportée à une feuille. A chaque modif, j'appelle une
routine et c'est dans cette routine que je voudrais discriminer si la
feuille a déjà fait l'objet d'une modif ou pas. Si déjà modif ==> sortie de
la routine. Si pas de modif ==> enregistrement du nom dans une variable qui
sera utilisée pour lister les feuilles modifiées lorsque l'utilisateur ferme
le fichier.
Merci quand même.
---
Ce message est certifié sans virus connus par AVG 6.0 Free
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
"LeSteph" a écrit dans le message de news:40ba0c09$0$25527$
Bonsoir, Puisque tu connais bien les macros et qu'il y a déjà tout un processus en place , suggestion:
Utiliser l'évènnement Onchange de chaque Worksheet du Workbook qui fixera la valeur d'une variable à Vrai ou Faux pour chacune des feuilles
puis, Utiliser l'évènnement beforeClose pour l'envoi de chaque feuille.
Bonjour,
en fait j'utilise déjà la fonction Onchange pour vérifier qu'une modification a été apportée à une feuille. A chaque modif, j'appelle une routine et c'est dans cette routine que je voudrais discriminer si la feuille a déjà fait l'objet d'une modif ou pas. Si déjà modif ==> sortie de la routine. Si pas de modif ==> enregistrement du nom dans une variable qui sera utilisée pour lister les feuilles modifiées lorsque l'utilisateur ferme le fichier.
Merci quand même.
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
Gercha
Merci pour cette réponse, je vais essayer de l'utiliser et d'en comprendre le fonctionnement.
"Hervé" a écrit dans le message de news:
Bonjour Gercha,
A mettre dans un module de classe que tu doit nommer "ClsChangement" afin de
ne pas avoir à utiliser l'événement Change de chaque feuille : '-------------------------------------------------- Public WithEvents Changement As Application
Private Sub Changement_SheetChange(ByVal Sh As Object, _ ByVal Target As Range) Modif Sh.Name End Sub '-------------------------------------------------- A mettre dans un module standard. Une collection est utiliser pour stocker les noms des feuilles modifiées afin d'éviter les doublons : '-------------------------------------------------- Public Chgment As New ClsChangement Public Col As New Collection
Public Sub Initialiser() Set Chgment.Changement = Application End Sub
Public Sub Modif(NomFeuille As String) On Error Resume Next Col.Add NomFeuille, NomFeuille End Sub '------------------------------------------------- A mettre dans le module du classeur : '------------------------------------------------- Private Sub Workbook_Open() Initialiser End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim I As Integer 'si le classeur a été ouvert puis refermé sans modif If Col.Count = 0 Then Exit Sub For I = 1 To Col.Count 'évite la sélection de la feuille active 'en interdisant la sélection multiple 'dans le cas où aucun changement n'a été fait 'dans celle-ci If I = 1 Then Worksheets(Col(I)).Select (True) End If 'sélectionne toutes les feuilles où il y a eu 'modification Worksheets(Col(I)).Select (False) Next 'copie les feuilles dans un nouveau classeur ActiveWindow.SelectedSheets.Copy Set Col = Nothing End Sub '--------------------------------------------------- En espérant t'avoir aidé, bonne journée. Hervé.
"Gercha" a écrit dans le message news: 40ba0922$0$26915$
Bonjour,
Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en pièce
jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à condition qu'une modification ait été apportée à une cellule sur l'une des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche à
déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne comportera qu'une copie du classeur contenant les feuilles effectivement modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas de
problèmes, par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis créer une variable du genre NomFeuilleModif(i) avec i = compteur. Mon problème est que i s'incrément à chaque modif et que je n'arrive pas à
limiter la valeur de i en fonction du nom de la feuille. En clair je voudrais que i s'incrémente si et seulement si il s'agit de la
première modif sur cette feuille. J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
Merci pour cette réponse, je vais essayer de l'utiliser et d'en comprendre
le fonctionnement.
"Hervé" <hmsilve@wanadoo.fr> a écrit dans le message de
news:OPUzRutREHA.2936@TK2MSFTNGP12.phx.gbl...
Bonjour Gercha,
A mettre dans un module de classe que tu doit nommer "ClsChangement" afin
de
ne pas avoir à utiliser l'événement Change de chaque feuille :
'--------------------------------------------------
Public WithEvents Changement As Application
Private Sub Changement_SheetChange(ByVal Sh As Object, _
ByVal Target As Range)
Modif Sh.Name
End Sub
'--------------------------------------------------
A mettre dans un module standard. Une collection est utiliser pour stocker
les noms des feuilles modifiées afin d'éviter les doublons :
'--------------------------------------------------
Public Chgment As New ClsChangement
Public Col As New Collection
Public Sub Initialiser()
Set Chgment.Changement = Application
End Sub
Public Sub Modif(NomFeuille As String)
On Error Resume Next
Col.Add NomFeuille, NomFeuille
End Sub
'-------------------------------------------------
A mettre dans le module du classeur :
'-------------------------------------------------
Private Sub Workbook_Open()
Initialiser
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim I As Integer
'si le classeur a été ouvert puis refermé sans modif
If Col.Count = 0 Then Exit Sub
For I = 1 To Col.Count
'évite la sélection de la feuille active
'en interdisant la sélection multiple
'dans le cas où aucun changement n'a été fait
'dans celle-ci
If I = 1 Then
Worksheets(Col(I)).Select (True)
End If
'sélectionne toutes les feuilles où il y a eu
'modification
Worksheets(Col(I)).Select (False)
Next
'copie les feuilles dans un nouveau classeur
ActiveWindow.SelectedSheets.Copy
Set Col = Nothing
End Sub
'---------------------------------------------------
En espérant t'avoir aidé, bonne journée.
Hervé.
"Gercha" <ger.STOPSPAMcha@free.fr> a écrit dans le message news:
40ba0922$0$26915$626a14ce@news.free.fr...
Bonjour,
Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en
pièce
jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à
condition qu'une modification ait été apportée à une cellule sur l'une
des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche
à
déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne
comportera qu'une copie du classeur contenant les feuilles effectivement
modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas
de
problèmes,
par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis
créer une variable du genre NomFeuilleModif(i) avec i = compteur.
Mon problème est que i s'incrément à chaque modif et que je n'arrive pas
à
limiter la valeur de i en fonction du nom de la feuille.
En clair je voudrais que i s'incrémente si et seulement si il s'agit de
la
première modif sur cette feuille.
J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les
doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
---
Ce message est certifié sans virus connus par AVG 6.0 Free
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
---
Ce message est certifié sans virus connus par AVG 6.0 Free
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
Merci pour cette réponse, je vais essayer de l'utiliser et d'en comprendre le fonctionnement.
"Hervé" a écrit dans le message de news:
Bonjour Gercha,
A mettre dans un module de classe que tu doit nommer "ClsChangement" afin de
ne pas avoir à utiliser l'événement Change de chaque feuille : '-------------------------------------------------- Public WithEvents Changement As Application
Private Sub Changement_SheetChange(ByVal Sh As Object, _ ByVal Target As Range) Modif Sh.Name End Sub '-------------------------------------------------- A mettre dans un module standard. Une collection est utiliser pour stocker les noms des feuilles modifiées afin d'éviter les doublons : '-------------------------------------------------- Public Chgment As New ClsChangement Public Col As New Collection
Public Sub Initialiser() Set Chgment.Changement = Application End Sub
Public Sub Modif(NomFeuille As String) On Error Resume Next Col.Add NomFeuille, NomFeuille End Sub '------------------------------------------------- A mettre dans le module du classeur : '------------------------------------------------- Private Sub Workbook_Open() Initialiser End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim I As Integer 'si le classeur a été ouvert puis refermé sans modif If Col.Count = 0 Then Exit Sub For I = 1 To Col.Count 'évite la sélection de la feuille active 'en interdisant la sélection multiple 'dans le cas où aucun changement n'a été fait 'dans celle-ci If I = 1 Then Worksheets(Col(I)).Select (True) End If 'sélectionne toutes les feuilles où il y a eu 'modification Worksheets(Col(I)).Select (False) Next 'copie les feuilles dans un nouveau classeur ActiveWindow.SelectedSheets.Copy Set Col = Nothing End Sub '--------------------------------------------------- En espérant t'avoir aidé, bonne journée. Hervé.
"Gercha" a écrit dans le message news: 40ba0922$0$26915$
Bonjour,
Je dispose d'un classeur Excel qui, à l'aide de macro, est envoyé en pièce
jointe d'un message outlook dès qu'un utilisateur ferme le classeur et à condition qu'une modification ait été apportée à une cellule sur l'une des
feuilles du classeur.
Afin de limiter l'envoi aux feuilles effectivement modifiée, je cherche à
déterminer quelle feuille a subie des modifications. Ainsi l'envoi ne comportera qu'une copie du classeur contenant les feuilles effectivement modifiées.
Pour l'envoi pas de problème, pour la création du nouveau classeur pas de
problèmes, par contre je n'arrive pas à limiter le nombre de feuilles à envoyer.
Dans mon idée, je voulais incrémenter un compteur à chaque modif et puis créer une variable du genre NomFeuilleModif(i) avec i = compteur. Mon problème est que i s'incrément à chaque modif et que je n'arrive pas à
limiter la valeur de i en fonction du nom de la feuille. En clair je voudrais que i s'incrémente si et seulement si il s'agit de la
première modif sur cette feuille. J'ai pensé crée une liste des feuilles modifiées et ensuite retirer les doublons mais, cela atteint les limites de mes connaissances en VBA.
Quelqu'un peut-il m'aider ?
Merci.
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004
--- Ce message est certifié sans virus connus par AVG 6.0 Free Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.692 / Virus Database: 453 - Release Date: 28/05/2004