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

exécuter une macro après suppression d'un onglet

5 réponses
Avatar
GGAL
Bonjour,

Mon classeur est composé de plusieurs onglets représentant des villes, un
onglet Récap et d'un autre onglet de travail.
Pour chaque onglet ville, j'ai une zone de liste déroulante (méthode par
formulaire) me donnant nom des villes, et associée à une macro (nommage) qui
me permet de renommer l'onglet selon la ville choisie, puis de classer ces
onglets villes par ordre alphabétique à partir du 3e onglet.
Ensuite une autre macro (maj) fait une récap des données dans la feuille
récap.
Pour ajouter un onglet-ville : clic droit dans l'onglet, Déplacer ou copier…
Créer une copie. La liste déroulante fait la mise à jour.
Mais lorsque je supprime un onglet, j'aurais souhaité que la récap se fasse
automatiquement, plutôt que cliquer une fois dans ma liste un nom au hasard
et revenir au nom initial.

J'ai pensé mettre dans ThisWorkbook la macro suivante :

Sub Workbook_SheetActivate(ByVal sh As Object)
Call maj
End Sub

Elle marche très bien à chaque changement d'onglet, et lors de la
suppression d'un onglet. Mais lorsque j'ajoute un nouvel onglet-ville, j'ai
bien un renommage de l'onglet, je n'ai plus de classement alphabétique.

Comment faire ?
Désactiver peut-être temporairement la macro Call maj ?

Merci à vous,

Ggal

5 réponses

Avatar
MichDenis
Après avoir lu la question rapidement, essaie ceci ...
Et si ça marchais ? ;-)))

Sub Workbook_SheetActivate(ByVal sh As Object)
Application.EnableEvents = False
Call maj
Application.EnableEvents = True
End Sub




"GGAL" a écrit dans le message de news:

Bonjour,

Mon classeur est composé de plusieurs onglets représentant des villes, un
onglet Récap et d'un autre onglet de travail.
Pour chaque onglet ville, j'ai une zone de liste déroulante (méthode par
formulaire) me donnant nom des villes, et associée à une macro (nommage) qui
me permet de renommer l'onglet selon la ville choisie, puis de classer ces
onglets villes par ordre alphabétique à partir du 3e onglet.
Ensuite une autre macro (maj) fait une récap des données dans la feuille
récap.
Pour ajouter un onglet-ville : clic droit dans l'onglet, Déplacer ou copier.
Créer une copie. La liste déroulante fait la mise à jour.
Mais lorsque je supprime un onglet, j'aurais souhaité que la récap se fasse
automatiquement, plutôt que cliquer une fois dans ma liste un nom au hasard
et revenir au nom initial.

J'ai pensé mettre dans ThisWorkbook la macro suivante :

Sub Workbook_SheetActivate(ByVal sh As Object)
Call maj
End Sub

Elle marche très bien à chaque changement d'onglet, et lors de la
suppression d'un onglet. Mais lorsque j'ajoute un nouvel onglet-ville, j'ai
bien un renommage de l'onglet, je n'ai plus de classement alphabétique.

Comment faire ?
Désactiver peut-être temporairement la macro Call maj ?

Merci à vous,

Ggal
Avatar
GGAL
Non, c'est pareil. Le déplacement des onglets ne se fait pas.
Ggal


Après avoir lu la question rapidement, essaie ceci ...
Et si ça marchais ? ;-)))

Sub Workbook_SheetActivate(ByVal sh As Object)
Application.EnableEvents = False
Call maj
Application.EnableEvents = True
End Sub




"GGAL" a écrit dans le message de news:

Bonjour,

Mon classeur est composé de plusieurs onglets représentant des villes, un
onglet Récap et d'un autre onglet de travail.
Pour chaque onglet ville, j'ai une zone de liste déroulante (méthode par
formulaire) me donnant nom des villes, et associée à une macro (nommage) qui
me permet de renommer l'onglet selon la ville choisie, puis de classer ces
onglets villes par ordre alphabétique à partir du 3e onglet.
Ensuite une autre macro (maj) fait une récap des données dans la feuille
récap.
Pour ajouter un onglet-ville : clic droit dans l'onglet, Déplacer ou copier.
Créer une copie. La liste déroulante fait la mise à jour.
Mais lorsque je supprime un onglet, j'aurais souhaité que la récap se fasse
automatiquement, plutôt que cliquer une fois dans ma liste un nom au hasard
et revenir au nom initial.

J'ai pensé mettre dans ThisWorkbook la macro suivante :

Sub Workbook_SheetActivate(ByVal sh As Object)
Call maj
End Sub

Elle marche très bien à chaque changement d'onglet, et lors de la
suppression d'un onglet. Mais lorsque j'ajoute un nouvel onglet-ville, j'ai
bien un renommage de l'onglet, je n'ai plus de classement alphabétique.

Comment faire ?
Désactiver peut-être temporairement la macro Call maj ?

Merci à vous,

Ggal





