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

declenchement des actions du code VB sur chaque onglet d'un classe

6 réponses
Avatar
ALF
cBonjour,

je vous laisse ci joint le code qui me pose problême...

je voudrais que toutes les modifications executées par ce code sur un des
onglets puissent declencher ces memes actions simultanément sur les autres
onglets en sachant que ce code est le même pour toutes les feuilles
correspondant aux onglets..

pour l'instant, seul fonctionne simultanément la partie suivante:

Sheets(s).[B12] = mois
Sheets(s).[B5] = indic

mais les autres actions concernant le formatage ne fonctionne que sur
l'onglet déclencheur....

j'ai épuisé toutes mes connaissances mais en vain...

Merci de votre soutien

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range
If Target.Address <> "$B$12" And Target.Address <> "$B$5" Then Exit Sub
Application.EnableEvents = False
mois = [B12]
indic = [B5]
For Each s In Array("National", "Avignon", "Brest", "Limoges", "Lisieux",
"Paris_E", "IDF", "St-Omer")
Sheets(s).[B12] = mois
Sheets(s).[B5] = indic
Next s
For Each c In Range("I54:I73")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00"
End If
Next c
For Each c In Range("B26:B44")
If Left(c, 4) = "Nomb" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 4) = "EFFC" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 12) = "EFFCDI Total" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).Select
Selection.Font.Bold = False
End If
Next c
For Each c In Range("I54:I73")
If Left(c, 33) = "Efficience processus Grand Public" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = False
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 23) = "Taux de recouvrement GP" Or Left(c, 13) = "Taux de
siren" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = False
End If
Next c
Range("B2").Select
Application.EnableEvents = True

End Sub

--
ALF

6 réponses

Avatar
isabelle
bonjour ALF,

il faut spécifier la feuille à chaque boucle

For Each c In Sheets(s).Range("I54:I73")

et mettre la commande
Next s
à la fin

isabelle


cBonjour,

je vous laisse ci joint le code qui me pose problême...

je voudrais que toutes les modifications executées par ce code sur un des
onglets puissent declencher ces memes actions simultanément sur les autres
onglets en sachant que ce code est le même pour toutes les feuilles
correspondant aux onglets..

pour l'instant, seul fonctionne simultanément la partie suivante:

Sheets(s).[B12] = mois
Sheets(s).[B5] = indic

mais les autres actions concernant le formatage ne fonctionne que sur
l'onglet déclencheur....

j'ai épuisé toutes mes connaissances mais en vain...

Merci de votre soutien

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range
If Target.Address <> "$B$12" And Target.Address <> "$B$5" Then Exit Sub
Application.EnableEvents = False
mois = [B12]
indic = [B5]
For Each s In Array("National", "Avignon", "Brest", "Limoges", "Lisieux",
"Paris_E", "IDF", "St-Omer")
Sheets(s).[B12] = mois
Sheets(s).[B5] = indic
Next s
For Each c In Range("I54:I73")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00"
End If
Next c
For Each c In Range("B26:B44")
If Left(c, 4) = "Nomb" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 4) = "EFFC" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 12) = "EFFCDI Total" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).Select
Selection.Font.Bold = False
End If
Next c
For Each c In Range("I54:I73")
If Left(c, 33) = "Efficience processus Grand Public" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = False
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 23) = "Taux de recouvrement GP" Or Left(c, 13) = "Taux de
siren" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = False
End If
Next c
Range("B2").Select
Application.EnableEvents = True

End Sub



Avatar
lSteph
Bonsoir,

En complément de ce que t'a donné Isabelle.

Tu sais que tu peux utiliser aussi l'événnement dans ThisWorkBook

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Excel.Range)


Ainsi tu n'as plus besoin de le coller et surtout de le rectifier
chaque fois dans toutes les feuilles.

Cordialement.

lSteph

On 3 mai, 18:26, ALF wrote:
cBonjour,

je vous laisse ci joint le code qui me pose problême...

je voudrais que toutes les modifications executées par ce code sur un d es
onglets puissent declencher ces memes actions simultanément sur les aut res
onglets en sachant que ce code est le même pour toutes les feuilles
correspondant aux onglets..

pour l'instant, seul fonctionne simultanément la partie suivante:

Sheets(s).[B12] = mois
Sheets(s).[B5] = indic

mais les autres actions concernant le formatage ne fonctionne que sur
l'onglet déclencheur....

j'ai épuisé toutes mes connaissances mais en vain...

