OVH Cloud OVH Cloud

Virer les doublons ?

4 réponses
Avatar
Gercha
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

4 réponses

Avatar
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




Avatar
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




Avatar
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

Avatar
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