Avatar
MichDenis
Moi pas savoir ce que contient cette macro : Call maj

mais si tu cliques dans ta liste déroulante, et tout ce place, pourquoi
ne pas appeler après "maj", le code inscrit dans la procédure du "clic"
sur ta liste déroulante.

Pour pouvoir appeler une macro à partir d'un autre module, tu n'as qu'à enlever
le mot "Private" à ta macro "click" sur ta liste déroulante ou
utiliser ceci : Application.Run "NomDuModule.NomDeLaMacro"

Au delà ce ça, je ne sais pas.





"GGAL" a écrit dans le message de news:

Non, c'est pareil. Le déplacement des onglets ne se fait pas.
Ggal


Après avoir lu la question rapidement, essaie ceci ...
Et si ça marchais ? ;-)))

Sub Workbook_SheetActivate(ByVal sh As Object)
Application.EnableEvents = False
Call maj
Application.EnableEvents = True
End Sub




"GGAL" a écrit dans le message de news:

Bonjour,

Mon classeur est composé de plusieurs onglets représentant des villes, un
onglet Récap et d'un autre onglet de travail.
Pour chaque onglet ville, j'ai une zone de liste déroulante (méthode par
formulaire) me donnant nom des villes, et associée à une macro (nommage) qui
me permet de renommer l'onglet selon la ville choisie, puis de classer ces
onglets villes par ordre alphabétique à partir du 3e onglet.
Ensuite une autre macro (maj) fait une récap des données dans la feuille
récap.
Pour ajouter un onglet-ville : clic droit dans l'onglet, Déplacer ou copier.
Créer une copie. La liste déroulante fait la mise à jour.
Mais lorsque je supprime un onglet, j'aurais souhaité que la récap se fasse
automatiquement, plutôt que cliquer une fois dans ma liste un nom au hasard
et revenir au nom initial.

J'ai pensé mettre dans ThisWorkbook la macro suivante :

Sub Workbook_SheetActivate(ByVal sh As Object)
Call maj
End Sub

Elle marche très bien à chaque changement d'onglet, et lors de la
suppression d'un onglet. Mais lorsque j'ajoute un nouvel onglet-ville, j'ai
bien un renommage de l'onglet, je n'ai plus de classement alphabétique.

Comment faire ?
Désactiver peut-être temporairement la macro Call maj ?

Merci à vous,

Ggal





Avatar
GGAL
Bon,

La macro de la liste déroulante :
Sub immeuble()
ActiveSheet.Range("b7") = Range("a62").Value
feuil = Mid(Range("b7").Value, 1, 30)
nommage
maj
Sheets(feuil).Activate
End Sub

La macro "maj", un peu raccourci, mais c'est le principe

Sub maj()
nbligne = Sheets("Récap").Range("a65536").End(xlUp).Row
nbfeuil = Sheets.Count
With Sheets("Récap").Range("A3:F" & nbligne)
.ClearContents
.Borders.ColorIndex = -1
End With
For vfeuil = 3 To nbfeuil
With Sheets("récap")
.Cells(vfeuil, 1).FormulaLocal = "='" & Sheets(vfeuil).Name & "'!b7"
.Cells(vfeuil, 2).FormulaLocal = "=arrondi('" & Sheets(vfeuil).Name & "'!E55
/ '" & Sheets(vfeuil).Name & "'!E58*100;2)"
.Cells(vfeuil, 3).FormulaLocal = "=arrondi('" & Sheets(vfeuil).Name & "'!E56
/ '" & Sheets(vfeuil).Name & "'!E58*100;2)"
End With
Next vfeuil
End Sub

Est-ce plus clair ?

Ggal


Moi pas savoir ce que contient cette macro : Call maj

mais si tu cliques dans ta liste déroulante, et tout ce place, pourquoi
ne pas appeler après "maj", le code inscrit dans la procédure du "clic"
sur ta liste déroulante.

Pour pouvoir appeler une macro à partir d'un autre module, tu n'as qu'à enlever
le mot "Private" à ta macro "click" sur ta liste déroulante ou
utiliser ceci : Application.Run "NomDuModule.NomDeLaMacro"

Au delà ce ça, je ne sais pas.





"GGAL" a écrit dans le message de news:

Non, c'est pareil. Le déplacement des onglets ne se fait pas.
Ggal


Après avoir lu la question rapidement, essaie ceci ...
Et si ça marchais ? ;-)))

Sub Workbook_SheetActivate(ByVal sh As Object)
Application.EnableEvents = False
Call maj
Application.EnableEvents = True
End Sub




"GGAL" a écrit dans le message de news:

Bonjour,