Merci de votre soutien

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range
If Target.Address <> "$B$12" And Target.Address <> "$B$5" Then Exit Sub
Application.EnableEvents = False
mois = [B12]
indic = [B5]
For Each s In Array("National", "Avignon", "Brest", "Limoges", "Lisieux",
"Paris_E", "IDF", "St-Omer")
Sheets(s).[B12] = mois
Sheets(s).[B5] = indic
Next s
For Each c In Range("I54:I73")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = " Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = " Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00"
End If
Next c
For Each c In Range("B26:B44")
If Left(c, 4) = "Nomb" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 4) = "EFFC" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 12) = "EFFCDI Total" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).Select
Selection.Font.Bold = False
End If
Next c
For Each c In Range("I54:I73")
If Left(c, 33) = "Efficience processus Grand Public" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = False
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 23) = "Taux de recouvrement GP" Or Left(c, 13) = "Taux de
siren" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = False
End If
Next c
Range("B2").Select
Application.EnableEvents = True

End Sub

--
ALF


Avatar
ALF
Bonsoir,
Merci Isabelle,mais une petite précision...

le Next s, le faut il à la fin de chaque boucle ou à la fin du code ???
D' autre part,la macro semble bloquer à "Range(c.Offset(0, 1), c.Offset(0,
6)).Select"
et [B12] et [B5] se mettent en police normale au lieu de la police gras...
peux tu verifier le code stp

merci de ton soutien.
--
ALF



bonjour ALF,

il faut spécifier la feuille à chaque boucle

For Each c In Sheets(s).Range("I54:I73")

et mettre la commande
Next s
à la fin

isabelle


cBonjour,

je vous laisse ci joint le code qui me pose problême...

je voudrais que toutes les modifications executées par ce code sur un des
onglets puissent declencher ces memes actions simultanément sur les autres
onglets en sachant que ce code est le même pour toutes les feuilles
correspondant aux onglets..

pour l'instant, seul fonctionne simultanément la partie suivante:

Sheets(s).[B12] = mois
Sheets(s).[B5] = indic

mais les autres actions concernant le formatage ne fonctionne que sur
l'onglet déclencheur....

j'ai épuisé toutes mes connaissances mais en vain...

Merci de votre soutien

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range
If Target.Address <> "$B$12" And Target.Address <> "$B$5" Then Exit Sub
Application.EnableEvents = False
mois = [B12]
indic = [B5]
For Each s In Array("National", "Avignon", "Brest", "Limoges", "Lisieux",
"Paris_E", "IDF", "St-Omer")
Sheets(s).[B12] = mois
Sheets(s).[B5] = indic
Next s
For Each c In Range("I54:I73")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00"
End If
Next c
For Each c In Range("B26:B44")
If Left(c, 4) = "Nomb" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 4) = "EFFC" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 12) = "EFFCDI Total" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).Select
Selection.Font.Bold = False
End If
Next c
For Each c In Range("I54:I73")
If Left(c, 33) = "Efficience processus Grand Public" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = False
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 23) = "Taux de recouvrement GP" Or Left(c, 13) = "Taux de
siren" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Select
Selection.Font.Bold = False
End If
Next c
Range("B2").Select
Application.EnableEvents = True

End Sub






Avatar
isabelle
bonjour Alf,

pour évité de reprendre (Sheets(s)) tout au long de la macro tu peut sélectionner la feuille au début
et (Next s) va à la fin de la macro avant ou après (Range("B2").Select) tout dépend si tu veux
que cette cellule soit sélectionner sur chaque feuille

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range
If Target.Address <> "$B$12" And Target.Address <> "$B$5" Then Exit Sub
Application.EnableEvents = False
mois = [B12]
indic = [B5]
For Each s In Array("National", "Avignon", "Brest", "Limoges", "Lisieux",
"Paris_E", "IDF", "St-Omer")
Sheets(s).select '<------------------------------------------------------------ici
[B12] = mois
[B5] = indic

For Each c In Range("I54:I73")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00"
End If
Next c
For Each c In Range("B26:B44")
If Left(c, 4) = "Nomb" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 4) = "EFFC" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 12) = "EFFCDI Total" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).Font.Bold = True'<---------------------------ici
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).Font.Bold = False
End If
Next c
For Each c In Range("I54:I73")
If Left(c, 33) = "Efficience processus Grand Public" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Font.Bold = False
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 23) = "Taux de recouvrement GP" Or Left(c, 13) = "Taux de
siren" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Font.Bold = False
End If
Next c
Next s '<------------------------------------------------------------ici
Range("B2").Select
Application.EnableEvents = True

isabelle

End Sub

Bonsoir,
Merci Isabelle,mais une petite précision...

le Next s, le faut il à la fin de chaque boucle ou à la fin du code ???
D' autre part,la macro semble bloquer à "Range(c.Offset(0, 1), c.Offset(0,
6)).Select"
et [B12] et [B5] se mettent en police normale au lieu de la police gras...
peux tu verifier le code stp

merci de ton soutien.


Avatar
ALF
bonsoir isabelle ,

Merci encore pour ta reponse..
et je te confirme que la modification du code que tu m'a proposé fonctionne
parfaitement..
je l'ai appliqué sur Thisworkbook plutot que sur toutes les feuilles pour
eviter la repetition des modif comme me l'avais proposé Isteph..

Mais un dernier "petit" problême est apparu,à savoir que par exemple si je
suis sur la feuille NATIONAL et que je déclenche la macro,on voit à l'écran
toutes les feuilles se succeder pour aboutir à la feuille ST OMER et non plus
NATIONAL...
Serait il possible d'éviter de voir ces feuilles apparaitre et faire en
sorte que la feuille initiale reste jusqu'a la fin de l execution de la macro
et donc que les actions sur les autres feuilles ne soient pas visibles???

Merci encore de votre aide
--
ALF



bonjour Alf,

pour évité de reprendre (Sheets(s)) tout au long de la macro tu peut sélectionner la feuille au début
et (Next s) va à la fin de la macro avant ou après (Range("B2").Select) tout dépend si tu veux
que cette cellule soit sélectionner sur chaque feuille

Private Sub Worksheet_Change(ByVal Target As Range)

Dim c As Range
If Target.Address <> "$B$12" And Target.Address <> "$B$5" Then Exit Sub
Application.EnableEvents = False
mois = [B12]
indic = [B5]
For Each s In Array("National", "Avignon", "Brest", "Limoges", "Lisieux",
"Paris_E", "IDF", "St-Omer")
Sheets(s).select '<------------------------------------------------------------ici
[B12] = mois
[B5] = indic

For Each c In Range("I54:I73")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 4) = "Taux" Or Left(c, 4) = "Effi" Or Left(c, 4) = "Qual" Or
Left(c, 1) = "%" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00%"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.00"
End If
Next c
For Each c In Range("B26:B44")
If Left(c, 4) = "Nomb" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 4) = "EFFC" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0"
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).NumberFormat = "0.0"
End If
Next c
For Each c In Range("H5:H18")
If Left(c, 12) = "EFFCDI Total" Then
Range(c.Offset(0, 1), c.Offset(0, 6)).Font.Bold = True'<---------------------------ici
Else
Range(c.Offset(0, 1), c.Offset(0, 6)).Font.Bold = False
End If
Next c
For Each c In Range("I54:I73")
If Left(c, 33) = "Efficience processus Grand Public" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Font.Bold = False
End If
Next c
For Each c In Range("N24:N50")
If Left(c, 23) = "Taux de recouvrement GP" Or Left(c, 13) = "Taux de
siren" Then
Range(c.Offset(0, 1), c.Offset(0, 5)).Font.Bold = True
Else
Range(c.Offset(0, 1), c.Offset(0, 5)).Font.Bold = False
End If
Next c
Next s '<------------------------------------------------------------ici
Range("B2").Select
Application.EnableEvents = True

isabelle

End Sub

Bonsoir,
Merci Isabelle,mais une petite précision...

le Next s, le faut il à la fin de chaque boucle ou à la fin du code ???
D' autre part,la macro semble bloquer à "Range(c.Offset(0, 1), c.Offset(0,
6)).Select"
et [B12] et [B5] se mettent en police normale au lieu de la police gras...
peux tu verifier le code stp

merci de ton soutien.





Avatar
tissot.emmanuel
Bonsoir,

Ajoute ceci au début de la macro:

Dim FeuilleActive As Worksheet
Application.ScreenUpdating = False
Set FeuilleActive = ActiveSheet

Et ceci à la fin:

FeuilleActive.Select
Application.ScreenUpdating = True


Cordialement,

Manu/

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

bonsoir isabelle ,

Merci encore pour ta reponse..
et je te confirme que la modification du code que tu m'a proposé
fonctionne
parfaitement..
je l'ai appliqué sur Thisworkbook plutot que sur toutes les feuilles pour
eviter la repetition des modif comme me l'avais proposé Isteph..

Mais un dernier "petit" problême est apparu,à savoir que par exemple si je
suis sur la feuille NATIONAL et que je déclenche la macro,on voit à
l'écran
toutes les feuilles se succeder pour aboutir à la feuille ST OMER et non
plus
NATIONAL...
Serait il possible d'éviter de voir ces feuilles apparaitre et faire en
sorte que la feuille initiale reste jusqu'a la fin de l execution de la
macro
et donc que les actions sur les autres feuilles ne soient pas visibles???

Merci encore de votre aide
--
ALF