Mon classeur est composé de plusieurs onglets représentant des villes, un
onglet Récap et d'un autre onglet de travail.
Pour chaque onglet ville, j'ai une zone de liste déroulante (méthode par
formulaire) me donnant nom des villes, et associée à une macro (nommage) qui
me permet de renommer l'onglet selon la ville choisie, puis de classer ces
onglets villes par ordre alphabétique à partir du 3e onglet.
Ensuite une autre macro (maj) fait une récap des données dans la feuille
récap.
Pour ajouter un onglet-ville : clic droit dans l'onglet, Déplacer ou copier.
Créer une copie. La liste déroulante fait la mise à jour.
Mais lorsque je supprime un onglet, j'aurais souhaité que la récap se fasse
automatiquement, plutôt que cliquer une fois dans ma liste un nom au hasard
et revenir au nom initial.

J'ai pensé mettre dans ThisWorkbook la macro suivante :

Sub Workbook_SheetActivate(ByVal sh As Object)
Call maj
End Sub

Elle marche très bien à chaque changement d'onglet, et lors de la
suppression d'un onglet. Mais lorsque j'ajoute un nouvel onglet-ville, j'ai
bien un renommage de l'onglet, je n'ai plus de classement alphabétique.

Comment faire ?
Désactiver peut-être temporairement la macro Call maj ?

Merci à vous,

Ggal










Avatar
GGAL
J'ai trouvé où il fallait mettre les deux lignes : dans la macro Sub
Immeuble() et non dans la macro Sub Workbook_SheetActivate(ByVal sh As Object)

Merci MichDenis

Ggal

Sub immeuble()

Application.EnableEvents = False
MaMacro


Application.EnableEvents = True
End Sub



Bon,

La macro de la liste déroulante :
Sub immeuble()
ActiveSheet.Range("b7") = Range("a62").Value
feuil = Mid(Range("b7").Value, 1, 30)
nommage
maj
Sheets(feuil).Activate
End Sub

La macro "maj", un peu raccourci, mais c'est le principe

Sub maj()
nbligne = Sheets("Récap").Range("a65536").End(xlUp).Row
nbfeuil = Sheets.Count
With Sheets("Récap").Range("A3:F" & nbligne)
.ClearContents
.Borders.ColorIndex = -1
End With
For vfeuil = 3 To nbfeuil
With Sheets("récap")
.Cells(vfeuil, 1).FormulaLocal = "='" & Sheets(vfeuil).Name & "'!b7"
.Cells(vfeuil, 2).FormulaLocal = "=arrondi('" & Sheets(vfeuil).Name & "'!E55
/ '" & Sheets(vfeuil).Name & "'!E58*100;2)"
.Cells(vfeuil, 3).FormulaLocal = "=arrondi('" & Sheets(vfeuil).Name & "'!E56
/ '" & Sheets(vfeuil).Name & "'!E58*100;2)"
End With
Next vfeuil
End Sub

Est-ce plus clair ?

Ggal


Moi pas savoir ce que contient cette macro : Call maj

mais si tu cliques dans ta liste déroulante, et tout ce place, pourquoi
ne pas appeler après "maj", le code inscrit dans la procédure du "clic"
sur ta liste déroulante.

Pour pouvoir appeler une macro à partir d'un autre module, tu n'as qu'à enlever
le mot "Private" à ta macro "click" sur ta liste déroulante ou
utiliser ceci : Application.Run "NomDuModule.NomDeLaMacro"

Au delà ce ça, je ne sais pas.





"GGAL" a écrit dans le message de news:

Non, c'est pareil. Le déplacement des onglets ne se fait pas.
Ggal


Après avoir lu la question rapidement, essaie ceci ...
Et si ça marchais ? ;-)))

Sub Workbook_SheetActivate(ByVal sh As Object)
Application.EnableEvents = False
Call maj
Application.EnableEvents = True
End Sub




"GGAL" a écrit dans le message de news:

Bonjour,

Mon classeur est composé de plusieurs onglets représentant des villes, un
onglet Récap et d'un autre onglet de travail.
Pour chaque onglet ville, j'ai une zone de liste déroulante (méthode par
formulaire) me donnant nom des villes, et associée à une macro (nommage) qui
me permet de renommer l'onglet selon la ville choisie, puis de classer ces
onglets villes par ordre alphabétique à partir du 3e onglet.
Ensuite une autre macro (maj) fait une récap des données dans la feuille
récap.
Pour ajouter un onglet-ville : clic droit dans l'onglet, Déplacer ou copier.
Créer une copie. La liste déroulante fait la mise à jour.
Mais lorsque je supprime un onglet, j'aurais souhaité que la récap se fasse
automatiquement, plutôt que cliquer une fois dans ma liste un nom au hasard
et revenir au nom initial.

J'ai pensé mettre dans ThisWorkbook la macro suivante :

Sub Workbook_SheetActivate(ByVal sh As Object)
Call maj
End Sub

Elle marche très bien à chaque changement d'onglet, et lors de la
suppression d'un onglet. Mais lorsque j'ajoute un nouvel onglet-ville, j'ai
bien un renommage de l'onglet, je n'ai plus de classement alphabétique.

Comment faire ?
Désactiver peut-être temporairement la macro Call maj ?

Merci à vous,

Ggal